Skip to content

1. Передмова

PDF цього документа доступний за посиланням |TYT|.

Приклади з цього документа доступні за посиланням |TYT|.

Цей документ містить перелік скриптів Python у різних сферах:

  • основи мови;
  • робота з базами даних MySQL та PostgreSQL;
  • мережеве програмування TCP/ IP (протоколи HTTP, POP3, IMAP, SMTP);
  • веб-програмування MVC з використанням фреймворку FLASK;
  • трирівневі архітектури та програмування за допомогою інтерфейсів;

Це не вичерпний курс з Python, а збірка прикладів, призначена для розробників, які вже використовували скриптові мови, такі як Perl, PHP, VBScript, або для розробників, які звикли до типізованих мов, таких як Java чи C#, і які зацікавлені у вивченні об’єктно-орієнтованої мови скриптів. Цей документ не дуже підходить для читачів, які ніколи не програмували або мають дуже обмежений досвід програмування.

Цей документ також не є збіркою «кращих практик». Досвідчений розробник може вважати, що деякі фрагменти коду можна було б написати краще. Єдина мета цього документа — навести приклади для тих, хто бажає ознайомитися з мовою Python 3 та фреймворком Flask. Далі вони зможуть поглибити свої знання за допомогою інших документів.

Скрипти містять коментарі, а результати їх виконання наводяться. Іноді надаються додаткові пояснення. Цей документ вимагає активного читання: щоб зрозуміти скрипт, потрібно одночасно читати його код, коментарі та результати виконання.

Приклади з цього документа доступні за адресою |TYT|:

Image

Цей документ є оновленою версією попереднього документа, опублікованого в червні 2011 року |https://tahe.developpez.com/tutoriels-cours/python/|. Документ 2011 року було створено з використанням інтерпретатора Python 2.7. З того часу з’явилися нові версії Python 3.x. У лютому 2020 року версія досягла 3.8. Версії 3.x призвели до розриву у сумісності між версіями: код, що виконується під Python 2.7, може виявитися непридатним для використання під Python 3.x. Це, зокрема, стосується виведення даних у консоль. У версії 2.7 можна написати [print "toto"], тоді як у версії 3.x потрібно написати [print("toto")]: необхідно додати дужки. Ця проста зміна призводить до того, що коди, надані в документі 2011 року, здебільшого не можна безпосередньо використовувати в Python 3.x. Їх потрібно змінити.

Цей новий документ не обмежується лише оновленням кодів 2011 року для забезпечення їх виконання в Python 3.8:

  • розділи, присвячені програмуванню TCP-IP та використанню баз даних, зазнали суттєвих змін;
  • розділ про веб-програмування, який раніше був лише вступом, тепер є повноцінним курсом із використанням фреймворку FLASK;

Для створення цього курсу я пішов незвичайним шляхом: я переніс курс PHP [Introduction au langage PHP7 par l’exemple]. Тому я не дотримувався традиційних структур курсів з Python або Flask. Перш за все я хотів дізнатися, як за допомогою Python 3 можна зробити те, що я робив у PHP 7. У результаті мені вдалося переробити в Python 3 / Flask усі приклади з курсу PHP 7.

Цей документ може містити помилки або недоліки. Читач може скористатися форумом |forum|, щоб повідомити про них.

Зміст документа такий:

Розділ
Папка з кодом
Зміст
   
 
Опис курсу
 
Налаштування робочого середовища
[bases]
Основи мови Python – структури мови – типи даних – функції – виведення на консоль – рядки з форматуванням – перетворення типів – списки – словники – регулярні вирази
[strings]
Запис символьних рядків – методи класу <str> – кодування/декодування символьних рядків у UTF-8
[exceptions]
Обробка винятків
[fonctions]
Область дії змінних – спосіб передачі параметрів – використання модулів – Python Path – іменовані параметри – рекурсивні функції
[fichiers]
Читання/запис текстового файлу – робота з файлами, закодованими у форматі UTF-8 – робота з файлами jSON
[impots/v01]
Версія 1 практичного завдання — розрахунок податку на доходи. Додаток має 18 версій — у версії 1 реалізовано процедурне рішення
[imports]
Управління залежностями програми шляхом імпорту модулів — представлено метод управління залежностями, який використовується у всьому документі — управління Python Path
[impots/v02]
Версія 2 додатка базується на версії 1, об’єднуючи всі конфігураційні константи в один конфігураційний файл, який також керує Python Path
[impots/v03]
Версія 3 додатка базується на версії 2, використовуючи функції, інкапсульовані в модуль — управління залежностями здійснюється через конфігурацію — введено файл jSON для зчитування даних, необхідних для розрахунку податку, та запису результатів розрахунків
[classes/01]
Класи — успадкування — методи та властивості — геттери/сеттери — конструктор — властивість [__dict__]
[classes/02]
Огляд класів [BaseEntity] та [MyException], що використовуються в подальшому тексті документа – [BaseEntity] спрощує перетворення об’єктів у словники та навпаки
[troiscouches]
Багатошарова архітектура та програмування за допомогою інтерфейсів. У цьому розділі представлено методи програмування, що використовуються в подальшому тексті документа
[impots/v04]
Версія 4 додатка — ця версія реалізує рішення з багаторівневою архітектурою, програмуванням за допомогою інтерфейсів та використанням класів, похідних від [BaseEntity] та [MyException]
[databases/mysql]
Встановлення SGBD MySQL — підключення до бази даних — створення таблиці — виконання команд SQL SELECT, UPDATE, DELETE, INSERT — транзакція — налаштовані запити SQL
[databases/postgresql]
Встановлення SGBD PostgreSQL – підключення до бази даних – створення таблиці – виконання команд SQL SELECT, UPDATE, DELETE, INSERT — транзакція — налаштовані запити SQL
[databases/anysgbd]
Написання коду, незалежного від SGBD
[databases/sqlalchemy]
ORM (об'єктно-реляційний мапер) SqlAlchemy – ORM дозволяє працювати в єдиному стилі з різними SGBD - зіставлення класів та таблиць SQL – операції з класами-образами таблиць SQL
[impots/v05]
Версія 5 програми розрахунку податку – Використання багатошарової архітектури версії 04 таORM SqlAlchemy для роботи з SGBD MySQL та PostgreSQL
[inet]
Інтернет-програмування — протоколи TCP / IP (Transfer Control Protocol / Internet Protocol) — протоколи HTTP (HyperText Протокол передачі) – SMTP (Простий протокол передачі пошти) – POP (Поштовий протокол) – IMAP (Протокол доступу до інтернет-повідомлень)
[flask]
Веб-сервіси на базі фреймворку Flask – відображення сторінки HTML – веб-сервіс jSON – запити GET та POST – управління веб-сесією
[impots/http-servers/01]
[impots/http-clients/01]
Версія 6 практичного завдання — Створення веб-сервісу jSON для розрахунку податку з багатошаровою архітектурою — Написання веб-клієнта для цього сервера з багатошаровою архітектурою — програмування клієнт/сервер — використання модуля [requests]
[impots/http-servers/02]
[impots/http-clients/02]
Версія 7 навчального додатка – вдосконалена версія 6: клієнт і сервер є багатопотоковими – утиліти [Logger] для реєстрації обміну даними між клієнтом і сервером – [SendMail] для надсилання електронного листа адміністратору додатка
[impots/http-servers/03]
[impots/http-clients/03]
Версія 8 практичного завдання — версія 7 вдосконалена завдяки використанню веб-сесії
[xml]
Робота з XML (eXtended Markup Language) за допомогою модуля [xmltodict]
[impots/http-servers/04]
[impots/http-clients/04]
Версія 9 практичного завдання — версія 8 змінена для забезпечення обміну даними між клієнтом і сервером у форматі XML;
[impots/http-servers/05]
[impots/http-clients/05]
Версія 10 практичного завдання — замість обробки N платників податків за допомогою N запитів GET використовується єдиний запит POST із N платниками податків у тілі запиту POST
[impots/http-servers/06]
[impots/http-clients/06]
Версія 11 практичного завдання – архітектура «клієнт/сервер» додатка змінена: рівень [métier] перенесено з сервера на клієнт
[impots/http-servers/07]
Версія 12 практичного завдання — у цій версії реалізовано сервер MVC (Model – View – Controller), який на запит клієнта надає як jSON, так і XML, і HTML. У цьому розділі реалізовано версії сервера jSON та XML
[impots/http-clients/07]
Реалізація клієнтів jSON та XML сервера MVC версії 12
[impots/http-servers/07]
Впровадження сервера HTML версії 12 — використання фреймворку CSS Bootstrap —
[impots/http-servers/08]
Вправа з версії 13 — рефакторинг коду з версії 12 — управління сесіями за допомогою модуля [flask_session] та сервера Redis — використання зашифрованих паролів
[impots/http-servers/09]
[impots/http-clients/09]
Вправа № 14 — реалізація URL із використанням токена CSRF (Cross Site Request Forgery)
[impots/http-servers/10]
Версія 15 практичного завдання — рефакторинг коду з версії 14 для обробки двох типів дій: ASV (Action Show View), які слугують лише для відображення подання без зміни стану сервера, ADS (дія «Do Something»), які виконують дію, що змінює стан сервера — усі ці дії завершуються перенаправленням на дію ASV — це дозволяє правильно обробляти оновлення сторінки в браузері клієнта
[impots/http-servers/11]
Версія 16 додатка — управління URL із префіксом
[impots/http-servers/12]
Версія 17 програми — перенесення версії 16 на сервер Apache / Windows
[impots/http-servers/13]
Версія 18 програми – виправлення помилки у версії 17

Остаточна версія практичного завдання — це клієнт-серверний додаток для розрахунку податку з такою архітектурою:

Image

Вищезазначений рівень [web] реалізовано за архітектурою MVC:

Image

Зміст документа є насиченим. Читач, який прочитає його до кінця, отримає гарне уявлення про веб-програмування MVC на Python / Flask, а також про веб-програмування MVC на інших мовах.

Читач, який воліє переглядати код, тестувати його та змінювати, а не читати підручник, може вчинити так:

Image

Файл [README.md] виглядає так:

Image

Малоймовірно, що читач прочитає весь курс:

  • початківець може прочитати розділи з 1 по 15 і на цьому зупинитися. Потім він зможе присвятити час написанню власних скриптів на Python, перш ніж повернутися до цього курсу;
  • читач, який має базові знання Python і хоче ознайомитися з базами даних та ORM (об’єктно-реляційним маппером) [sqlalchemy], може обмежитися розділами з 16 по 20;
  • читач, який бажає ознайомитися з веб-програмуванням (HTTP, SMTP, POP3, IMAP), може прочитати розділ 21. Цей розділ є досить складним і містить приклади скриптів для досвідчених користувачів. Його можна сприймати на двох рівнях:
    • щоб ознайомитися з інтернет-протоколами;
    • щоб отримати скрипти, які використовують ці протоколи;
  • читач, який має базові знання Python і бажає освоїти веб-програмування за допомогою фреймворку Flask, може ознайомитися з розділом 22;
  • читач, який бажає поглибити свої знання з веб-програмування за допомогою фреймворку Flask, може вивчити розділи з 23 по 38. У них створюються дедалі складніші клієнт-серверні додатки, а також додаток HTML / Python за моделлю розробки MVC (Модель – Вигляд – Контролер). Цей додаток розробляється у розділі 32. На цьому можна зупинитися. Наступні розділи містять неістотні зміни;

Serge Tahé, вересень 2020 р.