微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 AJAX 时 Django 会话变量不起作用

如何解决使用 AJAX 时 Django 会话变量不起作用

我必须删除一个项目,为此,用户单击页面中的某些“删除”按钮,Javascript 发出 AJAX 请求(包括请求标头中的 CSRF 令牌),以便 Django 视图继续随着删除。我的 Django 视图正在正确处理请求并删除该项目。但是,在同一视图中,我执行以下操作:

  1. 删除项目
  2. 在 request.session['message'] 上放置一条消息
  3. 重定向到“列表页面”

列表页面”视图检查 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"))

来自删除页面的 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) {
        ...
    }
});

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 举报,一经查实,本站将立刻删除。