1

Я тщательно искал и применял код в меру своих возможностей, чтобы решить, какие проблемы решаются другими людьми, за исключением того, что я до сих пор получаю ошибку CSRF 403, когда пользователь нажимает «регистр» на мою регистрацию формы, но вход администратора работает. Если кто-то может указать мне в правильном направлении, это будет очень признательно.
То, что Ive пробовал и проверял до сих пор: установить промежуточное ПО CSRF в верхней части списка промежуточного программного обеспечения, убедитесь, что форма регистрации html имеет {% csrf_token %}, убедитесь, что в виде регистра содержится render_to_response с RequestContext, и теперь im в убытке о том, что попробовать дальше.
Мой проект называется 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:

{% 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 %} 

Update

Django error: render_to_response() got an unexpected keyword argument 'context_instance'
выше решена проблема через меня меняет 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:
В новых версиях Джанго использовать 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

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