1

我已经彻底搜索和应用代码,以我目前的能力修复的最好解决其他人的类似问题,除非我仍然得到一个403 CSRF错误,当用户在注册时按下“注册”窗体,但管理员登录工程。如果有人能指出我正确的方向,将不胜感激。
到目前为止,我试过并检查过的事情是:将CSRF中间件放在中间件列表的顶部,确保html注册表具有{% csrf_token %},确保注册视图包含render_to_responseRequestContext,现在我不知所措接下来要尝试什么。
我的项目名为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}, 
) 

回答

0

你必须通过context_instance参数render_to_response功能:

return render_to_response(
    'registration/register.html', 
    variables, 
    context_instance=RequestContext(request) 
) 

UPDATE:
在Django的新版本使用render代替render_to_response,这个问题不涨价。

+0

你的代码没有工作,但它帮助我这个职位,谢谢! :http://stackoverflow.com/questions/38739422/django-error-render-to-response-got-an-unexpected-keyword-argument-context-i 在其解决了错误,虐待解决方案作为更新问题 – jupiar

+0

@ jupiar,我很高兴它帮助你,我更新了我的答案:) – Mohsen