Kurs rozszerzony języka Python

Podobne dokumenty
Kurs rozszerzony języka Python

Laboratorium 2. def detail(request, question_id): return HttpResponse("Patrzysz na pytanie %s." % question_id)

Serwer WWW na przykªadzie Django cz.3

Kurs rozszerzony języka Python

Zaawansowany kurs języka Python

Programowanie w Ruby

Testowanie aplikacji. Kurs języka Ruby

Aplikacje WWW. Krzysztof Ciebiera. 3 kwietnia 2014

TDD w Django South Sorl Haystack + Whoosh Małe, a cieszy Deployment Koniec. Wspomagacze Django. Jan Filipowski. 25 maja 2010

Serwer WWW na przykªadzie Django

Chatter Aplikacja internetowa

Programowanie w Ruby

Wprowadzenie do Internetu Zajęcia 5

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Internetowe bazy danych

Testy aplikacji webowych

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Laboratorium Kierunki Rozwoju oprogramowania REST, Django

Dokumentacja smsapi wersja 1.4

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Frameworki IOS. Wykład 14. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Quiz Aplikacja internetowa

Jak okiełznać frontend w Django? Piotr Maliński

Bazy Danych i Usługi Sieciowe

Testowanie aplikacji Java Servlets

Modele danych walidacja widoki zorientowane na model

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

MVC w praktyce tworzymy system artykułów. cz. 2

Dokumentacja. Realizacja w portalu kalkulatora simple. (dane wprowadzane z klawiatury).

Programowanie i projektowanie obiektowe

Programowanie w Internecie

Aplikacje internetowe - laboratorium

Udostępnianie klientom zasobów serwera

Aktualizacja SMSFall v Data publikacji:

Podstawy programowania III WYKŁAD 4

Bezpieczeństwo systemów komputerowych

Zajęcia 4 - Wprowadzenie do Javascript

Jak pisać testy? Wersja 2

Internetowe bazy danych

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Gatesms.eu Mobilne Rozwiązania dla biznesu

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

Programowanie w Ruby

Czysta architektura (nawet z Django!) Sebas an PyWaw 72

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Wybrane działy Informatyki Stosowanej

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Instrukcja obsługi programu CMS Dla rejestratorów HANBANG

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Laboratorium 1 Wprowadzenie do PHP

Laboratorium 7 Blog: dodawanie i edycja wpisów

Formularze. 1. Formularz HTML

Baza danych do przechowywania użytkowników

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Technologie internetowe ASP.NET Core. Paweł Rajba

Programowanie w Ruby

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Wstęp do testowania : Szymon Ramczykowski

Aplikacje WWW - laboratorium

Django : praktyczne tworzenie aplikacji sieciowych / Antonio Mele. Gliwice, cop Spis treści

Udostępnianie klientom zasobów serwera

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Sesje i logowanie. 1. Wprowadzenie

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie komponentowe 5

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

JavaScript - wykład 4. Zdarzenia i formularze. Obsługa zdarzeń. Zdarzenia. Mysz. Logiczne. Klawiatura. Beata Pańczyk

Lista ToDo Aplikacja internetowa

Wykład 6: PHP: praca z bazą danych MySQL, cz.2

Architektury Usług Internetowych. Laboratorium 1. Servlety

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla administratora systemu Warszawa 2007

Wdrożenie modułu płatności eservice. dla systemu Magento

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

Modele. Najcz. Metoda unicode definiuje sposób wyświetlania obiektu w postaci tekstowej. BooleanField - pole logiczne, True/False

Zajęcia 11 wykorzystanie MySQL w PHP

Aplikacje internetowe

Program szkolenia: REST i Microservices w PHP

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

CouchDB. Michał Nowikowski

Specyfikacja HTTP API. Wersja 1.6

Dokumentacja techniczna API systemu SimPay.pl

Aplikacje www laboratorium

Formularze w PHP dla początkujących

Systemy internetowe Wykład 3 PHP


Katalog książek cz. 3: Web Service

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Walidacja po stronie serwera Walidacja po stronie klienta:

Przedmiot: Programowanie usług internetowych - Delphi Przygotował: K. Strzałkowski Rok V. Semestr IX. Wydział ZiMK

Zaawansowany kurs języka Python

MVC w praktyce tworzymy system artykułów. cz. 1

Transkrypt:

Środowisko Django, cz. 2 12 stycznia 2018

Plan wykładu 1 2 Trochę teorii Obsługa żądań GET Obiekty formularzowe 3 Zarządzanie sesjami Polonizacja 4 Testy jednostkowe Symulowanie klienta

Plan wykładu 1 2 Trochę teorii Obsługa żądań GET Obiekty formularzowe 3 Zarządzanie sesjami Polonizacja 4 Testy jednostkowe Symulowanie klienta

Przypomnienie Co implementujemy System zapisy: wykładowcy; studenci; wykłady.

Administrowanie aplikacją settings.py MIDDLEWARE CLASSES = ( django.middleware.common.commonmiddleware, django.contrib.sessions.middleware.sessionmiddleware, django.contrib.auth.middleware.authenticationmiddleware, ) INSTALLED APPS = ( django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.sites, django.contrib.admin, wyklad.zapisy, ) Umożliwia zarządzanie aplikacją.

Administrowanie aplikacją settings.py MIDDLEWARE CLASSES = ( django.middleware.common.commonmiddleware, django.contrib.sessions.middleware.sessionmiddleware, django.contrib.auth.middleware.authenticationmiddleware, ) INSTALLED APPS = ( django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.sites, django.contrib.admin, wyklad.zapisy, ) Umożliwia zarządzanie aplikacją.

Podłączenie administracji Wyszukanie w aplikacjach informacji, czy chcą być zarządzane przez moduł admin. zapisy/admin.py from django.contrib import admin admin.site.register(wykladowca) admin.site.register(student) admin.site.register(wyklad)

Plan wykładu Trochę teorii Obsługa żądań GET Obiekty formularzowe 1 2 Trochę teorii Obsługa żądań GET Obiekty formularzowe 3 Zarządzanie sesjami Polonizacja 4 Testy jednostkowe Symulowanie klienta

Podstawowe żądania HTTP Trochę teorii Obsługa żądań GET Obiekty formularzowe GET GET <ścieżka do pliku> HTTP 1.1 GET <ścieżka>?query=python&subquery=django HTTP 1.1

Podstawowe żądania HTTP Trochę teorii Obsługa żądań GET Obiekty formularzowe GET GET <ścieżka do pliku> HTTP 1.1 GET <ścieżka>?query=python&subquery=django HTTP 1.1 POST POST /login HTTP 1.1 login=admin password=qwerty

Inne typy żądań Trochę teorii Obsługa żądań GET Obiekty formularzowe HEAD PUT DELETE TRACE CONNECT OPTIONS

Analiza żądań Trochę teorii Obsługa żądań GET Obiekty formularzowe Przypomnienie: widoki def hello(request):...

Analiza żądań Trochę teorii Obsługa żądań GET Obiekty formularzowe Przypomnienie: widoki def hello(request):... Obiekt Request, atrybuty path, get full path() (z zapytaniem) method: może być GET bądź POST GET, POST: podobne do słowników

Kiedy GET, kiedy POST Trochę teorii Obsługa żądań GET Obiekty formularzowe GET Wyświetlenie danych, bez ich zmiany (np. wyszukiwanie). POST Efekty uboczne: zmiana danych, wysłanie maila z formularza.

Składnia Trochę teorii Obsługa żądań GET Obiekty formularzowe <form action="/search/" method="get"> <input type="text" name="query"> <input type="submit" value="szukaj"> </form> Widok: urls.py urlpatterns = patterns(, #... (r ˆsearch-form/$, views.search form), #... )

Implementacja widoków from django.http import HttpResponse from django.shortcuts import render to response from mysite.zapisy.models import Wyklad def search form(request): return render to response( search form.html ) def search(request): if query in request.get and request.get[ query ]: query = request.get[ query ] wyklady = Wyklad.objects.filter(tytul icontains=query) return render to response( search results.html, { wyklady : wyklady, query : query}) else return render to response( search form.html, { error : True})

szablon search form.html Trochę teorii Obsługa żądań GET Obiekty formularzowe {% if error %} <p style="color: red;">proszę zadać pytanie</p> {% endif %} <form action="/search/" method="get"> <input type="text" name="query"> <input type="submit" value="szukaj"> </form>

Trochę teorii Obsługa żądań GET Obiekty formularzowe Obiekty formularzowe: co to takiego obiekty, z których można łatwo wyprodukować formularze można konfigurować różne parametry (rozmiar pola, opcjonalność pól); weryfikacja podawanych danych

Obiekty formularzowe Trochę teorii Obsługa żądań GET Obiekty formularzowe from django import forms class ContactForm(forms.Form): subject = forms.charfield(max length=100) email = forms.emailfield(required=false, label= Podaj email ) message = forms.charfield(widget=forms.textarea)

Trochę teorii Obsługa żądań GET Obiekty formularzowe Sposoby walidacji podawanych danych class ContactForm(forms.Form):... def clean email(self): em = self.cleaned data[ email ] if em niepoprawny: raise forms.validationerror( Niepoprawny email! ) return em

Użycie obiektu formularza Trochę teorii Obsługa żądań GET Obiekty formularzowe Metody i pola obiektu.as table: do włożenia do tabeli.as ul: do włożenia do wyliczenia <ul>.as p: wkłada w znaczniki <p>

Osadzenie formularza w szablonie Trochę teorii Obsługa żądań GET Obiekty formularzowe Przykład użycia {% if form.errors %} <p style="color: red;"> Popraw błędy {{ form.errors pluralize }}. </p> {% endif %} <form action="" method="post"> <table> {{ form.as_table }} </table> <input type="submit" value="submit"> </form>

Wiązanie widoku z formularzem Trochę teorii Obsługa żądań GET Obiekty formularzowe from django.shortcuts import render to response from mysite.contact.forms import ContactForm def contact(request): if request.method == POST : form = ContactForm(request.POST) if form.is valid(): cd = form.cleaned data operacja(cd[ subject ], cd[ message ], cd.get( e-mail, noreply@example.com )) return HttpResponseRedirect( /contact/thanks/ ) else form = ContactForm() return render to response( contact form.html, { form : form})

Trochę teorii Obsługa żądań GET Obiekty formularzowe Inicjowanie wartościami początkowymi form = ContactForm(initial= { subject= Mam problem, message= Opisz problem })

Plan wykładu Zarządzanie sesjami Polonizacja 1 2 Trochę teorii Obsługa żądań GET Obiekty formularzowe 3 Zarządzanie sesjami Polonizacja 4 Testy jednostkowe Symulowanie klienta

Sesje Zarządzanie sesjami Polonizacja Sesja: ciąg akcji związanych z jednym użytkownikiem; na przykład zakupy w sklepie internetowym. Realizacja Ciasteczka

Obsługa sesji w Django Zarządzanie sesjami Polonizacja Co potrzebujemy: w MIDDLEWARE CLASSES ma być django.contrib.sessions.middleware.sessionmiddleware. w INSTALLED APPS ma być django.contrib.sessions

Jak używać sesji Zarządzanie sesjami Polonizacja Atrybut request.session Jest to atrybut zachowujący się podobnie do słowników.

Przykład Zarządzanie sesjami Polonizacja Logowanie def login(request): if request.method!= POST : raise Http404( Tylko POSTs są dopuszczalne ) try: m = User.objects.get(username=request.POST[ username ]) if m.password == request.post[ password ]: request.session[ user id ] = m.id return HttpResponseRedirect( /you-are-logged-in/ ) except User.DoesNotExist: return HttpResponse( Nieudane logowanie :-( )

Przykład Zarządzanie sesjami Polonizacja Logowanie def login(request): if request.method!= POST : raise Http404( Tylko POSTs są dopuszczalne ) try: m = User.objects.get(username=request.POST[ username ]) if m.password == request.post[ password ]: request.session[ user id ] = m.id return HttpResponseRedirect( /you-are-logged-in/ ) except User.DoesNotExist: return HttpResponse( Nieudane logowanie :-( ) request.session[ user id ] służy do identyfikacji, czy użytkownik jest zalogowany.

Wylogowanie Zarządzanie sesjami Polonizacja def logout(request): try: del request.session[ user id ] except KeyError: pass return HttpResponse( Jesteś wylogowany )

Podstawowe pojęcia Zarządzanie sesjami Polonizacja Internacjonalizacja (I18N) Przygotowanie programu do tworzenia różnych wersji językowych.

Podstawowe pojęcia Zarządzanie sesjami Polonizacja Internacjonalizacja (I18N) Przygotowanie programu do tworzenia różnych wersji językowych. Lokalizacja Stworzenie wersji językowej.

Zarządzanie sesjami Polonizacja Włączanie/wyłączanie internacjonalizacji USE I18N = True TEMPLATE CONTEXT PROCESSORS = ( django.core.context processors.i18n )

Tłumaczenie napisów w widokach Zarządzanie sesjami Polonizacja from django.utils.translation import ugettext as def widoczek(request): output = ( Welcome to my site. ) return HttpResponse(output)

Tłumaczenia w szablonach Zarządzanie sesjami Polonizacja Tłumaczenie pojedynczego napisu <title>{% trans "This is the title." %}</title> Tłumaczenie większych fragmentów {% blocktrans %} This string will have {{ value }} inside. {% endblocktrans %}

Tłumaczenie Zarządzanie sesjami Polonizacja django-admin.py makemessages -l pl tworzy plik locale/pl/lc MESSAGES/django.po. String z pliku źródłowego jest kluczem, my powinniśmy uzupełnić o tłumaczenie

Tłumaczenie Zarządzanie sesjami Polonizacja django-admin.py makemessages -l pl tworzy plik locale/pl/lc MESSAGES/django.po. String z pliku źródłowego jest kluczem, my powinniśmy uzupełnić o tłumaczenie Po wpisaniu tłumaczeń Kompilacja: django-admin.py compilemessages

Plan wykładu Testy jednostkowe Symulowanie klienta 1 2 Trochę teorii Obsługa żądań GET Obiekty formularzowe 3 Zarządzanie sesjami Polonizacja 4 Testy jednostkowe Symulowanie klienta

Poziomy testowania Testy jednostkowe Symulowanie klienta Testy jednostkowe Patrz: wykład 9: unittest

Poziomy testowania Testy jednostkowe Symulowanie klienta Testy jednostkowe Patrz: wykład 9: unittest Testy klienckie Symulacja działania przeglądarki.

Mała sugestia Testy jednostkowe Symulowanie klienta Zamiast lepiej import unittest from django.test import TestCase

Testy jednostkowe Symulowanie klienta Różnice między unittest a django.test automatyczne ładowanie danych testowych do bazy testowej; Każdy test jest odrębną transakcją; dodatkowe asercje do testowania HTML a, przekierowań HTTP, etc.

Przykład Testy jednostkowe Symulowanie klienta from django.test import TestCase from wyklad.zapisy.models import Wyklad class WykladTestCase(TestCase): def setup(self): Wyklad.objects.create(nazwa= Python, ects=3) def test zapisu(self): py = Wyklad.objects.get(nazwa= Python ) self.assertequal(py.ects, 3)

Przykład Testy jednostkowe Symulowanie klienta from django.test import TestCase from wyklad.zapisy.models import Wyklad class WykladTestCase(TestCase): def setup(self): Wyklad.objects.create(nazwa= Python, ects=3) def test zapisu(self): py = Wyklad.objects.get(nazwa= Python ) self.assertequal(py.ects, 3)./manage.py test Wyszukuje wszystkie pliki test*.py i traktuje je jako elementy zestawu testów.

Testowa baza danych Testy jednostkowe Symulowanie klienta Testowa baza danych (test baza produkcyjna ) jest czyszczona po każdym teście.

Dane testowe Testy jednostkowe Symulowanie klienta Dane testowe z istniejącej bazy danych: manage.py syncdb tworzy plik initial data z danymi Te dane są domyślnie ładowane podczas testów.

Inne dane testowe Testy jednostkowe Symulowanie klienta from django.test import TestCase from wyklad.zapisy.models import Wyklad class WykladTestCase(TestCase): fixtures = [ jesien.json, wiosna ]...

Klient testowy Testy jednostkowe Symulowanie klienta django.test.client.client Symuluje wysyłanie zapytań GET/POST.

Klient testowy Testy jednostkowe Symulowanie klienta django.test.client.client Symuluje wysyłanie zapytań GET/POST. Można też używać narzędzi typu Selenium.

Przykład scenariusza Testy jednostkowe Symulowanie klienta from django.test.client import Client student = Client() response = student.post( /login/, { username : i123456, password : 123456 }) print response.status code # 200 response = student.get( /student/profil/ ) print response.content

Uwagi Testy jednostkowe Symulowanie klienta Scenariusze można opakować w przypadki testowe i korzystać z dodatkowych asercji z django.test.testcase

Uwagi Testy jednostkowe Symulowanie klienta Scenariusze można opakować w przypadki testowe i korzystać z dodatkowych asercji z django.test.testcase django dostarcza specjalizowanych klas do implementacji różnych testów wraz z sugestiami w jakich sytuacjach ich używać.