В этом кратком руководстве я покажу, как мы можем использовать flask для написания API; со следующими целями:
a) Определение пользовательских маршрутов
b) Разделение маршрутов, контроллеров, моделей, валидаторов и т.д. по соответствующим папкам.
Позже я опубликую пост, который поможет нам понять мой стиль архитектуры, когда речь идет о Flask.
Определение пользовательского маршрута
Возьмем для примера гипотетический блог-сайт. Я предполагаю, что в вашем проекте есть папки users, comments и posts. Причина этого заключается в том, что вы хотите разделить модели, маршруты, контроллеры и т.д. для записей и пользователей. Контроллеры для пользователей, безусловно, будут включать, но не ограничиваться: регистрация, вход, забыл-пароль, изменение-почты и т.д. В то время как контроллеры для сообщений будут включать редактирование-пост, удаление-пост, создание-пост и т.д. Вы согласитесь со мной, что группировка этих транзакций в одном файле, определенно утомит вас, а возможно, и сведет с ума. Более того, поскольку Flask-Restful поддерживает только известные HTTP-глаголы «GET», «POST» и т.д., то определять новые классы для каждой операции post, delete и т.д., соответственно, не представляется возможным. Можно подумать, что для выполнения операций входа и регистрации потребуются разные классы, как показано ниже (в вашем файле routes.py);
routes.py
class LoginView(Resource):
logging.basicConfig(level=logging.INFO)
logging.info("Entered the LoginView...")
def login(self):
print("nt Login route....")
class RegisterView(Resource):
logging.basicConfig(level=logging.INFO)
logging.info("Entered the RegisterView...")
def register(self):
print("nt Register route....")
Эту проблему можно просто решить питонически, как показано ниже;
from flask_restful import (
Resource,
request
)
import logging
from ..models.models import Users
class AuthViews(Resource):
logging.basicConfig(level=logging.INFO)
logging.info("Entered the auth views...")
def login(self):
print("nt Login route....")
def register(self):
print("nt Register route....")
def post(self):
print("nt Login-Data: ", request.data)
print("nt Login-Data: ", request.url)
url = request.url
if "login" in url:
login = self.login()
elif "register" in url:
register = self.register()
elif "forgot-password" in url:
register = self.forgot_password()
else:
etc....
auth_routes = ["/auth/register", "/auth/login"]
Затем в файле app.py вы зарегистрируете свой ресурс следующим образом;
...
from routes.routes import AuthViews, auth_routes
app = Flask(__name__)
api = Api(app)
api.add_resource(AuthViews, *auth_routes)
Спасибо. Далее я покажу вам, как определять модели, используя PyMongo.