1

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}, 
) 

Répondre

0

Vous devez passer context_instance paramètre à render_to_response fonction:

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

MISE À JOUR:
Dans les nouvelles versions de django utilisent render au lieu de render_to_response, cette question ne soulevant pas.

+0

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

+0

@jupiar, je suis content que cela vous a aidé, je mets à jour ma réponse :) – Mohsen