【发布时间】:2016-05-12 06:15:23
【问题描述】:
我知道这个问题问了很多次。
我的 CSRF 令牌工作正常。但现在它给出了错误:
Forbidden (403) CSRF verification failed. Request aborted 2
我尝试了很多方法,例如删除 cookie、历史记录和更改表单操作中的完整网址,但没有任何效果。
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"> </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"> </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)
使用 get 方法或第一次运行时可以正常工作。
但是当我们尝试使用 POST 方法时,它会报错。
【问题讨论】:
-
每次都需要更新csrf token:
update(csrf(request)。 -
我应该将此行与 get 或其他任何地方的渲染放在哪里
-
每次渲染新模板时都需要更新token,所以在GET部分。
-
我没有get方法的表单
-
抱歉尝试将其添加到您的帖子中,例如 context_dict.update(csrf(request))