Я тщательно искал и применял код в меру своих возможностей, чтобы решить, какие проблемы решаются другими людьми, за исключением того, что я до сих пор получаю ошибку 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},
)
Ваш код не сработал, но мне это помогло спасибо! : http: //stackoverflow.com/questions/38739422/django-error-render-to-response-got-an-unexpected-keyword-argument-context-i В котором он решил ошибку, плохо поставил решение как обновление по вопросу – jupiar
@jupiar, я рад, что это вам помогло, я обновляю свой ответ :) – Mohsen