Uwierzytelnianie użytkowników

Transkrypt

Uwierzytelnianie użytkowników
Programowanie w Sieci Internet
— Python - c. d.
Kraków, 28 listopada 2014 r.
mgr Piotr Rytko
Wydział Matematyki i Informatyki
Co dziś będziemy robić
• Uwierzytelnianie użytkowników,
• Obiekt session,
• Silniki baz danych,
• MySQL queries,
• Zabawa, czyli napiszemy coś sami :)
Uwierzytelnianie użytkowników,
Django posiada swój panel administratora, a sposób jego obsługi został przedstawiony
na poprzednich zajęciach.
Polecam także obszerniejszy opis na stronie http://bogdan.students.wmi.amu.edu.pl/
education/python%20i%20django/Django_3.html#chapter_1
Django umożliwia nam także logowanie się do naszej strony przez gotowy moduł. Jest
to moduł logowania użytkowników, a nie administratorów. Sposób logowania jest dość
przejrzyście opisany na stronie http://bogdan.students.wmi.amu.edu.pl/education/
python%20i%20django/Django_3.html#chapter_3
Jednak aby się zalogować, należałoby wpierw założyć użytkownikom ich konta.
Umożliwia nam to kolejny gotowy moguł rjestracji http://
bogdan.students.wmi.amu.edu.pl/education/python%20i%20django/
Django_3.html#chapter_4
Session
Sesje w django są zdefiniowane w klasie
django.contrib.sessions.middleware.SessionMiddleware
Sesje mają podobny interfejs do słowników. Aby dodać wartość do sesji piszemy:
request.session['klucz'] = 'wartosc'
a aby odczytać i np. wypisać: print request.session['klucz']
Aby sprawdzić warunek z sesji: if request.session.get('klucz',wartosc) ...
Obiekt session jest dostępny jako pierwszy argument obiektu HttpRequest
Konfiguracja sesji z poziomu settings.py:
SESSION_COOKIE_AGE - ważność cookie sesji w sekundach. Domyślnie 2 tygodnie.
SESSION_COOKIE_DOMAIN - domena ciasteczka.
SESSION_COOKIE_NAME - nazwa ciacha dla sesji. Domyślnie sessionid.
SESSION_COOKIE_SECURE - jeżeli ustawione na True ciacho będzie przesyłane tylko
przez połączenia HTTPS
SESSION_EXPIRE_AT_BROWSER_CLOSE - jeżeli ustawione na True sesja wygaśnie po
zamknięciu przeglądarki
Silniki baz danych
Aby napisać większą aplikację SQLite może być dla nas zbyt małe. Mamy więc
możliwość skonfigurowania większej bazy danych. Może być to MySQL lub Postgres.
Ja przedstawię konfigurację dla MySQL’a
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<your_username>$<your_database_name>',
'USER': '<your_username>',
'PASSWORD': '<your_mysql_password>',
'HOST': 'mysql.server',
}
}
Na stronie dev.mysql znajdziemy jeszcze inny inny silnik
Można także użyć klucza
‘OPTIONS’
mysql.connector.django
.
do skonfigurowania połączenia, transakcji, etc.
Więcej info na https://docs.djangoproject.com/en/1.5/ref/settings/#std:setting-DATABASES
MySQL queries
Django daje na możliwość używania zapytań na modelach.
W tym wypadku tworzymy klasę obiektu z bazy. Możemy wtedy pobrać z bazy dane i
stworzyć taki obiekt, a następnie edytować jego wartości i wołając metodę save()
zapisać nasz obiekt w bazie. Możemy też usunąć ten obiekt wołając delete().
Aby dodać do bazy tworzymy nowy obiekt i dodajemy go wołając add().
Dobry tutorial możecie znaleźć pod w dokumentacji django, pod adresem:
https://docs.djangoproject.com/en/dev/topics/db/queries/
Możemy także tworzyć własne zapytania SQL (tak zwane raw queries).
Tu również tworzymy sobie klasę obiektu reprezentującą poszczególne wpisy z tabel i
wywołujemy na niej raw(‘[zapytanie sql]’), możemy do zapytania dodać
dodatkowe argumenty params i translations.
Więcj info w dokumentacji django na stronie:
https://docs.djangoproject.com/en/dev/topics/db/sql/
Szablony (templates)
Szablony to szybki sposób na wypełnianie stron treścią bez potrzeby powtarzania
stałego kodu w nieskończoność. Templates w pythonie dają nam wygodny interface do
tego zabiegu.
Wystarczy ustawić katalog szablonów TEMPLATE_DIRS w settings.py i stworzyć swój
własny szablon. Po zakończeniu bloku I nie powinno to być trudne. Szablon to strona
html z umieszczonymi blokami w miejscach, gdzie django będzie mógł umieszczać
swoją zawartość.
Aby wykorzystać szablon wpisujemy najpierw {% extends “template.html” %}, a
następnie wypełniamy zawartość odpowiednich bloków pisząc:
{% block nazwaBloku %} ... {% endblock %}
Bloki nie mogą się zagnieżdżać, a w szablonie miejsce bloku zaznaczamy dokładnie tak
samo, tylko bez zawartości: {% block nazwaBloku %}{% endblock %}.
Możecie także wklejać kod do html’a np.: {% if [warunek] %} [kod] {% endif %}
Tu także znajdziecie dużo info na ten temat w dokumentacji django
https://docs.djangoproject.com/en/dev/ref/templates/
NTS — Napisz To Sam
Napiszmy skrypt w pythonie, który będzie dawał możliwość:
• zarejestrowania się — będzie dodawał do bazy użytkownika (wymagane login i hasło
+ inne dane wedle uznania),
• zalogowania się do systemu — sprawdzi w bazie czy użytkownik istnieje w bazie
danych i jeśli tak, to utworzy dla niego nową sesję pozwalając mu przeglądać
zawartość serwisu, a w przeciwnym wypadku wyświetli odpowiednią informację o
błędnym logowaniu i każe zalogować się ponownie.
Dodatkowo, przy próbie dostania się na strony chronione (tylko dla użytkowników
zalogowanych) będzie kierować do strony logowania.
Serwis powinien posiadać przynajmniej 2 strony chronione, z tego jedna na którą
użytkownik zostanie skierowany po zalogowaniu, oraz stronę logowania / rejestracji
nowych użytkowników.
Dziękuję za uwagę!

Podobne dokumenty