1

Ich habe gründlich gesucht und angewendet Code auf die beste meiner aktuellen Fähigkeit behebt, was anderen Menschen ähnliche Probleme gelöst, außer ich bekomme immer noch eine 403 CSRF Fehler, wenn der Benutzer 'Register' auf meiner Registrierung drücken Formular, aber Admin-Login funktioniert. Wenn jemand mich in die richtige Richtung weisen kann, wäre es sehr geschätzt.
Die Dinge, die ich bisher versucht und überprüft habe, ist: die CSRF-Middleware an die Spitze der Middleware-Liste zu stellen, stellen Sie sicher, dass das HTML-Registrierungsformular hat {% csrf_token %}, stellen Sie sicher, dass die Registeransicht enthält render_to_response mit RequestContext, und jetzt bin ich mit einem Verlust von was als nächstes versuchen.
Mein Projekt heißt mysite, mit der App login.
Mit django 1.10.5 und Python 3,5

mysite/urls.py:Django CSRF Fehler bei der Registrierung

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', 
] 


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/registration/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 %} 

aktualisieren

Django error: render_to_response() got an unexpected keyword argument 'context_instance'
Die oben gelöst die Problem über mich Ändern der view.py zu:

return render(request, 
'registration/register.html', {'form':form}, 
) 

Antwort

0

Sie müssen context_instance Parameter render_to_response Funktion übergeben:

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

UPDATE:
In neuen Versionen von django verwenden render statt render_to_response, dieses Thema Erhöhung nicht.

+0

Ihr Code hat nicht funktioniert, aber es hat mir zu diesem Beitrag geholfen danke !! : http://stackoverflow.com/questions/38739422/django-error-render-to-response-got-a-unexpected-keyword-argument-context-i In dem es den Fehler gelöst hat, stellen Sie die Lösung als ein Update auf die Frage – jupiar

+0

@jupiar, ich bin froh, dass es dir geholfen hat, ich aktualisiere meine Antwort :) – Mohsen

Verwandte Themen