[英]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.