it Новини Що таке фреймворк? Створення свого веб-фреймворку на Python
Що таке фреймворк? Створення свого веб-фреймворку на Python

Що таке фреймворк? Створення свого веб-фреймворку на Python

9 283
17 лютого 2024 в 16:00

Слово фреймворк завжди викликає якесь побоювання, бо не завжди зрозуміло, що це і як з ним працювати. У статті ми ознайомимося з поняттям та створимо свій веб-фреймворк на базі мови Python.

Що таке фреймворк?

Простими словами, фреймворк – це набір готових інструментів, що дозволяють створити проект швидше та простіше. Фреймворк надає основні функції та архітектуру, щоб спростити процес розробки та позбавити розробників необхідності писати все з нуля.


У кожній популярній мові програмування є свої фреймворки. У Пітон таких дуже багато і кожен призначений під певні цілі. Наприклад, фреймворк Django призначений для веб-розробки. Він надає безліч інструментів для роботи з базами даних, обробки URL, автентифікації та багато іншого. Якщо потрібно написати гру, можна використовувати Pygame, якщо програма під ПК – фреймворк PyQT і так далі.



Процес роботи з фреймворком подібний до використання конструктора, де основні каркаси вже створені, і розробнику потрібно лише доповнювати їх своїм функціоналом. Тобто фреймворк ніщо інше, як набір готового коду, який ви можете використати для створення проектів різного жанру.

Курс з вивчення Python

Можете пройти наш безкоштовний курс з вивчення Python

Налаштування сервера

А тепер давайте спробуємо створити свій простий веб фреймворк на базі Python.


Ми створюватимемо веб-фреймворк, але в дуже простому його розумінні. Для створення сайту ми не будемо використовувати сторонні бібліотеки, а лише працюватимемо із вбудованими бібліотеками.


Для початку імпортуємо класи з бібліотеки http.server, а також метод urlparse з бібліотеки urllib.parse.


Також пропишемо функцію, що створюватиме сервер. У функції створюємо кортеж з хостом та портом. Через клас HTTPServer вказуємо дані для сервера, а також підставляємо базовий клас із описом дій сервера. Додатково виводимо рядок з інформацією про URL-адресу сайту. За рахунок функції serve_forever вказуємо роботу сервера на постійній основі.

from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse

def run_server(port=8000):
	server_address = ('', port)
	httpd = HTTPServer(server_address, BaseHTTPRequestHandler)
	print(f'Starting: http://localhost:{port}')
	httpd.serve_forever()

if __name__ == '__main__':
	run_server()

Тепер такий код можна запустити. Після цього ми матимемо готовий запущений сервер. Якщо перейти за URL-адресою, то буде видана помилка, що логічно, адже ми поки не відстежуємо URL-адреси.


Різні URL-адреси

Для обробки кількох URL нам варто створити окремий клас, що є спадкоємцем для класу BaseHTTPRequestHandler. У класі описуємо метод do_GET. Він спрацьовуватиме при переході на будь-яку URL у нашому сайті.


Ми з вами отримуємо URL сторінки та обробляємо її через функцію urlparse. Після обробки описуємо умову для перевірки на якій сторінці ми знаходимося. Наприклад, якщо головна сторінка, буде просто слеш. При попаданні на сторінку надсилаємо користувачеві відповідь браузера 200, контент сторінки text/html і плюс через функцію write вказуємо який текст ми будемо писати на сторінці.


За схожим принципом описуємо й інші URL-сторінки, а також сторінку 404, що буде спрацьовувати у разі попадання на URL, що не обробляється.

from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse

class SimpleHandler(BaseHTTPRequestHandler):
	def do_GET(self):
		parsed_url = urlparse(self.path)
		path = parsed_url.path

		if path == '/':
			self.send_response(200)
			self.send_header('Content-type', 'text/html')
			self.end_headers()

			self.wfile.write(b'Main page')
		elif path == '/about':
			self.send_response(200)
			self.send_header('Content-type', 'text/html')
			self.end_headers()

			self.wfile.write(b'About page')

def run_server(port=8000):
	server_address = ('', port)
	httpd = HTTPServer(server_address, SimpleHandler)
	print(f'Starting: http://localhost:{port}')
	httpd.serve_forever()

if __name__ == '__main__':
	run_server()


Дизайн сторінок

А тепер давайте додамо якийсь дизайн для нашого сайту. Для цього нам потрібно створити HTML файл, що зберігатиме розмітку сайту. До нього ж додаємо CSS файл із описом стилів.


Після опису файлів з дизайном ви можете відкрити їх через оператор with as та зчитайте дані. Зчитані дані підставте у self.wfile.write().


Доопрацювання проекту

Розробка наступної частини проекту доступна у відео нижче. Там ви знайдете повний опис усіх необхідних дій:



Завантажити весь проект можна за цим посиланням.


Більше інформації

Якщо ви хочете дізнатися більше інформації про мову Python і хочете вивчити її для створення своїх схожих програм, то рекомендуємо вам нашу велику програму навчання на цю тему.



В ході величезної програми навчання ви вивчите мову Пітон, навчитеся на її основі працювати з базами даних, створювати мобільні проекти, будувати веб-сайти за допомогою Django, ознайомтеся з REST API та познайомитесь з розробкою програм з використанням ШІ та різних бібліотек мови.


Підсумок

За підсумком у нас вийшов невеликий веб-сайт, з кількома сторінками, формою реєстрації і навіть своєю базою даних. Такий проект можна доповнювати, створюючи нові сторінки та форми.


Наш проект не можна назвати якимось фреймвокром, адже його функціонал зводиться буквально до кількох дій.

Курс з вивчення Python

Можете пройти наш безкоштовний курс з вивчення Python

З іншого боку, а чи є сенс створювати проекти без фреймворків? І тут відповіді однозначно немає. Фреймфорки вже містять всі необхідні дії, а тому логічніше і простіше використовувати їх, ніж писати з чистого нуля.

Telegram group

Підписуйтесь на нашу групу в Телеграмі 🇺🇦

Більше цікавих новин

Коментарі
Додати коментар

Поки що коментарів немає