2011-11-11 13 views
15

यहां Django में शुरुआती, मैं अब इसे लंबे समय से ठीक करने की कोशिश कर रहा हूं। मेरे पास मेरे मिडलवेयर कक्षाओं में 'django.middleware.csrf.CsrfViewMiddleware' है और मेरे पास मेरे पोस्ट फॉर्म में टोकन है।सीएसआरएफ टोकन गुम या गलत

मेरा कोड है, मैं क्या गलत कर रहा हूं?

from django.contrib.auth.forms import UserCreationForm 
from django.shortcuts import render_to_response 
from django.http import HttpResponseRedirect 
from chartsey.authentication.forms import RegistrationForm 
from django.template import RequestContext 
from django.core.context_processors import csrf 

def register(request): 

    if request.method == 'POST': 
     c = RequestContext(request.POST, {}) 
     form = RegistrationForm(c) 
     if form.is_valid(): 
      new_user = form.save() 
      return HttpResponseRedirect("/") 
    else: 
     form = RegistrationForm() 

    return render_to_response("register.html", {'form': form, },) 

यहाँ मेरी खाका है:

{% block content %} 

    <h1>Register</h1> 
    <form action="" method="POST"> {% csrf_token %} 
     {{ form.as_p }} 
    <input type="submit" value="Submit"> 
    </form> 

{% endblock %} 
+0

के संभावित डुप्लिकेट से नीचे लाइन बाहर टिपण्णी कर रहा था [Django: CSRF अनुपलब्ध या गलत टोकन] (http://stackoverflow.com/questions/8321217/ django-csrf-token-missing-or-wrong) – lracicot

उत्तर

21

मेरा अनुमान है कि आप टेम्पलेट में कोड है तो है, लेकिन यह कुछ भी प्रस्तुत नहीं हो रहा है (या आप मतलब था कि आप वास्तविक HTML कि एक CSRF टोकन है में इस बात की पुष्टि उत्पन्न किया जा रहा?)

या तो एक शब्दकोश के बजाय RequestContext का उपयोग

render_to_response("foo.html", RequestContext(request, {})) 

या सुनिश्चित करें कि आपके CONTEXT_PROCESSORS सेटिंग में django.core.context_processors.csrf है।

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

Or add the token to your context manually

+0

उसने ऐसा किया! मुझे अभी भी पूरी तरह से समझने में थोड़ी परेशानी हो रही है, लेकिन कम से कम मैं खाली रूप से घूर रहा हूं और चीजों को यादृच्छिक रूप से बदलने की कोशिश कर रहा हूं। दस्तावेज़ों ने मुझे बहुत मदद नहीं की, बहुत बहुत धन्यवाद! – arooo

+0

यह दस्तावेज़ों में चरण 3 है :) यदि आप स्वयं को थोड़ा सा खोदने देते हैं तो Django के दस्तावेज़ अद्भुत हैं। सौभाग्य! –

+0

बहुत बहुत धन्यवाद, यह मेरी समस्या हल हो गया। सभी के लिए सामान्य सलाह: जांच करें कि क्या आप उचित पैरामीटर के साथ उपयोगकर्ता render_to_response() को देखते हैं, मैंने गड़बड़ कर दिया और इसे 3 पैरामीटर दिए, इसलिए इसके परिणामस्वरूप उपर्युक्त त्रुटि हुई। – Phonebox

5

बस अपने विचारों

return render_to_response("register.html", {'form': form, }, context_instance = RequestContext(request))

यह काम करेंगे में जोड़ने !!

0

यदि आप CsrfViewMiddleware का उपयोग नहीं कर रहे हैं, तो आपको csrf_token टेम्पलेट टैग का उपयोग करने वाले किसी भी विचार पर csrf_protect का उपयोग करना होगा, साथ ही साथ पोस्ट डेटा स्वीकार करने वाले भी।

0

का जोड़ा render_to_response का उपयोग करते समय @Yuji 'Tomita' Tomita और @Njogu Mbau द्वारा उल्लिखित कुंजी है। हालांकि, जब मैंने इस समस्या से जूझ रहे थे तो मुझे शुरुआत में फेंक दिया गया था कि मुझे views.py में दोनों फ़ंक्शन के लिए RequestContext जोड़ना था जो प्रारंभ में टेम्पलेट और views.py में फ़ंक्शन को लोड करता है जो टेम्पलेट से सबमिशन को संभालता है।

इसके अलावा, सिर्फ संदर्भ के लिए, यहाँ कुछ अन्य लिंक कि यह वही समस्या पर चर्चा कर रहे हैं

3

प्रस्तुत करना उपयोग करने का प्रयास बजाय render_to_response:

from django.shortcuts import render 

render(request, "foo.html", {}) 

Django - what is the difference between render(), render_to_response() and direct_to_template()?

लिंक में कहा गया है जैसा कि ऊपर यह Django 1 में शुरू की गई थी।3 और स्वचालित रूप से अनुरोधकॉन्टेक्स्ट

0

भी django-livereload-server स्थापित करने के बाद कुछ पृष्ठों पर यह त्रुटि यादृच्छिक रूप से प्राप्त हुई। अनइंस्टॉल करने से django-livereload-server ने चाल की।

-1

क्या मेरे लिए काम किया मेरी settings.py

'django.middleware.csrf.CsrfViewMiddleware'

संबंधित मुद्दे