Skip to content

1. Przedmowa

Plik PDF tego dokumentu jest dostępny pod nazwą |TUTAJ|.

Przykłady zawarte w tym dokumencie są dostępne pod numerem |TUTAJ|.

Niniejszy dokument zawiera listę skryptów w języku Python z różnych dziedzin:

  • podstawy języka;
  • obsługa baz danych MySQL i PostgreSQL;
  • programowanie sieciowe TCP/ IP (protokoły HTTP, POP3, IMAP, SMTP);
  • programowanie internetowe MVC z wykorzystaniem frameworka FLASK;
  • architektury trójwarstwowe i programowanie za pomocą interfejsów;

Nie jest to wyczerpujący kurs języka Python, lecz zbiór przykładów przeznaczony dla programistów, którzy mieli już do czynienia z językiem skryptowym, takim jak Perl, PHP, VBScript, lub programistów przyzwyczajonych do języków typowanych, takich jak Java czy C#, którzy byliby zainteresowani poznaniem obiektowego języka skryptowego. Niniejszy dokument nie jest odpowiedni dla czytelników, którzy nigdy nie programowali lub mają w tym zakresie niewielkie doświadczenie.

Niniejszy dokument nie jest również zbiorem „dobrych praktyk”. Doświadczony programista może zatem uznać, że niektóre fragmenty kodu można by napisać lepiej. Jedynym celem niniejszego dokumentu jest przedstawienie przykładów osobom pragnącym zapoznać się z językiem Python 3 i frameworkiem Flask. Następnie będą one mogły pogłębić swoją wiedzę, korzystając z innych materiałów.

Skrypty są opatrzone komentarzami, a wyniki ich wykonania zostały przedstawione. Czasami podano dodatkowe wyjaśnienia. Dokument wymaga aktywnego czytania: aby zrozumieć skrypt, należy zapoznać się zarówno z jego kodem, jak i komentarzami oraz wynikami wykonania.

Przykłady zawarte w niniejszym dokumencie są dostępne pod adresem |TUTAJ|:

Image

Niniejszy dokument stanowi aktualizację starszego dokumentu opublikowanego w czerwcu 2011 r. pod numerem |https://tahe.developpez.com/tutoriels-cours/python/|. Dokument z 2011 r. został opracowany przy użyciu interpretera języka Python w wersji 2.7. Od tego czasu pojawiły się nowe wersje języka Python 3.x. W lutym 2020 r. aktualna wersja to 3.8. Wersje 3.x spowodowały brak zgodności między wersjami: kody działające w Pythonie 2.7 mogą okazać się bezużyteczne w Pythonie 3.x. Dotyczy to w szczególności zapisywania danych na konsoli. W wersji 2.7 można napisać [print "toto"], podczas gdy w wersji 3.x należy napisać [print("toto")]: konieczne jest dodanie nawiasów. Ta prosta zmiana sprawia, że kody dostarczone wraz z dokumentem z 2011 roku są w większości nieprzydatne bezpośrednio w Pythonie 3.x. Należy je zmodyfikować.

Ten nowy dokument nie ogranicza się jedynie do aktualizacji kodów z 2011 roku, tak aby działały w Pythonie 3.8:

  • sekcje dotyczące programowania TCP-IP oraz korzystania z baz danych uległy znacznym zmianom;
  • sekcja poświęcona programowaniu stron internetowych, która wcześniej stanowiła jedynie wprowadzenie, jest teraz pełnym kursem wykorzystującym framework FLASK;

Tworząc ten kurs, zastosowałem nietypowe podejście: dokonałem portowania kursu PHP [Introduction au langage PHP7 par l’exemple]. Nie trzymałem się więc tradycyjnych struktur kursów dotyczących Pythona czy Flaska. Chciałem przede wszystkim dowiedzieć się, jak za pomocą Pythona 3 mogę zrealizować to, co zrobiłem w PHP 7. W rezultacie udało mi się odtworzyć w Pythonie 3 / Flasku wszystkie przykłady z kursu PHP 7.

Niniejszy dokument może zawierać błędy lub niekompletne informacje. Czytelnik może zgłaszać je na forum dyskusyjnym |forum|.

Treść dokumentu jest następująca:

Rozdział
Katalog z kodem
Treść
   
 
Przedstawienie kursu
 
Konfiguracja środowiska pracy
[bases]
Podstawy języka Python – struktury języka – typy danych – funkcje – wyświetlanie w konsoli – ciągi formatujące – konwersja typów – listy – słowniki – wyrażenia regularne
[strings]
Zapis ciągów znaków – metody klasy <str> – kodowanie / dekodowanie ciągów znaków w UTF-8
[exceptions]
Obsługa wyjątków
[fonctions]
Zakres zmiennych – sposób przekazywania parametrów – korzystanie z modułów – ścieżka Python – parametry nazwane – funkcje rekurencyjne
[fichiers]
Odczyt/zapis pliku tekstowego – obsługa plików zakodowanych w UTF-8 – obsługa plików jSON
[impots/v01]
Wersja 1 ćwiczenia praktycznego: obliczenie podatku dochodowego. Aplikacja występuje w 18 wersjach – wersja 1 realizuje rozwiązanie proceduralne
[imports]
Zarządzanie zależnościami aplikacji poprzez import modułów – przedstawiono metodę zarządzania zależnościami – jest ona stosowana w całym dokumencie – zarządzanie ścieżką Python Path
[impots/v02]
Wersja 2 aplikacji bazuje na wersji 1, gromadząc wszystkie stałe konfiguracyjne w pliku konfiguracyjnym, który zarządza również ścieżką Python Path
[impots/v03]
Wersja 3 aplikacji opiera się na wersji 2, wykorzystując funkcje zamknięte w module – zarządzanie zależnościami odbywa się poprzez konfigurację – wprowadzono plik jSON do odczytu danych niezbędnych do obliczenia podatku oraz zapisywania wyników obliczeń
[classes/01]
Klasy – dziedziczenie – metody i właściwości – metody getter/setter – konstruktor – właściwość [__dict__]
[classes/02]
Przedstawienie klas [BaseEntity] i [MyException] wykorzystywanych w dalszej części dokumentu – [BaseEntity] ułatwia konwersje między obiektami a słownikami
[troiscouches]
Architektura warstwowa i programowanie za pomocą interfejsów. W niniejszym rozdziale przedstawiono metody programowania wykorzystywane w dalszej części dokumentu
[impots/v04]
Wersja 4 aplikacji – ta wersja wdraża rozwiązanie oparte na architekturze warstwowej, programowaniu za pomocą interfejsów oraz wykorzystaniu klas pochodnych od [BaseEntity] i [MyException]
[databases/mysql]
Instalacja SGBD MySQL – połączenie z bazą danych – utworzenie tabeli – wykonanie poleceń SQL SELECT, UPDATE, DELETE, INSERT – transakcja – zapytania skonfigurowane SQL
[databases/postgresql]
Instalacja SGBD PostgreSQL – połączenie z bazą danych – utworzenie tabeli – wykonanie poleceń SQL SELECT, UPDATE, DELETE, INSERT – transakcja – zapytania skonfigurowane SQL
[databases/anysgbd]
Zapis kodu niezależnego od SGBD
[databases/sqlalchemy]
ORM (mapowanie obiektowo-relacyjne) SqlAlchemy – ORM umożliwia ujednoliconą pracę z różnymi SGBD - mapowanie klas / tabel SQL – operacje na klasach obrazów tabel SQL
[impots/v05]
Wersja 5 aplikacji do obliczania podatku – Wykorzystanie architektury warstwowej z wersji 04 orazORM SqlAlchemy do pracy z SGBD MySQL oraz PostgreSQL
[inet]
Programowanie internetowe – protokół TCP / IP (Transfer Control Protocol / Internet Protocol) – protokoły HTTP (HyperText Transfer Protocol) – SMTP (Simple Mail Transfer Protocol) – POP (Post Office Protocol) – IMAP (Internet Message Access Protocol)
[flask]
Usługi internetowe z wykorzystaniem frameworka Flask – wyświetlanie strony HTML – usługa internetowa jSON – żądania GET i POST – zarządzanie sesją internetową
[impots/http-servers/01]
[impots/http-clients/01]
Wersja 6 ćwiczenia praktycznego – Tworzenie serwisu internetowego jSON do obliczania podatku w architekturze wielowarstwowej – Napisanie klienta internetowego dla tego serwera w architekturze wielowarstwowej – programowanie klient/serwer – wykorzystanie modułu [requests]
[impots/http-servers/02]
[impots/http-clients/02]
Wersja 7 aplikacji – ulepszona wersja 6: klient i serwer są wielowątkowe – narzędzia [Logger] do rejestrowania komunikacji klient–serwer – [SendMail] do wysyłania wiadomości e-mail do administratora aplikacji
[impots/http-servers/03]
[impots/http-clients/03]
Wersja 8 ćwiczenia praktycznego – wersja 7 została ulepszona dzięki zastosowaniu sesji internetowej
[xml]
Obsługa języka znaczników XML (eXtended) za pomocą modułu [xmltodict]
[impots/http-servers/04]
[impots/http-clients/04]
Wersja 9 ćwiczenia praktycznego – wersja 8 została zmodyfikowana w celu umożliwienia wymiany danych między klientem a serwerem w formacie XML;
[impots/http-servers/05]
[impots/http-clients/05]
Wersja 10 ćwiczenia praktycznego – zamiast przetwarzać N podatników za pomocą N zapytań GET, stosuje się jedno zapytanie POST z N podatnikami w treści POST
[impots/http-servers/06]
[impots/http-clients/06]
Wersja 11 ćwiczenia praktycznego – zmodyfikowano architekturę klient-serwer aplikacji: warstwa [métier] została przeniesiona z serwera na klienta
[impots/http-servers/07]
Wersja 12 ćwiczenia praktycznego – w tej wersji zaimplementowano serwer MVC (Model – View – Controller), dostarczający na żądanie klienta, bez względu na to, czy chodzi o jSON, XML czy HTML. W niniejszym rozdziale zaimplementowano wersje serwera jSON i XML
[impots/http-clients/07]
Wdrożenie klientów jSON i XML serwera MVC w wersji 12
[impots/http-servers/07]
Wdrożenie serwera HTML w wersji 12 – wykorzystanie frameworka CSS Bootstrap –
[impots/http-servers/08]
Wersja 13 ćwiczenia praktycznego – refaktoryzacja kodu z wersji 12 – zarządzanie sesją za pomocą modułu [flask_session] i serwera Redis – wykorzystanie zaszyfrowanych haseł
[impots/http-servers/09]
[impots/http-clients/09]
Wersja 14 ćwiczenia praktycznego – implementacja modułu URL z wykorzystaniem tokenu CSRF (Cross Site Request Forgery)
[impots/http-servers/10]
Wersja 15 ćwiczenia praktycznego – refaktoryzacja kodu z wersji 14 w celu obsługi dwóch typów akcji: ASV (Action Show View), które służą wyłącznie do wyświetlenia widoku bez zmiany stanu serwera, ADS (akcja „Do Something”), które wykonują operację zmieniającą stan serwera – wszystkie te akcje kończą się przekierowaniem do akcji ASV – pozwala to na prawidłowe zarządzanie odświeżaniem strony w przeglądarce klienta
[impots/http-servers/11]
Wersja 16 aplikacji – obsługa akcji URL z prefiksem
[impots/http-servers/12]
Wersja 17 aplikacji – przeniesienie wersji 16 na serwer Apache / Windows
[impots/http-servers/13]
Wersja 18 aplikacji – poprawia błąd występujący w wersji 17

Ostateczna wersja ćwiczenia aplikacyjnego to aplikacja klient-serwer służąca do obliczania podatku, o następującej architekturze:

Image

Powyższa warstwa [web] jest zaimplementowana w oparciu o architekturę MVC:

Image

Treść dokumentu jest obszerna. Czytelnik, który dotrze do końca, uzyska dobry wgląd w programowanie stron internetowych MVC w języku Python / Flask, a ponadto dobre rozeznanie w programowaniu stron internetowych MVC w innych językach.

Czytelnik, który woli zapoznać się z kodem, przetestować go i zmodyfikować, zamiast czytać materiały szkoleniowe, może postępować w następujący sposób:

Image

Plik [README.md] wygląda następująco:

Image

Jest mało prawdopodobne, aby czytelnik przeczytał cały kurs:

  • początkujący czytelnik może przeczytać rozdziały od 1 do 15 i na tym zakończyć. Następnie może poświęcić czas na pisanie własnych skryptów w języku Python, zanim powróci do tego kursu;
  • czytelnik posiadający podstawy języka Python i chcący zapoznać się z bazami danych oraz ORM (Object Relational Mapper) [sqlalchemy] może zadowolić się rozdziałami od 16 do 20;
  • czytelnik, który chce zapoznać się z programowaniem internetowym (HTTP, SMTP, POP3, IMAP), może przeczytać rozdział 21. Rozdział ten jest dość złożony i przedstawia zaawansowane skrypty. Można go czytać na dwóch poziomach:
    • w celu zapoznania się z protokołami internetowymi;
    • aby uzyskać skrypty wykorzystujące te protokoły;
  • czytelnik posiadający podstawową wiedzę na temat języka Python i pragnący zapoznać się z programowaniem internetowym przy użyciu frameworka Flask powinien zapoznać się z rozdziałem 22;
  • czytelnik pragnący pogłębić swoją wiedzę na temat programowania internetowego z wykorzystaniem frameworka Flask może zapoznać się z rozdziałami od 23 do 38. Tworzy się w nich coraz bardziej złożone aplikacje klient-serwer, a także aplikację HTML / Python zgodnie z modelem programowania MVC (Model – Widok – Kontroler). Aplikacja ta została opracowana w rozdziale 32. Na tym można zakończyć. Kolejne rozdziały wprowadzają zmiany, które nie mają zasadniczego znaczenia;

Serge Tahé, wrzesień 2020