मैं दो सजावटकर्ताओं द्वारा एक Django दृश्य को सजाने की कोशिश कर रहा हूं, एक लॉगिन की जांच के लिए, और एक जांच_एक्टिव के लिए है।Django में एक दृश्य के लिए एकाधिक सजावटी: निष्पादन आदेश
पहले एक में निर्मित @login_required
है, और दूसरा एक निम्नलिखित है:
def active_required(function):
dec = user_passes_test(lambda u: u.is_active, '/notallowed', '')
return dec(function)
अब, अंदर बाहर अजगर काम में सज्जाकार, तथापि निम्नलिखित काम नहीं करता:
@active_required
@login_required
def foo(request):
...
मैं पहले यह जांचना चाहता हूं कि उपयोगकर्ता लॉग इन है या नहीं, और यदि लॉगिन नहीं किया गया है तो लॉगिन पेज पर रीडायरेक्ट करना है, और यदि वह लॉग इन है, तो मैं यह जांचना चाहता हूं कि वह सक्रिय है या नहीं, और यदि नहीं, तो रीडायरेक्ट करें '/notallowed'
।
क्या होता है कि अगर login_required विफल रहता है, उपयोगकर्ता लॉगिन पृष्ठ पर पुनः निर्देशित नहीं है, लेकिन @active_required
निष्पादित किया जाता है, और के बाद से उपयोगकर्ता उस मामले में शून्य है, @active_required डेकोरेटर विफल रहता है और उपयोगकर्ता /notallowed
पर भेज दिया जाएगा।
,
@login_required
@active_required
def foo(request):
...
लेकिन मुझे लगता है कि वहाँ कुछ इस दृष्टिकोण भी गलत है।
दो सजावट को गठबंधन करने का सही तरीका क्या है, और निष्पादन आदेश सरल पायथन सजावट से अलग क्यों होता है?
हम्म, मैं अभी भी थोड़ा आदेश के बारे में उलझन में हूँ: http://stackoverflow.com/a/739665/72436 और http://stackoverflow.com/a/8715839/72436 अन्यथा सुझाव देते हैं। – ustun
ठीक है, मुझे लगता है कि आपने इसे दबाया है, अंतर एक फंक्शन बनाम इसे वापस करने में निहित है। – ustun