2014-11-14 5 views
6

को ओवरराइड करने के लिए कैसे करें यदि सीएसआरएफ जांच विफल हो जाती है, तो Django 403 त्रुटि वाला एक पृष्ठ प्रदर्शित करता है।Django: CSRF_FAILURE_TEMPLATE

Error page displayed on csrf error

मुझे ऐसा लगता है कि इस त्रुटि, नियमित रूप से उपयोग में हो सकता है, उदाहरण के लिए उपयोगकर्ता अपने ब्राउज़र सेटिंग्स में कुकी उपयोग को निष्क्रिय जब।

दुर्भाग्यवश, यह त्रुटि संदेश अंतिम उपयोगकर्ता के लिए बहुत उपयोगी नहीं है और इसमें "django-error" लेआउट है (यह एक समस्या है क्योंकि उदाहरण के लिए साइट नेविगेशन गुम है)।

Django टेम्पलेट को ओवरराइड करने के लिए एक महान तंत्र है लेकिन ऐसा लगता है कि यह टेम्पलेट कोड में हार्ड-कोड किया गया है। https://github.com/django/django/blob/1.6.8/django/views/csrf.py

क्या उपयोगकर्ताओं को अधिक मित्रवत संदेश प्रदान करने के लिए इस टेम्पलेट को ओवरराइड करने का कोई तरीका है?

CSRF_FAILURE_VIEW = 'your_app_name.views.csrf_failure' 

इसके अलावा, आप (इस हस्ताक्षर की आवश्यकता है अपने दृश्य में एक csrf_failure समारोह को परिभाषित करने की आवश्यकता होगी:: आधारित def csrf_failure(request, reason="")

उत्तर

11

Django document लिए, आप अपने settings.py में CSRF_FAILURE_VIEW सेट कर सकते हैं, इस तरह के रूप संदर्भ लें दस्तावेज़) है, जो के समान है पर:

def csrf_failure(request, reason=""): 
    ctx = {'message': 'some custom messages'} 
    return render_to_response(your_custom_template, ctx) 

और आप अपने कस्टम टेम्पलेट के रूप में लिख सकते हैं:

<!DOCTYPE html> 
<html> 
    <head lang="en"> 
     <meta charset="UTF-8"> 
     <title></title> 
    </head> 
    <body> 
     {{ message }} 
    </body> 
</html> 
+0

धन्यवाद। यह वही है जो मुझे चाहिए। बस ध्यान दें कि "कारण" एक डेवलपर संदेश है और अंतिम उपयोगकर्ता को नहीं दिखाया जाना चाहिए। तो, मेरे मामले में, मैं इसे अपना टेम्पलेट प्रदर्शित नहीं करूंगा। – luc

+0

@luc, मेरे उत्तर को नोट किया और संपादित किया, धन्यवाद! – dazedconfused

+0

आप इसका परीक्षण कैसे करेंगे? – guival