2017-02-01 16 views
2

views.pyCSRF токен отсутствует или неправильно в Джанго

from django.shortcuts import render 
from django.contrib.auth.decorators import login_required 
from django.http import HttpResponse 
import MySQLdb 
from django.shortcuts import render_to_response 
from django.shortcuts import HttpResponseRedirect 
from django.template.loader import get_template 
from django.template import Context, Template,RequestContext 
import datetime 
import hashlib 
from random import randint 
import random 
from django.views.decorators.csrf import csrf_protect, csrf_exempt 
from django.template.context_processors import csrf 
import requests 
from django.template import RequestContext 
from log.forms import * 

@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(
    'register.html', 
    variables, 
    ) 
    # return render(request,"recharge.html") 
def register_success(request): 
    return render_to_response(
    'registration/success.html', 
    ) 
base.html 
<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> 

register.html

<!-- register.html --> 
{% extends "base.html" %} 
{% block title %}User Registration{% endblock %} 
{% block head %}User Registration{% endblock %} 
{% block content %} 
    <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 %} 

settings.py

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'templates')], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

Моя версия Джанго: 1.10.4

Как я могу решить эту проблему?

+0

можно отправить или проверить HTML? –

+0

визуализированный HTML означает, что вы хотите зарегистрировать html? –

+0

да пожалуйста .. так что мы можем помочь u на нем –

ответ

5

вызова render_to_response как это:

from django.template import RequestContext 

@csrf_protect 
def register(request): 
    # ... 

    return render_to_response(
     'register.html', 
     {'form': form}, 
     RequestContext(request) 
    ) 

или просто использовать метод визуализации ярлык

@csrf_protect 
def register(request): 
    # ... 
    return render(request, 'register.html', {'form': form}) 

от 1.8 docs:

визуализации() такая же, как вызов render_to_response() с аргументом context_instance tha t заставляет использовать RequestContext.

+0

мы можем удалить csrf_protect, поскольку Django по умолчанию проверяет csrf_token для почтовых запросов. – MicroPyramid

+0

Я пробовал, но он не работает на меня –

+0

Вы пытались использовать метод 'render', а не' render_to_response'? часть 2 моего ответа? – mislavcimpersak

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