2015-03-10 9 views
0

Когда я нажимаю отправить это показывает проверка CSRF не удалось Eventhough я использовал {% csrftoken%} здесь мой view.py:Shownig CSRF не удалось выполнить проверку в Джанго

@csrf_protect 
def register(request): 
if request.method == 'POST': 
    form = RegistrationForm(request.POST) 
    if form.is_valid(): 
     user = User.objects.create_user(
     username=form.cleaned_data['username'], 
     password=form.cleaned_data['password1'], 
     email=form.cleaned_data['email'] 
     ) 
     return HttpResponseRedirect('/login/') 
else: 
    form = RegistrationForm() 
catagories = Company_Profile.objects.all() 
variables = RequestContext(request, { 
'form': form,'catagories' : catagories 
}) 

return render_to_response(
'index1.html', 
variables 

) 

мой HTML страницы index1.html s:

<div id="connect_signup_box" class="connect_box_form clearfix">{% csrf_token %} 
<form enctype="application/x-www-form-urlencoded" class="global_form" action="" method="POST">{% csrf_token %}<div><div><h3>Create Account</h3> 
<div class="form-elements" > 
<div id="name-wrapper" class="form-wrapper"><div id="name-label" class="form-label"><label for="name" class="optional">Name</label></div> 
<div id="name-element" class="form-element"> 
<input type="text" name="name" id="name" value="" class="signup-name"></div>  </div> 

<div id="username-wrapper" class="form-wrapper"><div id="username-label" class="form-label"><label for="id_username">Username:</label></div> 
<div id="username-element" class="form-element"> 
<input id="id_username" max_length="30" name="username" required="True" type="text"> 
<div id="uJTtr4FGLy-wrapper" class="form-wrapper"><div id="uJTtr4FGLy-label"  class="form-label"><label for="id_email">Email Id:</label></div> 
<div id="uJTtr4FGLy-element" class="form-element"> 
<input id="id_email" max_length="30" name="email" required="True" type="text"> 
<p class="description">You will use your email address to login.</p></div> </div> 
<div id="password-wrapper" class="form-wrapper"><div id="password-label"  class="form-label"><label for="id_password1">Password:</label></div> 
<div id="password-element" class="form-element"> 
<input id="id_password1" name="password1" type="password"> 
<p class="description">Passwords must be at least 6 characters in length. </p></div></div> 
<div id="passconf-wrapper" class="form-wrapper"><div id="passconf-label" class="form-label"><label for="id_password2">Password (Confirm):</label></div> 
<div id="passconf-element" class="form-element"> 
<input id="id_password2" max_length="30" name="password2" render_value="False" required="True" type="password"> 
<p class="description">Enter your password again for confirmation.</p></div> </div> 

<p class="description">This will be the end of your profile link, for example: <br> </p></div></div> 
</div></div> 
<div id="terms-wrapper" class="form-wrapper"><div id="terms-label" class="form-label">&nbsp;</div><div id="terms-element" class="form-element"> 
<input type="hidden" name="terms" value=""><input type="checkbox" name="terms" id="terms" value="1" tabindex="7"> 
<label class="null" for="terms">I have read and agree to the <a target="_blank" href="help/terms.html">terms of service</a>.</label></div></div> 
<div id="submit-wrapper" class="form-wrapper"><div id="submit-label"  class="form-label">&nbsp;</div><div id="submit-element" class="form-element"> 
<input type="hidden" name="csrfmiddlewaretoken" value="vmGTjibc4wzzsrVshrElFs8J0T24UECG"> 
     <input type="submit" class="btn btn-success" value="submit"> 

    <input type="reset" class="btn" value="cancel"> 

    </div></div></div></form> </div> 

</div> 

я не использую form.as_p, так как мне это нужно индивидуально применить CSS .. пожалуйста, помогите мне

редактировать: я получил ответ фактическая проблема в том, что у меня есть hardcoded csrf i.e

поэтому удалены, и он отлично работает. благодаря @ Daniel Roseman, который заметил меня, и спасибо всем за помощь.

+2

Я считаю, '{% csrf_token%}' должны быть заключены в ''

, и почему там 2 в шаблоне? – Jkdc

+0

часть этого шаблона из шаблона, который я загрузил. Я использую это же для других страниц и не имею проблем там. –

+0

Он все равно должен быть внутри формы. И второе похоже на жестко закодированное значение, которое никогда не будет работать и перезаписывает фактический токен. –

ответ

1

Вам нужно переместите тег {% csrf_token%} - поместите его в форму. Кроме того, если вы используете django.middleware.csrf.CsrfViewMiddleware, вам не нужно вручную csrf_защищать ваше представление.

И для экземпляра контекста, попытайтесь сделать это так:

def register(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      user = User.objects.create_user(
      username=form.cleaned_data['username'], 
      password=form.cleaned_data['password1'], 
      email=form.cleaned_data['email'] 
      ) 
      return HttpResponseRedirect('/login/') 
     else: 
      form = RegistrationForm() 
    catagories = Company_Profile.objects.all() 
    variables = {'form': form,'catagories' : catagories} 

    return render_to_response('index1.html', variables, context_instance=RequestContext(request)) 
2

Вы должны пройти RequestContext в качестве третьего аргумента render_to_response():

return render_to_response('index1.html', 
          {'form': form, 'catagories': catagories}, 
          RequestContext(request)) 

Или, как лучший вариант, использовать render() функцию вместо render_to_response():

from django.shortcuts import render 

return render(request, 'index1.html', variables) 
+0

когда я использую return render (request, 'index1.html', переменные), он показывает элемент последовательности обновления словаря # 0 имеет длину 11; 2 также требуется, когда я использую return render_to_response ('index1.html', {'form': form, 'catagories': catagories}, RequestContext (запрос)), в котором отсутствует токен csrf. –

Смежные вопросы