jquery - 使用 AJAX 时 Django 会话变量不起作用
问题描述
我必须删除一个项目,为此,用户单击页面中的某个“删除”按钮,Javascript 发出 AJAX 请求(包括请求标头中的 CSRF 令牌),以便 Django 视图继续删除. 我的 Django 视图正在正确处理请求并删除该项目。但是,在同样的观点中,我做了以下事情:
- 删除项目
- 在 request.session['message'] 上放一条消息
- 重定向到“列表页面”
“列表页面”视图检查 request.session 中是否有一些“消息”并将其返回到页面以向用户显示一些警报。
但是,在使用 AJAX 时,这种机制不适用于这种情况。这就像“删除”视图会话和“列表页面”会话都不相同,因为它在 request.session 中找不到“消息”。
以下是一些涉及的文件。
urls.py:
...
urlpatterns = [
path('agenda', views.agenda, name='agenda'),
path('<int:reuniao_id>/excluirReuniao', views.excluirReuniao, name='excluirReuniao'),
]
视图.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"))
来自删除页面的 AJAX 请求:
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) {
...
}
});
议程.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 表单完成的,这种机制就可以很好地工作。
解决方案
推荐阅读
- vue.js - Nuxt.js:fsevents 不是构造函数
- batch-file - 如何在批处理文件中执行这一系列命令?
- lazarus - INDY 10 TIdTCPClient.Connect 导致访问冲突
- r - r:R Markdown 不渲染多个绘图
- string - 数据被读取为字符串而不是浮点数
- reactjs - 如何在 React 中调整 img 的大小
- java - Google Cloud App Engine cron 作业 - 不调用服务
- excel - 每次我选择一个新单元格时,Excel都会突出显示活动单元格的行,没有VBA
- arrays - 我怎样才能在 Dart 中做一组地图对象
- android-studio - 模拟器因“连接到服务协议时出错”而失败