सरलीकृत फ्लास्क विधिदृश्य सजावट

मैं एक सजावटी पर काम कर रहा हूं जो एपीआई टोकन को मान्य करता है, मेरा पहला सजावट कुछ न्यूनतम कार्य क्रम में प्राप्त करने वाला है:

def check_token(view_method):
    @wraps(view_method)
    def wrapped_view(*args, **kwargs):
        token = request.args['token']
        if token is None:
            abort(403)
        return view_method(*args, **kwargs)
    return wrapped_view

इस तरह के काम, यानी टोकन प्रदान किए जाने पर दृश्य काम करता है, लेकिन अगर 400 खराब अनुरोध त्रुटि नहीं देता है। मैं 403 त्रुटि भेजना चाहता हूं, लेकिन मुझे अभी तक पकड़ने के लिए पर्याप्त जानकारी नहीं है।

इसमें क्या गलत है कि यह केवल 400 त्रुटि लौटाता है? मैं इसे कैसे सुधारूं?

0
जोड़ा संपादित
विचारों: 1
मुझे लगता है कि इस बिंदु पर मुझे नहीं पता था, कोशिश करते हैं।
जोड़ा लेखक blueblank, स्रोत
यह काम करता है, इसलिए यदि आपने नीचे जवाब दिया है तो मैं इसे चेकमार्क कर दूंगा। अनुरोध एक वर्कज़ुग मल्टीडिक्ट है, और इसके साथ मुझे सामान्य रूप से उस और पायथन की मेरी समझ को परिष्कृत करने की आवश्यकता है, धन्यवाद।
जोड़ा लेखक blueblank, स्रोत
शायद इसलिए <�कोड> टोकन = request.args ['टोकन'] abort (403) तक पहुंचने से पहले KeyError फेंक रहा है?
जोड़ा लेखक Vikas, स्रोत
मेरा मतलब है <�कोड> request.args में कोई कुंजी टोकन नहीं है। request.args.get ('टोकन', कोई नहीं) को आज़माएं और देखें कि क्या यह काम करता है।
जोड़ा लेखक Vikas, स्रोत
उत्तर दिया: -) ...
जोड़ा लेखक Vikas, स्रोत

1 उत्तर

request.args is a MultiDict and it raises if a key is requested which is not there in dict. Here request.args['token'] raises before it reaches to abort(403). Few solutions are:

## If a 2nd optional argument is provided to dict.get then
## it does not raise if key is not found. Instead returns
## the 2nd argument passed as default.

token = request.args.get('token', None)
    if not token:
        ## Error handling

या:

if 'token' not in request.args or not request.args['token']
    ## Error handling
0
जोड़ा