Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

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.

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , , , , ,

Dodaj komentarz

Komentarze (13)

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest