Reputation: 51
ERROR:
Reason given for failure: CSRF cookie not set.
In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure: Your browser is accepting cookies. The view function uses RequestContext for the template, instead of Context. In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data. You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed. You can customize this page using the CSRF_FAILURE_VIEW setting.
Did everything that I could find, nothing helped, must be something really foolish((
My template
<form method="POST">{% csrf_token %}
{% for field in form %}
<div class="control-group">
{{ field }}
</div>
{% endfor %}
<input type="Submit" id="fsubmit" class="btn btn-primary btn-large btn-block" value='Register'/>
</form>
my Views.py
from django.shortcuts import render_to_response
from django.template import RequestContext
def register_user(request):
context = {}
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
pass
else:
form = RegisterForm(auto_id=False)
context['form'] = form
return render_to_response('templates/register.htm',context, context_instance=RequestContext(request))
Settings
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Upvotes: 5
Views: 9221
Reputation: 144
Use csrf_exempt to avoid csrf token.
In view
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def register_user(request):
context = {}
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
pass
else:
form = RegisterForm(auto_id=False)
context['form'] = form
return render_to_response('templates/register.htm',context, context_instance=RequestContext(request))
Upvotes: 2