如何在views.py Django中返回ajax响应以及重定向

Posted

技术标签:

【中文标题】如何在views.py Django中返回ajax响应以及重定向【英文标题】:How to return ajax response as well as redirection in the views.py Django 【发布时间】:2021-12-25 21:17:13 【问题描述】:

我试图在成功登录时响应 ajax,但另一方面,我想根据用户配置文件进行检查,它将重定向到配置文件。

以下是我在views.py中的功能

@csrf_exempt
def login_view(request):
    next = request.GET.get('next')
    email = request.POST.get("email")
    password = request.POST.get("password")
    user = authenticate(username=email, password=password)
    if user is not None and user.is_active:
        login(request,user)
        if user.is_male:
            return redirect('/male_profile')
        elif user.is_female:
            return redirect('/female_profile')
        elif user.is_other:
            return redirect('/other_profile')
        data_json = "error" : False, "errorMessage" : "Login Successful!"
        return JsonResponse(data_json, safe=False)
    else:
        data_json="error":True,"errorMessage":"Username or password is incorrect!"
        return JsonResponse(data_json,safe=False)

我面临的问题是它只返回 Ajax 响应或重定向到基于用户的配置文件.. 但不能同时返回。谁能帮我解决我如何首先将响应发送到 ajax,然后根据用户配置文件将其重定向到 views.py 中的另一个页面? 谢谢。

【问题讨论】:

【参考方案1】:

在这里您返回 JSON 响应,因此您无法重定向,但可以按如下方式完成:

@csrf_exempt
def login_view(request):
    next = request.GET.get('next')
    email = request.POST.get("email")
    password = request.POST.get("password")
    user = authenticate(username=email, password=password)
    if user is not None and user.is_active:
        login(request,user)
        if user.is_male:
            redirect = 'male_profile'
        elif user.is_female:
             redirect = 'female_profile'
        elif user.is_other:
             redirect = 'other_profile'
        data_json = "error" : False, "errorMessage" : "Login Successful!",
                      "redirect": redirect
        return JsonResponse(data_json, safe=False)
    else:
        data_json="error":True,"errorMessage":"Username or password is incorrect!"
        return JsonResponse(data_json,safe=False)

在响应中的 html(在客户端)中,响应中的成功检查重定向键和 进行重定向 响应成功条件添加

if (response.redirect)
location.href = response.redirect;

【讨论】:

哇!非常感谢你!它按预期工作。只是想确认在实时网站中实施此流程是否安全? 发送 csrf_token 比发送 @csrf_exempt 更好 docs.djangoproject.com/en/3.2/ref/csrf/#ajax 这会有所帮助

以上是关于如何在views.py Django中返回ajax响应以及重定向的主要内容,如果未能解决你的问题,请参考以下文章

从 django views.py 获取数据并使用 ajax 显示它

如何通过 Ajax jQuery 将简单数据发送到 Django 中的views.py?

Django如何通过单击带有变量的提交按钮从ajax调用views.py中的函数

在 Django 中使用 AJAX 更新数据库

如何通过 ajax 将值从 django 模板发送到视图?

如何从我的 html 表单获取 post id 到 views.py