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ę!