如何在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?