繁体   English   中英

如何为 flask 路由参数指定枚举类型提示

[英]How do I specify an enum type hint for a flask route parameter

我有以下枚举

class RequestType(str, Enum):
     type1 = "abc"
     type2 = "xyz"

以及以下 flask 路线:

@app.route("/api/v1/<type>", methods=["POST"]
def type(type):
     # do stuff

我希望能够做这样的事情:

@app.route("api/v1/<RequestType:type>", methods=["POST"]

但是我找不到一种方法来做这样的事情。 有没有好的方法来做到这一点? 还是通过其他方式将type的值限制为有限的字符串列表?

您需要添加自定义转换器 这会将 URL 的提取部分转换为您定义的枚举常量,或将传递给 URL 的一部分的常量转换。为了能够使用它,必须将其添加到具有标识符的转换器映射中。 从现在开始,它可以在每个规则中与注册名称一起使用,或者可以使用url_for使用已定义枚举类型的传递参数创建 URL。

from flask import Flask
from enum import Enum, unique
from werkzeug.routing import BaseConverter, ValidationError

@unique
class RequestType(str, Enum):
    TYPE1 = 'abc'
    TYPE2 = 'def'

class RequestTypeConverter(BaseConverter):

    def to_python(self, value):
        try:
            request_type = RequestType(value)
            return request_type
        except ValueError as err:
            raise ValidationError()

    def to_url(self, obj):
        return obj.value


app = Flask(__name__)
app.url_map.converters.update(request_type=RequestTypeConverter)

@app.route('/api/v1/<request_type:t>', methods=['POST'])
def root(t):
    return f'{t.name} -> {t.value}'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM