Aplikacje WWW - lab 5 Jan Wróblewski 31 marca 2015
Zadanie zaliczeniowe 2 Przygotowujemy aplikację do edycji obwodów wyborczych. Komenda django do pobierania listy obwodów wyborczych z http://prezydent2010.pkw.gov.pl/pzt/pl/wyn/w/index.htm do bazy danych; UI z wygodnym wybieraniem gminy z listy gmin korzystając z pobranej hierarchii; Formularz z listą obwodów wyborczych w wybranej gminie z polami do edycji następujących wartości w bazie danych (dla każdego obwodu wyborczego): Komisja otrzymała kart do głosowania - liczba naturalna; Liczba wyborców uprawnionych do głosowania - liczba naturalna; Sprawdzanie po stronie serwera poprawności wpisanych danych i aktualizacja wartości w bazie danych; Mechanizm ostrzegający użytkownika przed konfliktem, gdy nad jednym obwodem pracuje w tym samym czasie wiele osób. Jan Wróblewski Lab 5 31.03.2015 2 / 10
Pobieranie listy obwodów wyborczych Opis pobierania był na ostatnim labie. Nie narzucam formatu bazy danych. Ważne by w jakiś sposób została zachowana hierarchia województwo - powiat - gmina - obwody wyborcze. Można ją zmodyfikować w przypadkach brzegowych, tj.: Nie wszystkie powiaty zawierają gminy, np. powiat-miasto Łódź. Można w takich przypadkach stworzyć dodatkową gminę, podłączyć okrąg wyborczy bezpośrednio pod powiat albo rozwiązać to w inny sposób; Istnieje powiat Zagranica w województwie mazowieckim. Można potraktować to jako osobne województwo, można zostawić w województwie mazowieckim albo zrobić z tym cokolwiek logicznego. Uwaga: przy pobieraniu danych z Zagranica mamy na jednej stronie i wszystkie obwody wyborcze i podział na państwa z podsumowaniem. Należy to poprawnie sparsować (przypadek szczególny). Jan Wróblewski Lab 5 31.03.2015 3 / 10
UI z listą gmin Strona powinna wyglądać w miarę estetycznie i być funkcjonalna. Mozna używać bootstrapa, jquery i dowolne inne biblioteki po stronie klienta wspierane przez najważniejsze przeglądarki. Celem stworzenia dobrego UI jest umiejętność jego obsługi przez osobę, która jest mało doświadczona w obsłudze komputera, chce wszystko móc wyklikać, popełnia błędy, ale chce znaleźć swoją gminę szybciej niż przeglądając ogromną listę. Jan Wróblewski Lab 5 31.03.2015 4 / 10
Pomysły do UI Poniżej kilka pomysłów, które można wykorzystać przy tworzeniu UI: Można skorzystać z już znanej hierarchii gmin by umożliwić szybkie wyklikanie; Można wyklikiwanie zrobić po stronie klienta korzystając z JavaScriptu (by pojawiały się kolejne elementy drzewa) albo po stronie serwera (generujemy stronę z linkami dla poszczególnych węzłów drzewa); Danie możliwości powrotu do początku lub/i do poprzedniego kroku przy wyklikiwaniu pomaga przy popełnieniu błędu - uzytkownik może wybrać złą gminę; Często wygodne jest wiedzieć w którym miejscu struktury drzewiastej się znajduje - breadcrumbs (województwo - powiat - gmina etc. - można uzyć np. http://getbootstrap.com/components/#breadcrumbs). Jan Wróblewski Lab 5 31.03.2015 5 / 10
Konflikt przy zapisie Zakładamy, że wiele użytkowników może naraz edytować daną gminę. Czasem inny użytkownik może zdążyć zapisać dane pomiędzy wyświetleniem się danych u nas a zapisaniem danych przez nas. W takiej sytuacji chcemy odrzucić zapis i wyświetlić komunikat, że dane zmieniły się od czasu ostatniego odczytu. Transakcje nam nie pomogą, ponieważ nie mamy kontroli nad czasem edycji formularza przez użytkownika. Można to zaimplementować na przykład trzymając w tabeli licznik zapisów dla gminy, przesyłając go w formularzu jako input type="hidden" i sprawdzając zgodność przy otrzymaniu formularza z powrotem przez serwer. Jan Wróblewski Lab 5 31.03.2015 6 / 10
Django Będziemy pisać aplikację po stronie serwera w django - bibliotece do aplikacji www dla Pythona 2 i 3. W naszym wirtualnym środowisku Pythona można zainstalować najnowszą wersję komendą pip install django. Można też korzystać z wersji na studentsie (1.6.2). Używaną wersję można sprawdzić przez import django; django.version. Jan Wróblewski Lab 5 31.03.2015 7 / 10
Tworzenie aplikacji django Tutorial: https://docs.djangoproject.com/en/1.7/intro/tutorial01/; Tworzenie projektu w django; syncdb, flush, validate, runserver 0.0.0.0:8000; Tworzenie modeli; Django admin. Jan Wróblewski Lab 5 31.03.2015 8 / 10
Komenda w django Dodawanie nowej komendy do django to wrzucenie pliku ze skryptem do odpowiedniego podfolderu: https://docs.djangoproject.com/en/1. 7/howto/custom-management-commands/. Przy odpowiedniej modyfikacji skryptu będziemy mogli skorzystać z bazy danych za pośrednictwem django zamiast bezpośrednio przez SQLite. Będziemy mogli wypełnić listę obwodów wyborczych w bazie danych za pomocą python manage.py pobierz_obwody. Jan Wróblewski Lab 5 31.03.2015 9 / 10
Materiały https://docs.djangoproject.com/en/1.7/; https://docs.djangoproject.com/en/1.7/howto/ custom-management-commands/; http://getbootstrap.com/; https://jquery.com/. Jan Wróblewski Lab 5 31.03.2015 10 / 10