簡體   English   中英

Python裝飾器在Django上檢查POST參數

[英]Python decorator to check for POST parameters on Django

我有這樣讀取的代碼,以檢查請求中是否包含POST參數:

def login(request):
    required_params = frozenset(('email', 'password'))
    if required_params <= frozenset(request.POST):
        # 'email' and 'password' are included in the POST request
        # continue as normal
        pass
    else:
        return HttpResponseBadRequest()

當所需的POST參數列表很大時,此代碼將變得混亂。 我想做的是這樣的:

@required_POST_params('email', 'password')
def login(request):
    # 'email' and 'password' are here always!
    pass

然后,我有信心在請求中同時包含“ email”和“ password” POST參數,因為如果沒有,則請求將自動返回HttpResponseBadRequest()

Django是否有辦法允許我執行此操作,如果不允許,我如何可以自己使用裝飾程序來執行此操作?

您將需要一個自定義裝飾器,但是您可以將require_http_methods作為一個基本示例:

def require_post_params(params):
    def decorator(func):
        @wraps(func, assigned=available_attrs(func))
        def inner(request, *args, **kwargs):
            if not all(param in request.POST for param in params):
                return HttpResponseBadRequest()
            return func(request, *args, **kwargs)
        return inner
    return decorator

用法示例:

@require_post_params(params=['email', 'password'])
def login(request):
    # 'email' and 'password' are here always!
    pass

僅供參考, require_http_methods源代碼

試試這個

代替require.POST() ,請嘗試require.POST('email', 'password')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM