मुझे लगता है कि आपको कोड प्रदान करना चाहिए कि आप अपने एचटीएमएल/जेएस कोड में सीएसआरएफ टोकन कैसे प्राप्त करते हैं और अपने मध्यवर्ती के लिए सेटिंग्स कैसे प्राप्त करते हैं।
सबसे पहले आपको यह जांचना चाहिए कि django.middleware.csrf.CsrfViewMiddleware
चालू है।
मुझे एक समान समस्या थी, जब पायथन कोड में मैंने टोकन प्राप्त करने के लिए request.META.get('CSRF_COOKIE')
का उपयोग किया था।
जब आप टेम्पलेट में इस टोकन का उपयोग करते हैं - {% csrf_token %}
Django नोट करता है कि टोकन प्रदान किया गया था और कुकी को CsrfViewMiddleware.process_response
में सेट किया गया था। यदि आपको टोकन मूल्य अन्य तरीकों से मिलता है तो Django इस ध्वज को याद करेगा। तो यह आपको एक टोकन उत्पन्न करेगा लेकिन संबंधित कुकी सेट नहीं करेगा।
मेरे पास कोड में 2 वर्कअराउंड हैं। आपको इसे अपने विचारों में जोड़ना चाहिए जिसका उपयोग जेएस कोड के साथ टेम्पलेट जेनरेट करने के लिए किया जाता है।
1. आप CSRF कुकी सेट करने के लिए Django मजबूर कर सकते हैं:
# Force updating CSRF cookie
request.META["CSRF_COOKIE_USED"] = True
2. Django CSRF_COOKIE_USED स्वतः निर्धारित अगर आप get_token
from django.middleware.csrf import get_token
# don't use direct access to request.META.get('CSRF_COOKIE')
# in this case django will NOT send a CSRF cookie. Use get_token function
csrf_token = get_token(request)
इस समाधान में से हर एक फोन अलग से काम करना चाहिए। मैं get_token
csrf_protect सजावट के साथ पहले एक समान समस्या थी। अगर आप किसी पृष्ठ से दूसरे यूआरएल (उदाहरण के लिए AJAX) पर पोस्ट कर रहे हैं और यदि आप @csrf_protect सजावट आदि का उपयोग कर रहे हैं तो सुनिश्चित करें कि आप दोनों दृश्य पोस्ट कर रहे हैं इस सजावट के लिए पोस्ट डेटा प्राप्त करने वाले यूआरएल से डेटा और यूआरएल। – sidarcy
आपका विचार, आपका टेम्पलेट फॉर्म? –