Пользовательские маршруты во Flask с использованием Flask Restful

В этом кратком руководстве я покажу, как мы можем использовать 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.

Оцените статью
devanswers.ru
Добавить комментарий