Как использовать маршрут фляги с представлением на основе класса? - PullRequest
0 голосов
/ 19 марта 2019

Django style Class Based Views - классная и мощная функция.Но маршрутизаторы в стиле Flask больше подходят для свободного стиля структуры приложения.Как я могу сделать что-то вроде этого:

@app.route("/")
class MyView(MethodView):
    def get(self):
        return "Hello word"

1 Ответ

0 голосов
/ 19 марта 2019

Я не смог найти такую ​​функцию в официальной документации колбы.Кроме того, я не нашел решения в Интернете или аналогичного вопроса в Stack Overflow, поэтому я подготовил фрагмент для этого случая.

import types

from flask import Blueprint
from flask.views import MethodView


# decorator code
def class_route(self, rule, endpoint, **options):
    """
    This decorator allow add routed to class view.
    :param self: any flask object that have `add_url_rule` method.
    :param rule: flask url rule.
    :param endpoint: endpoint name
    """

    def decorator(cls):
        self.add_url_rule(rule, view_func=cls.as_view(endpoint), **options)
        return cls

    return decorator

    # Usage
    # I use `Blueprint` and `MethodView`, but it should work correct with `App` and `View` to.


bp = Blueprint("bp", __name__, template_folder="templates")


@class_route(bp, "/", "my_view")
class MyView(MethodView):
    def get(self):
        return "Hello world"


# Advanced usage
# Add decorator as class method
bp.class_route = types.MethodType(class_route, bp)


# And use is as bultin decorator
@bp.class_route("/advanced", "advanced_my_view")
class AdvancedMyView(MethodView):
    def get(self):
        return "Hello world!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...