【问题标题】:How to return ajax response as well as redirection in the views.py Django如何在views.py Django中返回ajax响应以及重定向
【发布时间】: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 中的另一个页面? 谢谢。

【问题讨论】:

    标签: python django ajax django-models django-views


    【解决方案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 更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多