Ocena projektu typu agregator linków

0

Cześć, prosiłbym o opinie dotyczące projektu strony typu link agregator napisanej w Django. Link: https://github.com/rumca-js/Django-link-archive:

  • projekt zawiera opis, zrzuty ekranu. Zrzuty ekranu trochę zdążyły się już zdezaktualizować
  • proszę o ocenę samego pomysłu. Może już są alternatywy, które jednak go realizują? Wydaje mi się że Lemmy jest dużym projektem, ja myślę o czymś o wiele 'prostszym'
  • nie jestem zawodowym programistą pythona, ani Django, więc domyślam się że wiele rzeczy robię naokoło
  • projekt ma bardziej na celu dostarczenie funkcjonalności moderacyjnej dla jednego człowieka (lub małej drużyny). Odbiorców może być natomiast większa ilość. Nie skupiałem się zatem nad tym, aby wszystkie funkcje działały dla użytkowników różnej kategorii (is_staff / is_authenticated)
  • projekt jest jeszcze nie skończony i nie jestem pewien czy kiedykolwiek będzie
0
  1. Zainteresuj się poetry, skoro udostępniasz projekt na githubie, to oczekiwałbym, że po sklonowania i odpaleniu jednej komendy/skryptu jestem w stanie podnieść projekt/developowac,
  2. black https://github.com/psf/black - pomaga w formatowaniu. Czasami ciężko mi się czytało kod,
  3. Na tym poziomie kwestia gustu IMO, ale do takiej aplikacji wybrałbym raczej FastAPI,
  4. W modelu jest kod, który powinien być raczej w kontrolerze,
  5. Model powinien służyć tylko do odczytywania/zapisywania danych do bazy/API/itd. po pobraniu danych powinno się je zamalować na obiekty domenowe i na nich przeprowadzać operacje,
  6. https://github.com/rumca-js/Django-link-archive/blob/main/rsshistory/serializers/bookmarksexporter.py#L12 - można użyć """jakiś tekst""" by przypisać do zmiennej wartość mająca więcej linii, to w sumie powinno i tak być przeniesione do template IMO,
  7. Tak samo jak to https://github.com/rumca-js/Django-link-archive/blob/main/rsshistory/serializers/bookmarksexporter.py#L74,
  8. Dużo zakomentowanego kodu, jak nie używasz to usuń, po to też jest git by trzymał historię jak będziesz chciał wrócić do tego,
  9. Po screenach wygląda na późne lata 90`te. Może przy używaniu jakoś to działa, ale na statycznych obrazkach raczej odstrasza.

To tak na szybko, nie odpalałem, nie wczytywałem się w kod, to jest co mi się rzuciło od razu po przypadkowym przeklikiwaniu się po plikach.

0

Dzięki za analizę i twój czas.
Na szybko już parę rzeczy poprawiłem. Między innymi dodałem skrypt instalacyjny. Poprawiłem formatowanie. Nie będę już tu więcej spamować co zrobiłem a czego nie, tylko sukcesywnie będę rozwiązywać problemy.

1

@renegat0x0:

  1. W makefile jest sudo, temu mówimy stanowcze nie, wrzuć to do docker jak już,
  2. Użyj poetry, w najgorszym wypadku virtualenv,
  3. W requirements.txt nie ma wersji danych narzędzi, wie jak ja to u siebie odpalę za 2 lata, to pobierze mi się Django 6.0 i będzie zonk,
  4. Dlaczego wrzucasz wszystko do osobnych folderów, tak z ciekawości pytam?
0

Udało mi się znowu popracować nad repozytorium. Changelog:

  • usunąłem sudo
  • użyłem poetry
  • zaktualizowałem requirements o wersje. Docelowo chcę spushować to co generuje poetry. Jeszcze jednak tego outputu nie zweryfikowałem w kontekście poprawności
  • zreformatowałem kod używając black
  • jeszcze nie zrobiłem dockera
  • jeszcze nie rozwiązałem wszystkich problemów z oryginalnego pierwszego komentarza

Natomiast mam jeszcze swoje wątpliwości do co projektu. Ciekaw jestem waszego zdania:

  • oprócz screenshot-ów dobrze by mieć jakieś video przedstawiające program (YouTube). 2-3 minuty przedstawiające podstawowe funkcjonalności, in english
  • w tej chwili posługuję się zwykłymi pythonowymi wątkami. Domyślam się że lepiej przejść na https://django-background-tasks.readthedocs.io/en/latest/
  • wiele razy korzystam z get_context/init_context z views.py. Wolę jednak mieć dużą ilość mały plików z małymi klasami, niż parę dużych plików z wieloma klasami. Pewnie można to rozwiązać bardziej elegancko
  • korzystam z łopatologicznego zarządzania gitem (services/gitrepo) operatym na CLI git-a. Pewnie jest bardziej elegancki sposób na wpychanie danych do gita
  • za mało unit testów. Powinny pojawić się przynajmniej takie które dodają jakiś link / źródło, oraz wyświetlają je
  • formularz dotyczący szukania linków powinien być bardziej zaawansowany. Coś w stylu https://confluence.atlassian.com/jirasoftwareserver/advanced-searching-939938733.html. Dobrze aby obsługiwał javascript, był dynamiczny

Dodatkowo:

  • Większość z wątpliwości mam spisanych w issues https://github.com/rumca-js/Django-link-archive/issues
  • Na tym etapie nie chciałbym rezygnować z django na rzecz innego frameworka (to odnośnie FastAPI).
  • Jeśli chodzi o to że model ma trochę funkcji należących do kontrolera, to na swoją obronę tylko mogę powiedzieć że domyślnie widoki w tutorialach prezentują zachowanie dla klas modelu - kod poniżej. Potem mam te obiekty w template i mogę nimi operować. Z lenistwa dodałem parę funkcji do modelu zamiast zastanawiać się jak przekazać do widoku coś innego niż model. Przy okazji spojrzę jak to naprawić.
class RssEntriesListView(generic.ListView):
    model = LinkDataModel
0

@renegat0x0: Cieszę się, że poprawiasz kod i że chce ci się rozwijać.
Jak już wykorzystujesz moje podpowiedzi, to proszę, zapoznaj się z dokumentacją. Zajmie ci to do godziny czasu, pierwszy szlif, a da spory bust do wiedzy. Mówię tutaj np. o poetry. Skoro używasz, to rquirements.txt nie jest ci potrzebne, ba może tylko w przyszłości sprowadzić kłopoty. Zapomnij o pip i ciesz się nowym życiem https://python-poetry.org/docs/basic-usage/.

renegat0x0 napisał(a):

Natomiast mam jeszcze swoje wątpliwości do co projektu. Ciekaw jestem waszego zdania:

  • oprócz screenshot-ów dobrze by mieć jakieś video przedstawiające program (YouTube). 2-3 minuty przedstawiające podstawowe funkcjonalności, in english
  • Możesz użyć OBS'a do nagrania ekranu ~20s i wrzucić plik na githuba. Ja osobiście nie widzę takiej potrzeby jak są screeny. UI/UX powinien być oczywisty dla użytkownika, jeśli jest dobrze zaprojektowany. Jeśli nie, trzeba przemyśleć i poprawić design,
  • Ja w projektach używałem Celery. Ponadto widzę, że używasz WSGI, dzisiaj używa się ASGI,
  • wiele razy korzystam z get_context/init_context z views.py. Wolę jednak mieć dużą ilość mały plików z małymi klasami, niż parę dużych plików z wieloma klasami. Pewnie można to rozwiązać bardziej elegancko
  • Jak chcesz to na siłę można sobie foldery porobić odpowiednie,
  • korzystam z łopatologicznego zarządzania gitem (services/gitrepo) operatym na CLI git-a. Pewnie jest bardziej elegancki sposób na wpychanie danych do gita
  • Z tym gitem nie do końca chyba rozumiem,
  • Skup się na wyczyszczeniu kodu i stabilności, to w swoim czasie,

Dodatkowo:

  • Na tym etapie nie chciałbym rezygnować z django na rzecz innego frameworka (to odnośnie FastAPI).

OK, ale IMO warto podbić do najnowszej wersji Django. Ja nauczyłem się najwięcej od niego . Niestety na razie ma Django 3.2

Ogólnie mam nadzieję, że nie palnąłem czegoś, bo większy projekt w pythonie + django to robiłem już kilka lat temu :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1