image


Всем привет!


Когда я впервые столкнулся с Flask, у меня сразу возник вопрос по построению архитектуры проекта.


Прочитав пару статей на Хабре (https://habr.com/ru/post/275099/ и https://habr.com/ru/post/421887/), я вспомнил свой опыт создания проектов на Django, и решил сделать инструмент, благодаря которому не придется задумываться об архитектуре, но при этом можно будет использовать все возможности Flask.


Установка


$ pip install Flask-DJ

Создание проекта


Создать проект можно либо с помощью консоли (для шаблонов и статических файлов используются флаги -t -st)


$ flask-dj startproject app

Либо можно создать файл setup.py
(для шаблонов и статических файлов используются флаги
need_templates=True, need_static=True).


from flask_dj import startproject
from os import getcwd
your_project_name = 'app'
project_dir = getcwd()
startproject(your_project_name, project_dir)

В результате должна получится следующая структура
(static и templates появятся при указании соответствующих флагов)


app/
    app/
        __init__.py
        config.py
        urls.py
    manage.py

Создание приложения


Приложением в данном случае называется модуль (элемент приложения).


Для создания необходимо прописать следующую команду (вместо index поставить имя вашего приложения).


$ python manage.py startapp index

После выполнения у проекта будет следующая структура:


app/
    app/
        __init__.py
        config.py
        urls.py
    index/
          forms.py
          models.py
          urls.py
          views.py
    manage.py

Создаем принимающую (view) функцию


Все гайды принято начинать с Hello world, мы не будем исключением:


# index/views.py
def index():
    return "Hello world"

Создаем URL для нашей функции


Создаем относительный путь внутри index:


# index/urls.py
from utils.urls import relative_path
from .views import index

urlpatterns = [
    relative_path("", index),
]

Добавляем наше приложение к глобальному пути:


# app/urls.py
from utils.urls import add_relative_path, include

urlpatterns = [
    add_relative_path("/", include("index.urls")),
]

Запускаем сервер


$  python manage.py runserver

Если все шаги сделаны верно, то мы увидим следующее


image


P.S.


Надеюсь данная статья была для вас полезной.


Если вас заинтересовала данная библиотека, то вот ссылки на нее:



Upd1 Спасибо buriy за полезные замечания