2017-04-05 83 views
0

我想將其他關鍵字選項傳遞給燒瓶的註冊功能add_url_rule。以下是我嘗試使用的代碼:燒瓶`add_url_rule`選項參數不會添加其他關鍵字選項

import flask 
APP = flask.Flask(__name__) 
APP.add_url_rule('/', 'get_all', routes.get_all, class_name='Entity') 

這是我收到的錯誤。

Traceback (most recent call last): 
File "src/main.py", line 118, in <module> 
    class_name='Entity') 
File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 64, in wrapper_func 
    return f(self, *args, **kwargs) 
File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1043, in add_url_rule 
    rule = self.url_rule_class(rule, methods=methods, **options) 
TypeError: __init__() got an unexpected keyword argument 'class_name' 

基於對文檔的,我認爲,任何附加的關鍵字參數將被包含在options參數下的函數調用routes.get_all。這似乎並非如此。

這與Flask add_url_rule with options throws unexpected keyword argument相似但不相同。

有人可以解釋如何將任意參數傳遞給由add_url_rule Flask方法鏈接的函數嗎?

回答

0

選項 - 要轉發給底層Rule對象的選項。對Werkzeug的更改是處理方法選項。方法是這個規則應該限制到的方法列表(GET,POST等)。默認情況下,規則只是偵聽GET(並隱含HEAD)。從Flask 0.6開始,OPTIONS被隱式添加並由標準請求處理來處理。

您可以發送方法是:

APP.add_url_rule('/', 'get_all', routes.get_all, methods=["POST", "POST", "PUT"]) 

請參閱本守則的實施:add_url_rule

此外,您還可以發送defaults你的選擇在一個字典一樣this

你PARAMS去url_rule_class功能(參見this):

rule = self.url_rule_class(rule, methods=methods, **options) 

,現在看到這一點:

你可以使用任何的這個PARAMS作爲選項,而不是別的!

class werkzeug.routing.Rule(string, defaults=None, subdomain=None, methods=None, build_only=False, endpoint=None, strict_slashes=None, redirect_to=None, alias=False, host=None) 

werkzeug.routing.Rule

+0

因此,基於此文檔和代碼,似乎'options'不在'methods'被忽略?爲什麼要添加'class_name'然後拋出一個錯誤? –

+0

@NicholasTulach我試着回答你的問題,我更新了我的答案。 – RaminNietzsche

+0

我認爲使用'defaults'可以滿足我的需求。謝謝! –