Formularze do obsługi użytkowników dzięki Django Registration
Budowanie zaawansowanych serwisów internetowych to tak naprawdę budowa zamku z klocków. W tym artykule nauczymy się właśnie posługiwać takimi klockami, a dokładniej poznamy moduł Django Registration, który umożliwia nam dodanie do strony internetowej formularzy umożliwiających rejestrację, logowanie oraz inne mechanizmy do obsługi kont użytkowników.
Wymagania
Django Registration do poprawnego działania wymaga Pythona w wersji wyższej niż 2.7.9 (dla Pythona 2.x) lub 3.4 (dla Pythona 3.x) oraz oczywiście Django przynajmniej 1.8.
Instalacja
Chcąc skorzystać z modułu Django Registration musimy najpierw go zainstalować. W tym celu przechodzimy więc do terminalu gdzie odnajdujemy katalog naszego projektu i wpisujemy poniższe polecenie:
pip install django-registration
Ustawienia i konfiguracja
Po pomyślenj instalacji przyszła pora na zmierzenie się z kofiguracją paczki. Otwieramy więc plik settings.py
gdzie ustawiamy wartość parametru odpowiedzialną za liczbę dni jaką użytkownik będzie miał na aktywację swojego konta:
ACCOUNT_ACTIVATION_DAYS = 2 # two days
Oczywiście podobnie jak robiliśmy to przy okazji artykułu na temat social widgetów w Django, również i tutaj musimy w pliku settings.py
dodać informacjie o nowo zainstalowanym module:
INSTALLED_APPS = ( ... 'registration', ... )
Kolenym krokiem będzie ustawienie odpowiedniego url’a, który będzie przekierowywał do skryptu odpowiedzialnego za obsługę kont użytkowników. Przechodzimy więc do pliku urls.py
w katalogu naszego serwisu i do tablicy urlpatterns
przypisujemy nowy element:
url(r'^accounts/', include('registration.backends.hmac.urls'))
Przykładowy wygląd tablicy ze ścieżkami:
urlpatterns = [ url(r'^
Wgranie szablonów
W dalszej kolejności pozostało nam wgranie odpowiednich szablonów do naszego projektu. Aby to zrobić musimy z portalu GitHub pobrać repopozytorum „django-registration-templates” (github.com/macdhuibh/django-registration-templates), możemy to zrobić na przykład poprzez przycisk „dowlnolad” znajdujący się w prawym górnym rogu strony lub za pomocą gita. Kiedy pliki znajdą się już na naszym komputerze, wystarczy tylko przenieść je do katalogu templates
naszego serwisu (katalog ten znajduję się w katalogu projektu: nazwa_projektu/nazwa_serwisu/templates
).
Uwaga, w katalogu templates
mamy teraz następujące pliki: index.html
oraz base.html
. Ważne jest to, żeby zachować ich nazwy oraz nie modyfikować ich zawartości (no chyba, że chcemy wprowadzić modyfikacje w formularzach). Ważne jest również to aby ścieżka generująca widok strony głównej (plik urls.py
w katalogu serwisu) ładowała plik index.html
: r'^$', HomeView.as_view(), name='index'
.
Formularze już prawie działają ale…
No właśnie, kiedy uruchomimy nasz serwis zobaczymy, że formularze już wyświetlają się na stronie i można je wypełnić, a nawet wysłać. Jednak jak się okazuje, po kliknięciu przykładowo, przycisku „register” znajdującego się w formularzu rejestracji użytkowników, otrzymujemy błąd:
OperationalError at /accounts/register/
no such table: auth_user
Aby go usunąć musimy zrobić migrację danych, wywołujemy więc z poziomu terminala poniżsżą komendę:
python manage.py migrate
Teraz możemy ponownie spróbować wysłać formularz ale znowu trafiamy na pewien problem:
[Errno 61] Connection refused
Kiedy przescrolujemy nieco niżej odnajdziemy miejsce w którym jest błąd. Jak widać problem dotyczy mechanizmu wysyłającego emaile, pozostaje więc jeszcze raz wrócić do pliku konfiguracyjnego aby dokonać tam pewnych zmian.
Na początku pliku dodajemy informacje o imporcie mechanizmu obsługującego wysyłanie emaili w Django:
from django.core.mail import send_mail
oraz na końcu podajemy wszystkie niezbędne informacje umożliwiające wysłanie emeila:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = True EMAIL_PORTS = 587 EMAIL_HOST = 'smtp.localhost' EMAIL_HOST_USER = 'admin@localhost' EMAIL_HOST_PASSWORD = 'yourPassword' SERVER_EMAIL = 'admin@localhost' DEFAULT_FROM_EMAIL = 'Admin'
Gotowe, teraz jeżeli będziemy chcieli zarejestrować nowego użytkownika wszystko powinno zadziałać.
Podsumowanie
Jak widać dzięki modułowi Django Registration dostaliśmy „za darmo” cały mechanizm generujący formularze do obsługi kont użytkowników na naszej stronie internetowej. Więcej informacji na temat wykorzystania tego skryptu znajdziecie oczywiście w dokumentacji: django-registration.readthedocs.io.
Super! Dzięki za prosty i konkretny opis. Jeszcze nie testowałem, ale ostatnio jak chciałem pobrać jakieś repozytoria to miałem z tym problem. Możesz opisać dokładnie jak to zrobić?
Co konkretnego masz na myśli z tymi repozytoriami?
Mam zerową wiedzę o Django, minimalną z Pythona i wybiórczą wiedzę informatyczną. Potrzebowałbym instrukcji krok po kroku jak zaimportować te repozytoria w PyCharm na Windows.
Tak jak jest to opisane w artykule, przechodzisz do odpowiedniego katalogu (z Twoim projektem) instalujesz moduł, a potem w pliku settings.py, dodajesz informacje o nowym module i powinno działać ;-)
Teraz piszesz chyba o instalacji modułu Django, a ja pytam o repozytoria z GitHab.com
Ok, nie zrozumieliśmy się. No to też jest proste, robisz clone i w pycharm file -> import (czy jakoś tak). O komendach gita pisałem na blogu…
Dobra, chyba mam. Jutro przetestuję.
git remote add origin http://github.com/…
nie git add, tylko: git clone http://github.com/…
’git’ is not recognized as an internal or external command,
operable program or batch file.
gita najpierw trzeba zainstalować
Nie wspomniałeś o tym w poradniku… :D Teraz działa ;) Dzięki
Po zainstalowaniu django-registration do nowego projektu nie tworzy się settings.py i urls.py. Nie tworzą się też po pobraniu gita. O co tu tym razem chodzi?
Bo nie tworzysz projektu django. Te pliki nie są dodawane przez moduł django registration.