2016-02-03 6 views
0

Я знаю Этот вопрос задал много раз.Запрещено (403) Не удалось выполнить проверку CSRF. Запрос прерван 2 в django 1.8.5

Мой токен CSRF работал нормально. но теперь он дает ошибку:

Forbidden (403) CSRF verification failed. Request aborted 2 

Я стараюсь много вещей, как удаление куки, историю и изменения полного URL в форме действия, но ничего не работа.

HTML форма

<form method="POST" action="/daily_sale/"> 
         {% csrf_token %} 
         <div class="panel-heading"> 

          <button class="btn btn-primary pull-right">Search</button> 
          <span class="pull-right">&nbsp;</span> 
          <span class="form-group pull-left"> 
           <input type="text" class="form-control" name="start" placeholder="Start Date" value = "{{start_date}}"> 
          </span> 
          <span class="pull-right">&nbsp;</span> 
          <span class="form-group pull-right"> 
           <input type="text" class="form-control" name="end" placeholder="End Date" value="{{end_date}}"> 
          </span> 
         </div> 
        </form> 

Я также попробовать с изменением действия в form tag

action="http://localhost:9002/daily_sale/" 

view.py

from django.shortcuts import render , redirect 


@login_required(login_url='/login_form/') 
def dailySale(request): 
user_id = request.user.id 

reports = Reports() 

if request.method == 'GET': 
    # do some thing 

if request.method == 'POST': 
    print "inside post method" 
    start_date = request.POST.get('start') 
    end_date = request.POST.get('end') 
    print "start = ", start_date,"\n end = ",end_date 
    year = request.POST.get('year') 
    month = request.POST.get('month') 
    sale = reports.getSaleData(start_date,end_date,user_id) 
    day = sale[0] 
    sale_value = sale[1] 
    sale_qty = sale[2] 
    sale_data = zip(day, sale_value, sale_qty) 

    sal = reports.get_sale_wise_channel(start_date,end_date,user_id) 
    channel = sal[0] 
    brand = sal[1] 
    category = sal[2] 
    selling_price = sal[3] 
    quantity_sold = sal[4] 
    percentage = sal[5] 

    returns = reports.getReturns(start_date,end_date,user_id) 
    order_item_ids = returns[1] 
    order_date = returns[0] 
    channel = returns[2] 
    sku = returns[3] 
    return_data = zip(order_item_ids, order_date, channel,sku) 
    sal_data = zip(channel,brand,category,selling_price,quantity_sold,percentage) 



    context_dict = {'sale_data':sale_data, 
        'sal_data':sal_data,       
        'start_date':start_date, 
        'end_date':end_date, 
        'month':month, 
        'year':year} 
    return render(request, 'daily_sale.html', context_dict) 

Its работает отлично с методом GET или первый раз, когда он запускается.

Но когда мы пытаемся использовать метод POST, он дает ошибку.

+0

Необходимо обновить токен csrf каждый раз: 'update (csrf (request)'. – qliq

+0

Где я должен поместить эту строку с помощью рендеринга get или где-либо еще –

+0

Вам нужно обновить токен каждый раз, когда будет создан новый шаблон, так что в GET. – qliq

ответ

1

Чтобы решить (403) CSRF verification ошибки, вам нужно обновить CSRF затяжки в контексте запроса каждый раз, когда вы оказываете форму:

Так добавить их к своей как GET и POST методе

context_dict.update(csrf(request)) 

И не забудьте импортировать CSRF в верхней части ваших просмотров:

from django.views.decorators.csrf import csrf_protect 

Если у вас есть проблемы в обработке формы, рассмотреть возможность использования ModelForms который рекомендуется и более надежный способ обработки форм в django.

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