Quiz Aplikacja internetowa



Podobne dokumenty
Lista ToDo Aplikacja internetowa

Chatter Aplikacja internetowa

Aplikacje internetowe - laboratorium

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Laboratorium 1 Wprowadzenie do PHP

Laboratorium Kierunki Rozwoju oprogramowania REST, Django

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

Zaawansowany kurs języka Python

Programowanie i projektowanie obiektowe

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

Modele danych walidacja widoki zorientowane na model

Bazy danych i strony WWW

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Laboratorium 6 Tworzenie bloga w Zend Framework

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

Aplikacje WWW - laboratorium

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

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

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

Rys. 1. Widok uruchomienia polecenia apt-get install build-essential. Rys. 2. Widok uruchomienia polecenia apt-get install apache2

Ajax. 1. Wprowadzenie. 2. Aplikacja serwerowa

PHP: bloki kodu, tablice, obiekty i formularze

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Aplikacje internetowe - laboratorium

Bazy Danych i Usługi Sieciowe

Kurs rozszerzony języka Python

Zaawansowane aplikacje internetowe

SSK - Techniki Internetowe

Technologie sieciowe Sprawozdanie z labolatorium. Lista 5

Aplikacje WWW - laboratorium

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

INSTALACJA I KONFIGURACJA SERWERA PHP.

Warsztaty dla nauczycieli

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji src/ - folder zawiera cały kod PHP aplikacji

Laboratorium nr 4 - Badanie protokołów WWW

Spring Web MVC, Spring DI

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu http.

Programowanie w Ruby

Snifery wbudowane w Microsoft Windows

5-6. Struktura dokumentu html. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Tomasz Greszata - Koszalin

Instrukcja konfiguracji funkcji skanowania

Przewodnik użytkownika (instrukcja) AutoMagicTest

System operacyjny Linux

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Technologie informacyjne lab. 4

Plan. Stan sesji (1/2) Stan sesji (2/2) Stan sesji Tworzenie przycisku Integracja prostego formularza z raportem Tworzenie formularza z raportem

Wykład 03 JavaScript. Michał Drabik

Dokumentacja smsapi wersja 1.4

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

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

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

Kompozycja Proceduralna

Część I Rozpoczęcie pracy z usługami Reporting Services

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

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Laboratorium 7 Blog: dodawanie i edycja wpisów

Personal Home Page PHP: Hypertext Preprocessor

Obiektowe bazy danych

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

Kurs rozszerzony języka Python

Zadanie programistyczne nr 3 z Sieci komputerowych

Informatyka II. Laboratorium Aplikacja okienkowa

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

Podręcznik Integracji

Podstawy technologii WWW

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Backend Administratora

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński


Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Sprawozdanie nr 4. Ewa Wojtanowska

Budowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych

Aplikacje WWW - laboratorium

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

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

Symfony w przykładach / Włodzimierz Gajda. Gliwice, cop Spis treści. Podziękowania 13 Wstęp 15

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Aplikacje WWW - laboratorium

Baza danych i ORM mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Wykład 5: Najważniejsze usługi sieciowe: DNS, SSH, HTTP, . A. Kisiel,Protokoły DNS, SSH, HTTP,

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika)

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

Instalacja rozwiązania Uruchomienie rozwiązania w systemie Sage Konfiguracja dodatku Ustawienia dodatkowe rozwiązania...

Graficzny terminal sieciowy ABA-X3. część druga. Podstawowa konfiguracja terminala

Michał Bielecki, KNI 'BIOS'

Przewodnik użytkownika (instrukcja) AutoMagicTest

2018/10/16 20:47 1/5 3 Ekrany

Tematyka i rozwiązania metodyczne kolejnych zajęć lekcyjnych wraz z ćwiczeniami.

Programowanie Komponentowe WebAPI

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Transkrypt:

- 1 - Quiz Aplikacja internetowa Opis: Realizacja aplikacji internetowej Quiz w oparciu o Python i framework Flask (wersja 0.10.1). Autorzy: Tomasz Nowacki, Robert Bednarz Czas realizacji: 90 min Poziom trudności: Poziom 1 Spis treści Quiz Aplikacja internetowa...1 I. Katalog, plik i przeznaczenie aplikacji...2 Terminal I.1...2 II. Szkielet aplikacji...2 Kod II.1...2 III. Definiowanie widoków strona główna...3 Kod III.1...3 Terminal III.1...3 Kod III.2...4 IV. Pokaż dane aplikacji pytania i odpowiedzi...4 Kod IV.1...4 Kod IV.2...5 V. Oceniamy odpowiedzi...6 Kod V.1...6 Kod V.2...7 JAK TO DZIAŁA...7 Zadania dodatkowe:...8

- 2 - I. Katalog, plik i przeznaczenie aplikacji Zaczynamy od utworzenia katalogu projektu Quiz, w którym zamieścimy wszystkie pliki niezbędne do realizacji tej implementacji. W katalogu użytkownika tworzymy nowy katalog quiz, a w nim plik quiz.py: ~ $ mkdir quiz; cd quiz; touch quiz.py Aplikacja na przykładzie quizu użytkownik zaznacza w formularzu poprawne odpowiedzi na pytania i otrzymuje ocenę ma pokazać podstawy pracy z pythonowym frameworkiem Flask. II. Szkielet aplikacji Utworzenie minimalnej aplikacji Flask pozwoli na uruchomienie serwera deweloperskiego, umożliwiającego wygodne rozwijanie kodu. W pliku quiz.py wpisujemy: # -*- coding: utf-8 -*- # quiz/quiz.py from flask import Flask app = Flask( name ) if name == ' main ': app.run(debug=true) Terminal I.1 Kod II.1 Serwer uruchamiamy komendą: python quiz.py Domyślnie serwer uruchamia się pod adresem 127.0.0.1:5000. Po wpisaniu adresu do przeglądarki internetowej otrzymamy stronę z błędem HTTP 404, co wynika z faktu, że nasza aplikacja nie ma jeszcze zdefiniowanego żadnego zachowania (widoku) dla tego adresu. W uproszczeniu możemy widok utożsamiać z pojedynczą stroną w ramach aplikacji internetowej.

- 3 - III. Definiowanie widoków strona główna Widoki to funkcje Pythona powiązane z określonymi adresami URL za pomocą tzw. dekoratorów. Widoki pozwalają nam obsługiwać żądania GET i POST, a także, przy wykorzystaniu szablonów, generować i zwracać żądane przez klienta strony WWW. W szablonach oprócz znaczników HTML możemy umieszczać różne dane. Flask renderuje (łączy) kod HTML z danymi i odsyła do przeglądarki. W pliku quiz.py umieścimy funkcję index(), widok naszej strony głównej: # -*- coding: utf-8 -*- # quiz/quiz.py Kod III.1 from flask import Flask from flask import render_template app = Flask( name ) # dekorator laczacy adres glowny z widokiem index @app.route('/') def index(): # gdybyśmy chcieli wyświetlić prosty tekst, użyjemy funkcji poniżej #return 'Hello, SWOI' # zwracamy wyrenderowany szablon index.html: return render_template('index.html') if name == ' main ': app.run(debug=true) Zauważmy, że widok index() za pomocą dekoratora @app.route('/') związaliśmy z adresem głównym (/). Dalej w katalogu quiz tworzymy podkatalog templates, a w nim szablon index.html, w terminalu wydajemy polecenia: ~/quiz $ mkdir templates; cd templates; touch index.html Terminal III.1 Do pliku index.html wstawiamy przykładowy kod HTML:

<!-- quiz/templates/index.html --> <html> <head> <title>quiz SWOi</title> </head> <body> <h1>quiz SWOI</h1> </body> </html> - 4 - Kod III.2 Po odwiedzeniu adresu 127.0.0.1:5000, otrzymamy stronę HTML. IV. Pokaż dane aplikacji pytania i odpowiedzi Dane naszej aplikacji, a więc pytania i odpowiedzi, umieścimy w liście QUESTIONS w postaci słowników zawierających: treść pytania, listę możliwych odpowiedzi oraz poprawną odpowiedź. W pliku quiz.py wstawiamy więc listę pytań, aktualizujemy widok index(), w którym przekazujemy do szablonu listę pytań w zmiennej questions: # -*- coding: utf-8 -*- # quiz/quiz.py from flask import Flask from flask import render_template app = Flask( name ) # konfiguracja aplikacji, sekret potrzebny do obsługi sesji HTTP wymaganej przez funkcję flash app.config.update(dict( SECRET_KEY='bardzosekretnawartosc', )) Kod IV.1 # lista pytan QUESTIONS = [ { 'question': u'stolica Hiszpani, to:',# pytanie 'answers': [u'madryt', u'warszawa', u'barcelona'], # mozliwe odpowiedzi 'correct_answer': u'madryt', # poprawna odpowiedz }, { 'question': u'objętość sześcianu o boku 6 cm, wynosi:', # pytanie

] }, { } - 5 - 'answers': [u'36', u'216', u'18'], # mozliwe odpowiedzi 'correct_answer': u'216', # poprawna odpowiedz 'question': u'symbol pierwiastka Helu, to:', # pytanie 'answers': [u'fe', u'h', u'he'], # mozlowe odpowiedzi 'correct_answer': u'he', # poprawna odpowiedz @app.route('/') def index(): # do templatki index.html przekazujemy liste pytan jako zmienna questions return render_template('index.html', questions=questions) if name == ' main ': app.run(debug=true) Dodatkowo dodaliśmy konfigurację aplikacji, ustalając sekretny klucz, który przyda nam się w późniejszej części. Aktualizujemy szablon index.html, aby wyświetlić listę pytań w postaci formularza HTML. <!-- quiz/templates/index.html --> <html> <head> <title>quiz SWOI</title> </head> <body> <h1>quiz SWOI</h1> Kod IV.2 <!-- formularz z quizem --> <form method="post"> <!-- iterujemy po liscie pytan --> {% for entry in questions %} <p> <!-- dla kazdego pytania wypisujemy pytanie (pole question) --> {{ entry.question }} <br> <!-- zapamietujemy numer pytania liczac od zera --> {% set question_number = loop.index0 %} <!-- iterujemy po mozliwych odpowiedziach dla danego pytania --> {% for answer in entry.answers %} <label> <!-- odpowiedzi zamieniamy na radio buttony --> <input type="radio" value="{{ answer }}" name="{{ question_number }}"> {{ answer }} </label> <br> {% endfor %} </p> {% endfor %}

- 6 - </body> </html> <!-- button wysylajacy wypelniony formularz --> <button type="submit">sprawdź odpowiedzi</button> </form> Wewnątrz szablonu przeglądamy pytania zawarte w zmiennej questions za pomocą instrukcji {% for entry in questions %}, tworzymy formularz HTML składający się z treści pytania {{ entry.question }} i listy odpowiedzi (kolejna pętla {% for answer in entry.answers %}) w postaci grupy opcji nazywanych dla odróżnienia kolejnymi indeksami pytań liczonymi od 0 ({% set question_number = loop.index0 %}). W efekcie powinniśmy otrzymać następującą stronę internetową: V. Oceniamy odpowiedzi Mechanizm sprawdzana liczby poprawnych odpowiedzi umieścimy w pliku quiz.py, modyfikując widok index(): # uzupelniamy importy from flask import request from flask import redirect, url_for from flask import flash Kod V.1

# rozszerzamy widok @app.route('/', methods=['get', 'POST']) def index(): # jezeli zadanie jest typu POST, to znaczy, ze ktos przeslal odpowiedzi do sprawdzenia if request.method == 'POST': score = 0 # liczba poprawnych odpowiedzi answers = request.form # zapamietujemy slownik z odpowiedziami # sprawdzamy odpowiedzi: for question_number, user_answer in answers.items(): # pobieramy z listy informacje o poprawnej odpowiedzi correct_answer = QUESTIONS[int(question_number)] ['correct_answer'] if user_answer == correct_answer: # porownujemy odpowiedzi score += 1 # zwiekszamy wynik # przygotowujemy informacje o wyniku flash(u'liczba poprawnych odpowiedzi, to: {0}'.format(score)) # po POST przekierowujemy na strone glowna return redirect(url_for('index')) - 7 - # jezeli zadanie jest typu GET, renderujemy index.html return render_template('index.html', questions=questions) W szablonie index.html po znaczniku <h1> wstawiamy instrukcje wyświetlające wynik: <!-- umieszczamy informacje ustawiona za pomoca funkcji flash --> <p> {% for message in get_flashed_messages() %} <strong class="success">{{ message }}</strong> {% endfor %} </p> Kod V.2 JAK TO DZIAŁA Uzupełniliśmy dekorator app.route, aby obsługiwał zarówno żądania GET (wejście na stronę główną po wpisaniu adresu => pokazujemy pytania), jak i POST 1 (przesłanie odpowiedzi z formularza pytań => oceniamy odpowiedzi). W widoku index() dodaliśmy instrukcję warunkową if request.method == 'POST':, która wykrywa żądania POST i wykonuje blok kodu zliczający poprawne odpowiedzi. Zliczanie wykonywane jest w pętli for, w której nadesłane odpowiedzi (user_answer) porównywane są z odpowiedziami poprawnymi (correct_answer). Kolejne pytania identyfikowane są przez zmienną question_number wykorzystaną wcześniej do oznaczania grup opcji w formularzu. Informacje o wyniku przekazujemy za pomocą funkcji flash, która korzysta z sesji HTTP (właśnie dlatego musieliśmy ustalić SECRET_KEY dla naszej aplikacji). 1 Flask domyślnie obsługuje tylko żądania GET.

Zadania dodatkowe: - 8-1. Zmodyfikuj aplikację, aby w przypadku braku jakiejkolwiek poprawnej odpowiedzi wyświetlała zachętę: "Spróbuj jeszcze raz!" 2. Po zapoznaniu się z materiałem "Lista ToDo Aplikacja internetowa" zmień aplikację tak, aby dane przechowywane były w bazie SQLite. Film instruktażowy: http://youtu.be/1waeyriyymq Słownik pojęć: Aplikacja program komputerowy. Framework zestaw komponentów i bibliotek wykorzystywany do budowy aplikacji. GET typ żądania HTTP, służący do pobierania zasobów z serwera WWW. HTML język znaczników wykorzystywany do formatowania dokumentów, zwłaszcza stron WWW. HTTP protokół przesyłania dokumentów WWW. POST typ żądania HTTP, służący do umieszczania zasobów na serwerze WWW. Serwer deweloperski serwer używany w czasie prac nad oprogramowaniem. Serwer WWW serwer obsługujący protokół HTTP. Templatka szablon strony WWW wykorzystywany przez Flask do renderowania widoków. URL ustandaryzowany format adresowania zasobów w internecie (przykład: adres strony WWW). Widok fragment danych, który jest reprezentowany użytkownikowi. Materiały pomocnicze: 1. Strona projektu Flask: http://flask.pocoo.org/ 2. Co to jest framework: http://pl.wikipedia.org/wiki/framework 3. O HTTP i żądaniach GET i POST: http://pl.wikipedia.org/wiki/http