2013-08-26 6 views
0

У меня есть код, ошибка CSRF verfication не выполнена, запрос отменен. В форме:Ошибка проверки CSRF. Запрос прерван

<form method="POST" action="/jobb/" class="form-horizontal" id="jobform" name="jform" enctype="multipart/form-data" >{% csrf_token %} 

В views.py

@csrf_exempt 
def jobform(request): 
    if request.method == 'POST': 
     getintable = job(app_id = request.POST['jobid'],start_on = request.POST['starton'], end_on = request.POST['endon'],timeframe = request.POST['timeframe'],odeskid = request.POST['odeskid'],hourlyrate = request.POST['hourlyrate'],assigne = request.POST['assigne'],clientid = request.POST['clientid']) 
     getintable.save() 
     return render_to_response('jobsform.html') 
    else: 
     return render_to_response('interviewform.html') 
+0

Вы добавили '' django.middleware.csrf.CsrfViewMiddleware' в 'MIDDLEWARE_CLASSES' вашего' settings.py' тоже? –

+0

Да Я добавляю 'django.middleware.csrf.CsrfViewMiddleware' в settings.py –

+0

Установили ли вы 'true'' CSRF_COOKIE_SECURE' или 'SESSION_COOKIE_SECURE' в settings.py, и вы работаете без' https'? – danihp

ответ

1

Вы получаете эту ошибку, потому что вы не возвращаете RequestContext экземпляра. Чтобы исправить это, вы можете использовать render shortcut, как предполагал Сухайл; или вы можете передать в контексте запроса в качестве третьего аргумента render_to_response.

Кроме того, вы действительно должны использовать ModelForm, которые автоматизируют множество шаблонных кодов, которые будут писать.

Вот как ваш код будет выглядеть следующим образом:

Вы бы поместить этот код в файл с именем forms.py, который находится в том же каталоге, views.py:

from myapp.models import Job 

class JobForm(forms.ModelForm): 
    class Meta: 
     model = Job 

В вашем views.py, вы можете выполните следующие действия:

from django.shortcuts import render, redirect 

from myapp.forms import JobForm 

def jobform(request): 
    ctx = {'form': JobForm(request.POST or {})} 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() 
      return redirect('/some/url') 
     else: 
      return render(request, 'interviewform.html', ctx) 
    else: 
     return render(request, 'interviewform.html', ctx) 

В interviewform.html:

<form method="POST" 
     class="form-horizontal" 
     id="jobform" name="jform" enctype="multipart/form-data"> 
     {% csrf_token %} 
     {{ form }} 
     <button type="submit" class="btn btn-primary"></button> 
</form> 
0

попробуйте использовать визуализации, вам не нужно даже csrf_exempt декоратора. синк вы добавили CSRF маркера в шаблоне ({% csrf_token %}):

from django.shortcuts import render 

def jobform(request): 
    if request.method == 'POST': 
     getintable = job(app_id = request.POST['jobid'],start_on = request.POST['starton'], end_on = request.POST['endon'],timeframe = request.POST['timeframe'],odeskid = request.POST['odeskid'],hourlyrate = request.POST['hourlyrate'],assigne = request.POST['assigne'],clientid = request.POST['clientid']) 
     getintable.save() 
     return render(request,'jobsform.html')   
    return render(request,'interviewform.html') 
+0

может быть OP действительно нуждается в '@ csrf_exempt' для этой функции. Я тоже был удивлен и собирался предложить '@ csrf_protect';) Так что может быть токеном csrf_token в форме тоже не требуется –

+0

@FoxMaSk, если он добавляет' @ csrf_exempt', тогда ему не нужно было передавать '{% csrf_token %} 'в шаблонах. more over render_to_response - это старая версия, которая требует контекста 'context_instance = RequestContext (request))'. – suhailvs

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