[英]CSRF token missing or incorrect, 404
This is a widely asked question, but most of them have a different scenario, and I believe mine too. 这是一个普遍问到的问题,但其中大多数人的情况有所不同,我相信我也是。
Below are my project details 以下是我的项目详细信息
apps.ulrs.py: apps.ulrs.py:
urlpatterns = [
url(r'^index/$', views.IndexView, name='index'),
url(r'^signup/$', views.signupview, name='sign_up'),
]
models.py: models.py:
from django.db import models
from django.core.urlresolvers import reverse
#from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Registration(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
username = models.CharField(max_length = 250)
password = models.CharField(max_length = 250)
email = models.CharField(max_length = 250)
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
Registration.objects.create(user=instance)
instance.registration.save()
views.py: views.py:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
from .forms import SignUpForm
#from django.corecontext_processors import csrf
from django.template import RequestContext
from django.shortcuts import render_to_response
from django.views import generic
class IndexView(generic.View):
templet_name = 'user_info/index.html'
def signupview(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('registration_form.html')
else:
form = SignUpForm()
#return render(request,'user_info/registration_form.html', {'form': form})
return render_to_response('user_info/registration_form.html', {'form': form, }, context_instance = RequestContext(request))
I doing some research I came to know that we need to import "csrf" in my views.py , so I tried below: 我进行了一些研究,得知我们需要在views.py中导入“ csrf”,因此我尝试了以下操作:
#from django.corecontext_processors import csrf
But as per my understanding goes, it was deprecated since django 1.8. 但据我了解,自Django 1.8起已弃用。 Please correct me if I am wrong. 如果我错了,请纠正我。 I am using python 3.6, and django 1.11. 我正在使用python 3.6和Django 1.11。 So, what would be the library I am supposed to import for 'csrf'? 那么,应该为“ csrf”导入的库是什么?
I do have {% csrf_token %} inside my html file inside tag: 我的html文件中的标签中确实包含{%csrf_token%}:
{% block title %}register{% endblock %}
{% block body %}
{% block content %}
<h2>Sign up</h2>
<form method="post">
{% csrf_token %}
{% for field in form %}
<p>
{{ field.label_tag }}<br>
{{ field }}
{% if field.help_text %}
<small style="color: grey">{{ field.help_text }}</small>
{% endif %}
{% for error in field.errors %}
<p style="color: red">{{ error }}</p>
{% endfor %}
</p>
{% endfor %}
<button type="submit">Sign up</button>
</form>
{% endblock %}
{% endblock %}
the exact error that I get is: 我得到的确切错误是:
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
Don't use render_to_response
, it's obsolete. 不要使用render_to_response
,这已经过时了。 Uncomment the line that uses render
and use that instead. 取消注释使用render
的行,并改为使用它。
return render(request,'user_info/registration_form.html', {'form': form})
When you use render
, there is no need to use RequestContext
or the csrf context processor in your view. 当您使用render
,也没有必要使用RequestContext
或视图中的CSRF背景处理器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.