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

GetCoder.ru
Изображение статьи

В этой статье рассматривается процесс создания самописного сайта с использованием фреймворка Flask. Приводится подробный пример кода, включающий обработку запросов, работу с шаблонами и маршрутизацию. Читатели узнают, как установить Flask, создать основные маршруты, и настроить шаблоны страниц. Пошаговые инструкции помогут понять, как создать простое и масштабируемое веб-приложение на Python.

Flask — это популярный фреймворк для веб-разработки на Python, который позволяет создавать простые и масштабируемые веб-приложения. В этой статье мы рассмотрим, как создать простой сайт с использованием Flask, от установки библиотеки до написания и запуска кода.

Установка Flask

Для начала, убедитесь, что у вас установлен Python. Далее, установите Flask с помощью pip.

  • copy
pip install Flask

Создание основного Файла

Создайте файл app.py, который будет содержать основной код нашего веб-приложения. В этом примере мы будем использовать несколько методов класса Main для обработки запросов и работы с шаблонами.

  • copy
#-*- 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/

Запуск

Запустите приложение командой

  • copy
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.

  • copy
pip install Flask

Создание основного Файла

Создайте файл app.py, который будет содержать основной код нашего веб-приложения. В этом примере мы будем использовать несколько методов класса Main для обработки запросов и работы с шаблонами.

  • copy
#-*- 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/

Запуск

Запустите приложение командой

  • copy
python app.py

Откройте браузер и перейдите по адресу http://127.0.0.1:5000, чтобы увидеть вашу главную страницу. Если вы попробуете перейти на несуществующую страницу, например, http://127.0.0.1:5000/unknown, вы увидите страницу ошибки 404.

Заключение

Мы рассмотрели, как создать простой веб-сайт с использованием Flask. Этот пример демонстрирует базовые возможности Flask и может быть расширен для создания более сложных приложений. Надеюсь, эта статья была полезной для вас!