我已经彻底搜索和应用代码,以我目前的能力修复的最好解决其他人的类似问题,除非我仍然得到一个403 CSRF错误,当用户在注册时按下“注册”窗体,但管理员登录工程。如果有人能指出我正确的方向,将不胜感激。
到目前为止,我试过并检查过的事情是:将CSRF中间件放在中间件列表的顶部,确保html注册表具有{% csrf_token %}
,确保注册视图包含render_to_response
和RequestContext
,现在我不知所措接下来要尝试什么。
我的项目名为mysite,应用程序登录。
使用Django 1.10.5和python 3.5
mysite的/ urls.py:Django CSRF错误注册
from django.conf.urls import url, include
from django.contrib import admin
from login.views import home, logout_page, register_success, register
import django
from django.contrib.auth import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^webapp/', include('webapp.urls')),
#url(r'^', include('personal.urls')),
url(r'^contact/', include('personal.urls')),
url(r'^blog/', include('blog.urls')),
url(r'^$', django.contrib.auth.views.login),
url(r'^home/$', home),
url(r'^register/$', register),
url(r'^register/success/$', register_success),
url(r'^accounts/login/$', django.contrib.auth.views.login),
url(r'^logout/$', logout_page),
]
mysite的/ settings.py:
INSTALLED_APPS = [
'webapp',
'personal',
'blog',
'login',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
import django.contrib.auth
django.contrib.auth.LOGIN_URL = '/'
MIDDLEWARE = [
'django.middleware.csrf.CsrfViewMiddleware',
'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',
]
登录/ views.py:
from django.shortcuts import render
from login.forms import *
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.views.decorators.csrf import csrf_protect
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.template import RequestContext
@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('/register/success/')
else:
form = RegistrationForm()
variables = RequestContext(request, {
'form': form
})
return render_to_response(
'registration/register.html',
variables,
)
#return render_to_response("registration/register.html", {'form': form}, RequestContext(request))
def register_success(request):
return render_to_response(
'registration/success.html',
)
def logout_page(request):
logout(request)
return HttpResponseRedirect('/')
@login_required
def home(request):
return render_to_response(
'home.html',
{ 'user': request.user }
)
登录/模板/注册/ register.html:
Django error: render_to_response() got an unexpected keyword argument 'context_instance'
{% extends "personal/header.html" %}
{% block content %}
<h1>User Registration</h1>
<form method="post" action=".">{% csrf_token %}
<table border="0">
{{ form.as_table }}
</table>
<button type="submit" value="Register">Register</button>
<button type="button" onclick="window.location.href='/' ">Login</button>
</form>
{% endblock %}
更新上述解决了问题通过我改变view.py到:
return render(request,
'registration/register.html', {'form':form},
)
你的代码没有工作,但它帮助我这个职位,谢谢! :http://stackoverflow.com/questions/38739422/django-error-render-to-response-got-an-unexpected-keyword-argument-context-i 在其解决了错误,虐待解决方案作为更新问题 – jupiar
@ jupiar,我很高兴它帮助你,我更新了我的答案:) – Mohsen