J'ai soigneusement recherché et appliqué du code au meilleur de mes corrections de capacité actuelles pour résoudre les problèmes similaires des autres personnes, sauf que je reçois toujours une erreur 403 CSRF lorsque l'utilisateur appuie sur 'enregistrer' sur mon enregistrement formulaire, mais admin login fonctionne. Si quelqu'un peut me diriger dans la bonne direction, ce serait très apprécié.
Les choses que j'ai essayées et vérifiées jusqu'ici est: pour mettre le middleware CSRF en haut de la liste middleware, assurez-vous que le formulaire d'enregistrement html a {% csrf_token %}
, assurez-vous que la vue de registre contient render_to_response
avec RequestContext
, et maintenant à perte de quoi essayer ensuite.
Mon projet s'appelle monsite, avec l'application login.
En utilisant django 1.10.5 et python 3,5
monsite/urls.py:Django CSRF Erreur d'enregistrement
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),
]
monsite/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',
]
login/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 }
)
login/templates/enregistrement/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 %}
Mise à jour
Django error: render_to_response() got an unexpected keyword argument 'context_instance'
ci-dessus a résolu le problème via moi en changeant le view.py à:
return render(request,
'registration/register.html', {'form':form},
)
Votre code n'a pas fonctionné, mais il m'a aidé à ce poste merci !! : http: //stackoverflow.com/questions/38739422/django-error-render-to-response-got-an-unexpected-keyword-argument-context-i Dans lequel il a résolu l'erreur, malade mis la solution en tant que mise à jour sur la question – jupiar
@jupiar, je suis content que cela vous a aidé, je mets à jour ma réponse :) – Mohsen