我有以下列舉
class RequestType(str, Enum):
type1 = "abc"
type2 = "xyz"
以及以下燒瓶路線:
@app.route("/api/v1/<type>", methods=["POST"]
def type(type):
# do stuff
我希望能夠做這樣的事情:
@app.route("api/v1/<RequestType:type>", methods=["POST"]
但我找不到一種方法來完成這樣的作業。有沒有好的方法來做到這一點?或者以其他方式將值限制為type有限的字串串列?
uj5u.com熱心網友回復:
您需要添加一個自定義轉換器。這會將 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}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444633.html
