Создание простого сайта с Flask: пошаговое руководство


В этой статье рассматривается процесс создания самописного сайта с использованием фреймворка Flask. Приводится подробный пример кода, включающий обработку запросов, работу с шаблонами и маршрутизацию. Читатели узнают, как установить Flask, создать основные маршруты, и настроить шаблоны страниц. Пошаговые инструкции помогут понять, как создать простое и масштабируемое веб-приложение на Python.
Flask — это популярный фреймворк для веб-разработки на Python, который позволяет создавать простые и масштабируемые веб-приложения. В этой статье мы рассмотрим, как создать простой сайт с использованием Flask, от установки библиотеки до написания и запуска кода.
Установка Flask
Для начала, убедитесь, что у вас установлен Python. Далее, установите Flask с помощью pip.
pip install Flask
Создание основного Файла
Создайте файл app.py, который будет содержать основной код нашего веб-приложения. В этом примере мы будем использовать несколько методов класса Main для обработки запросов и работы с шаблонами.
#-*- coding: UTF-8 -*-
from flask import Flask, request, Response
import re, mimetypes
class Main:
# Определение mimeType
def get_mime_type(self, file_path):
mime_type, _ = mimetypes.guess_type(file_path)
return mime_type
# Изменение данных в строке с помощью replace через цикл
def replace_str(self, strData, mData):
for keyItem, dataItem in mData.items():
strData = strData.replace(keyItem, dataItem)
return strData
# Очистка параметров
def clean_string(self, input_string):
cleaned_string = re.sub(r'[^a-zA-Z0-9]', '', input_string)
return cleaned_string
# Обработка входящих параметров
def proccess_params(self):
result = {}
try:
urlRequest = request.url
mParam = urlRequest.split('?')
if len(mParam) > 1:
mVar = mParam[1].split('&')
for item in mVar:
mItem = item.split('=')
if mItem[0] == '' or len(mItem) == 1:
continue
result[self.clean_string(mItem[0])] = self.clean_string(mItem[1])
except Exception as e:
print('proccess_params: '+str(e))
return result
# Работа с шаблоном
def process_template(self, path_file, typeRead = 'r'):
try:
if typeRead == 'rb':
with open(path_file, typeRead) as f:
result = f.read()
else:
with open(path_file, typeRead, encoding='utf-8') as f:
result = f.read()
except Exception as e:
result = False
return result
# Обработка запроса
def process_route(self):
result = {'status': 200, 'response': '', 'mimetype': 'text/html', 'typeRead': 'r'}
try:
server_host = str(request.scheme)+'://'+str(request.server[0])+':'+str(request.server[1])
request_data = {'method': request.method, 'path': request.view_args['path'].split('/'), 'variable': self.proccess_params()}
if request_data['method'] == 'GET':
# Подгрузка страницы
if request_data['path'][0] == '' and len(request_data['path']) == 1:
result['response'] = self.process_template('design/template/index.html')
# Подгрузка дизайна
elif request_data['path'][0] == 'design':
result['mimetype'] = self.get_mime_type(request.view_args['path'])
mMimetype = str(result['mimetype']).split('/')
result['typeRead'] = 'rb' if mMimetype[0] == 'image' else 'r'
result['response'] = self.process_template(request.view_args['path'], result['typeRead'])
if result['response'] == False:
raise Exception('404')
else:
raise Exception('404')
else:
raise Exception('404')
except Exception as e:
# Подгрузка 404 страницы
result['response'] = self.process_template('design/template/404.html')
result['status'] = 404
if result['typeRead'] != 'rb':
mData = {'SERVER_HOST': server_host}
result['response'] = self.replace_str(result['response'], mData)
return result
app = Flask(__name__)
# Получение запроса
@app.route('/', defaults={'path': ''})
@app.route('/', methods=['GET', 'POST'])
def route(path):
answer = mc.process_route()
return Response(response = answer['response'], status = answer['status'], mimetype = answer['mimetype'])
if __name__ == '__main__':
mc = Main()
app.run(host='127.0.0.1', port=5000, debug=True)
Принцип работы
Сервер Flask настроен принимать GET и POST запросы. Запросы проходят через ряд функций перед тем как вернуть результат. Краткое описание работы скрипта от получения запроса, до возврата результата.
- process_route: Запускается при получении запроса. Определяет тип запроса и путь. В данном примере функция упрощенна. Орентирована только на вывод главной страницы. При желании скрипт можно дописать и расширить колличество допустимых страниц.
- proccess_params: Обрабатывает входящие параметры запроса (GET и POST).
- clean_string: Очищаем параметры запросов от спецсимволов.
- process_template: Проверяет наличие запрашиваемой страницы и подгружает ее.
- get_mime_type: Определяет тип запрашиваемого контента.
- replace_str: Заменяет строки в шаблонах.
Структура
Сайт состоит из одного файла app.py и каталога design. Каталог design содержит всю структуру стандартного веб-сервиса.
- design/template/
- design/css/
- design/js/
- design/img/
Так же можно подключить design/fonts/
Запуск
Запустите приложение командой
python app.py
Откройте браузер и перейдите по адресу http://127.0.0.1:5000, чтобы увидеть вашу главную страницу. Если вы попробуете перейти на несуществующую страницу, например, http://127.0.0.1:5000/unknown, вы увидите страницу ошибки 404.
Заключение
Мы рассмотрели, как создать простой веб-сайт с использованием Flask. Этот пример демонстрирует базовые возможности Flask и может быть расширен для создания более сложных приложений. Надеюсь, эта статья была полезной для вас!
- 01.08.2024
- 44
- 0
Создание простого сайта с Flask: пошаговое руководство
Flask — это популярный фреймворк для веб-разработки на Python, который позволяет создавать простые и масштабируемые веб-приложения. В этой статье мы рассмотрим, как создать простой сайт с использованием Flask, от установки библиотеки до написания и запуска кода.
Установка Flask
Для начала, убедитесь, что у вас установлен Python. Далее, установите Flask с помощью pip.
pip install Flask
Создание основного Файла
Создайте файл app.py, который будет содержать основной код нашего веб-приложения. В этом примере мы будем использовать несколько методов класса Main для обработки запросов и работы с шаблонами.
#-*- coding: UTF-8 -*-
from flask import Flask, request, Response
import re, mimetypes
class Main:
# Определение mimeType
def get_mime_type(self, file_path):
mime_type, _ = mimetypes.guess_type(file_path)
return mime_type
# Изменение данных в строке с помощью replace через цикл
def replace_str(self, strData, mData):
for keyItem, dataItem in mData.items():
strData = strData.replace(keyItem, dataItem)
return strData
# Очистка параметров
def clean_string(self, input_string):
cleaned_string = re.sub(r'[^a-zA-Z0-9]', '', input_string)
return cleaned_string
# Обработка входящих параметров
def proccess_params(self):
result = {}
try:
urlRequest = request.url
mParam = urlRequest.split('?')
if len(mParam) > 1:
mVar = mParam[1].split('&')
for item in mVar:
mItem = item.split('=')
if mItem[0] == '' or len(mItem) == 1:
continue
result[self.clean_string(mItem[0])] = self.clean_string(mItem[1])
except Exception as e:
print('proccess_params: '+str(e))
return result
# Работа с шаблоном
def process_template(self, path_file, typeRead = 'r'):
try:
if typeRead == 'rb':
with open(path_file, typeRead) as f:
result = f.read()
else:
with open(path_file, typeRead, encoding='utf-8') as f:
result = f.read()
except Exception as e:
result = False
return result
# Обработка запроса
def process_route(self):
result = {'status': 200, 'response': '', 'mimetype': 'text/html', 'typeRead': 'r'}
try:
server_host = str(request.scheme)+'://'+str(request.server[0])+':'+str(request.server[1])
request_data = {'method': request.method, 'path': request.view_args['path'].split('/'), 'variable': self.proccess_params()}
if request_data['method'] == 'GET':
# Подгрузка страницы
if request_data['path'][0] == '' and len(request_data['path']) == 1:
result['response'] = self.process_template('design/template/index.html')
# Подгрузка дизайна
elif request_data['path'][0] == 'design':
result['mimetype'] = self.get_mime_type(request.view_args['path'])
mMimetype = str(result['mimetype']).split('/')
result['typeRead'] = 'rb' if mMimetype[0] == 'image' else 'r'
result['response'] = self.process_template(request.view_args['path'], result['typeRead'])
if result['response'] == False:
raise Exception('404')
else:
raise Exception('404')
else:
raise Exception('404')
except Exception as e:
# Подгрузка 404 страницы
result['response'] = self.process_template('design/template/404.html')
result['status'] = 404
if result['typeRead'] != 'rb':
mData = {'SERVER_HOST': server_host}
result['response'] = self.replace_str(result['response'], mData)
return result
app = Flask(__name__)
# Получение запроса
@app.route('/', defaults={'path': ''})
@app.route('/', methods=['GET', 'POST'])
def route(path):
answer = mc.process_route()
return Response(response = answer['response'], status = answer['status'], mimetype = answer['mimetype'])
if __name__ == '__main__':
mc = Main()
app.run(host='127.0.0.1', port=5000, debug=True)
Принцип работы
Сервер Flask настроен принимать GET и POST запросы. Запросы проходят через ряд функций перед тем как вернуть результат. Краткое описание работы скрипта от получения запроса, до возврата результата.
- process_route: Запускается при получении запроса. Определяет тип запроса и путь. В данном примере функция упрощенна. Орентирована только на вывод главной страницы. При желании скрипт можно дописать и расширить колличество допустимых страниц.
- proccess_params: Обрабатывает входящие параметры запроса (GET и POST).
- clean_string: Очищаем параметры запросов от спецсимволов.
- process_template: Проверяет наличие запрашиваемой страницы и подгружает ее.
- get_mime_type: Определяет тип запрашиваемого контента.
- replace_str: Заменяет строки в шаблонах.
Структура
Сайт состоит из одного файла app.py и каталога design. Каталог design содержит всю структуру стандартного веб-сервиса.
- design/template/
- design/css/
- design/js/
- design/img/
Так же можно подключить design/fonts/
Запуск
Запустите приложение командой
python app.py
Откройте браузер и перейдите по адресу http://127.0.0.1:5000, чтобы увидеть вашу главную страницу. Если вы попробуете перейти на несуществующую страницу, например, http://127.0.0.1:5000/unknown, вы увидите страницу ошибки 404.
Заключение
Мы рассмотрели, как создать простой веб-сайт с использованием Flask. Этот пример демонстрирует базовые возможности Flask и может быть расширен для создания более сложных приложений. Надеюсь, эта статья была полезной для вас!