2012-08-29 15 views
6

मैं लॉगिन फार्म की एक एप्लिकेशन बनाने रहा हूँ, लेकिन जब मैं अपने ऐप चला रहा हूँ और प्रवेश बटन पर क्लिक करें निम्न त्रुटिनिषिद्ध (403) सीएसआरएफ सत्यापन विफल रहा। अनुरोध रोका गया

निषिद्ध (403) CSRF सत्यापन विफल हो जाएगा। अनुरोध निरस्त

view.py का कोड है:

from django.template import loader 
from django.shortcuts import render_to_response 
from registration.models import Registration 
from django.http import HttpResponse 
from django.template import RequestContext 
from django.shortcuts import redirect 


def view_login(request,registration_id): 
    t = loader.get_template('registration/login.html') 
    try: 
     registration=Registration.objects.get(pk=registration_id) 
    except Registration.DoesNotExist: 
     return render_to_response("login.html",{"registration_id":registration_id}) 

def home(request,registration_id): 
    if request.method == "POST": 
     username = request.POST.get('user_name') 
     password = request.POST.get('password') 
     user = authenticate(username=username, password=password) 
     if user is not None: 
     if user.is_active: 
      login(request, user) 
     # success 
      return render('registration/main_page.html',{'registration_id':registration_id},context_instance=RequestContext(user)) 
     else: 
     #user was not active 
      return redirect('q/',context_instance=RequestContext(user)) 
     else: 
     # not a valid user 
      return redirect('q/',context_instance=RequestContext(user)) 
    else: 
     # URL was accessed directly 
      return redirect('q/',context_instance=RequestContext(user)) 

उत्तर

16

आप अपने प्रपत्र

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

उस तरह में {% csrf_token %} जोड़ने की जरूरत:

<form> 
    {% csrf_token %} 
    <anything_else> 
</form> 

इसके अलावा, आपको RequestContext (अनुरोध) पूर्व का उपयोग करना होगा rytime आप render_to_response का उपयोग करें:

return render_to_response("login.html", 
    {"registration_id":registration_id}, 
    context_instance=RequestContext(request)) 

और तुम प्रमाणित आयात और के लिए लॉग इन करना होगा:

from django.contrib.auth import authenticate, login 
+0

तुम्हारा फॉर्म ? – user786

+0

यह निर्भर करती है, जहां है – BlueMagma

+0

ठीक है, मैंने इसे जोड़ा लेकिन अभी भी त्रुटि प्राप्त हो रही है। Wheather मुझे somethong आयात करना है ??? – user786

2

मैं इस समस्या का सामना करना पड़ा पुस्तक "Django निश्चित गाइड" जिसमें संस्करण 1.1 प्रयोग किया जाता है का उपयोग करते हुए। पुस्तक csrf_token सत्यापन की आवश्यकता को संबोधित नहीं करती है जो बाद के संस्करणों में अनिवार्य है।

इस समस्या को हल करने के लिए, जोड़ें:

from django.template import RequestContext 

views.py फ़ाइल और render_to_response समारोह के लिए इस जोड़ा तर्क करने के लिए:

context_instance = RequestContext(request) 

में <form> टैग भीतर {% csrf_token %} जोड़ना सुनिश्चित करें टेम्पलेट

3

बस टिप्पणी करें 'django.middleware.csrf.CsrfViewMiddleware'

अपने settings.py है, जो मेरे लिए काम करता में:

//settings.py 
MIDDLEWARE = [ 
'django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
#'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 
में ** home.html ** या ** login.html ** या ** दोनों **
संबंधित मुद्दे