Django

Raport nr 1: Django

Tym postem chciałabym rozpocząć nową serię. Są to raporty, czyli sprawozdania z poznanych przeze mnie technologii. Jeśli interesuje was ta technologia, możecie ten post traktować jak ściągę czy informację na temat kursów. No to zaczynajmy!

Django

Przymierzałam się go niego od ponad pół roku. Pisałam w Pythonie i czułam się dziwnie z tym, że nie znam tego frameworka. Znajomi mówili “Django łatwe, naucz się Django”, aż w końcu zaczęłam powiązany z nim projekt na Kernelu i nie chciałam zostawać w tyle. Nadszedł długi weekend i mogłam w końcu zacząć.

Uwagi wstępne:

Korzystałam z kursu DjangoGirls – link tutaj – oraz z IDE PyCharm w wersji dla studentów.

Z Django miałam styczność już wcześniej – potrafiłam uruchomić serwer (maszynę wirtualną Pythona) i wystartować kernelowy projekt. Dlatego ominęłam pierwsze etapy kursu i przeszłam od razu do rozdziału Twój pierwszy projekt w Django. Najpierw w PyCharmie stworzyłam nowy projekt w Django, wybrałam wersję Pythona (2.7, w odróżnieniu od kursu, który jest na 3.4). IDE od razu stworzyło za mnie maszynę wirtualną i zainstalowało potrzebne pakiety za pomocą pip – instalatora pakietów dla Pythona (takie sprytne urządzenie: macie czystego Pythona i konsolę, a chcecie mieć Django? Wpisujecie w konsolę: pip install django. Dziękuję, pozamiatane). Tak więc miałam już gotowy projekt podstawowy i mogłam od razu rozpocząć pracę.

Przechodziłam przez kurs bardzo szybko (pominęłam rozdział pt. Wdrażanie, uznałam, że zajmę się tym później) i bez większych problemów. Przyznam się, że czytałam mało opisów, bardziej starałam się przepisać kod, przeczytać go i zrozumieć. Jedynym problematycznym momentem było, gdy nie doczytałam, że w proponowanym modelu posta były dwie daty – stworzenia (szkicu) i publikacji. A potem dziwiłam się, dlaczego gdy wybieram z bazy posty które są już opublikowane, nie mam żadnych wyników – brak czytania ze zrozumieniem, my bad.

Już w południe miałam ukończony kurs i postawionego prostego bloga (lista postów, możliwość dodania nowego posta z frontu, osobna strona każdego posta). Czułam lekki niedosyt, bo jak to tak, już? Koniec? No nie, Bielak nie mógł tak tego zostawić, toż ta witryna ledwo raczkuje, to niemowlę jeszcze. I Bielak nie zostawił.

Zaznaczam, że poniższa część będzie najlepiej zrozumiała dla osób, które przynajmniej przeczytały powyższy kurs.

Wśród ficzerów (dodatkowych opcji), którymi się zajęłam, były:

  1. Wrzucenie na Githuba i PythonAnywhere (serwer www). Trzeba było rozwiązać problem z konfiguracją, ale poszło bez większych zgrzytów.
  2. Możliwość dodawania postów tylko dla zalogowanych użytkowników. Nie masz konta – nawet tego nie zobaczysz (prosty if).
  3. System komentarzy. Najpierw stworzyłam nowy model danych (to model obiektu, do przechowywania w bazie danych) o nazwie Comment. Kod poniżej:
    class Comment(models.Model):
        post_id = models.ForeignKey('Post')
        author = models.CharField(max_length=100, null=False)
        text = models.TextField()
        published_date = models.DateTimeField(
            default=timezone.now)
    
        def __str__(self):
            return self.text

    Określiłam autora i tekst komentarza, a także datę publikacji. Dodatkowo przypisałam komentarz do konkretnego postu (element post_id). Następnie napisałam formularz analogiczny jak przy dodawaniu postu i dodałam go do strony z pojedynczym postem. Musiałam zmienić też część konfiguracji w Pythonie. Komentarze gotowe!

  4. Następnie postanowiłam dodać ochronę przeciw botom – tzw. reCAPTCHA. Udostępniana jest przez Google. Trzeba podać adres swojej strony i wygenerować dwa klucze – prywatny i publiczny. Aby powiązać usługę z Django użyłam dostępnego w pip pakietu django-recaptcha.
  5. Kolejnym krokiem było stworzenie informacji o komentarzach pod konkretnym postem na stronie głównej. Aby ją wyświetlić, w modelu posta zaimplementowałam funkcję countComments:
    def countComments(self):
        return Comment.objects.filter(post_id = self.pk).count()
    

    Wynik powyższej funkcji wyświetlam pod każdym postem.

  6. Została mi tylko lista najnowszych postów na stronie głównej. Postanowiłam wyświetlać pierwsze słowa każdego postu (do 50 znaków). W tym celu napisałam funkcję returnShort.
    def returnShort(self):
        return self.text[:50] + "..."

    Natomiast w szablonie strony umieściłam kod:

    {% for post in posts|slice:":3" %}
        <h3><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h3>
        <div>{{ post.returnShort }}</div>
    {% endfor %}

    Zwracam 3 wyniki ze wszystkich postów, a następnie je wyświetlam.

     

To było wszystko z dodatkowych opcji, które postanowiłam dorzucić. Jeszcze parę zmian, dodanie efektu parallax scrolling w nagłówku i gotowe!

Strona projektu – wchodźcie śmiało, możecie testować i komentować!

Repozytorium projektu(github).

Tyle, jeśli chodzi o mój pierwszy raport. Polecam naukę Django, a jeśli macie jakiekolwiek pytania, piszcie śmiało.

Pozdrawiam i do następnego!