如何解决使用 AJAX 时 Django 会话变量不起作用
我必须删除一个项目,为此,用户单击页面中的某些“删除”按钮,Javascript 发出 AJAX 请求(包括请求标头中的 CSRF 令牌),以便 Django 视图继续随着删除。我的 Django 视图正在正确处理请求并删除该项目。但是,在同一视图中,我执行以下操作:
“列表页面”视图检查 request.session 中是否有一些“消息”,并将其返回到页面以在一些警报中显示给用户。
但是,当使用 AJAX 时,这种机制不适用于这种情况。就像'delete' view session和'list page' session都不一样,因为在request.session中没有找到'message'。
这里是一些涉及的文件。
urls.py:
...
urlpatterns = [
path('agenda',views.agenda,name='agenda'),path('<int:reuniao_id>/excluirReuniao',views.excluirReuniao,name='excluirReuniao'),]
views.py:
def agenda(request):
reunioes = ReuniaoEmpresa.objects.all()
if 'message' in request.session:
message= request.session['message']
del request.session['message']
else:
message= ''
context = {
'reunioes' : reunioes,'message' : message
}
return render(request,'agenda/agenda.html',context)
def excluirReuniao(request,reuniao_id):
reuniao = get_object_or_404(ReuniaoEmpresa,pk=reuniao_id)
reuniao.delete()
request.session['message'] = 'Reunião excluída com sucesso!'
return redirect(reverse("agenda:agenda"))
let token = '{{csrf_token}}';
$.ajax({
type: 'POST',headers: { "X-CSrftoken": token },url: "{% url 'agenda:excluirReuniao' idReuniao %}",timeout: 7200000,success: function (xhr,textStatus) {
...
},error: function (xhr,textStatus,errorThrown) {
...
}
});
agenda.html:
<html>
... (all the HTML stuff)
</html>
<script>
var message= "{{message}}"; // gets the message from the context
$(document).ready(function () {
// uses jquery-confirm to show the message to the user as an alert
if (message!= '') {
$.alert({
title: 'Concluído',content: message,type: 'green'
});
}
});
</script>
例如,如果第一次调用不是使用 AJAX 而是通过 POST 表单完成,则此机制运行良好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。