如何在Django登录视图中获取next参数
如何在登录视图中获取
next参数 自定义登录视图的处理方式
next参数通过GET请求传递到登录页面,你可以直接从request.GET中提取:
# 导入安全校验函数(必须校验,防止恶意跳转) from django.utils.http import is_safe_url def your_login_view(request): if request.method == 'POST': # 编写登录验证逻辑(用户名密码校验、用户认证) user = authenticate(request, username=request.POST['username'], password=request.POST['password']) if user is not None: login(request, user) # 获取next参数 next_url = request.GET.get('next') # 安全校验:确保跳转地址是本站内的合法地址 if next_url and is_safe_url(next_url, allowed_hosts=request.get_host()): return redirect(next_url) # next参数无效或不存在时,跳转到默认页面(比如首页) return redirect('main:home') # GET请求渲染登录页面时,把next参数传给模板,方便表单提交时携带 next_url = request.GET.get('next') return render(request, 'accounts/login.html', {'next': next_url})
如果登录表单是POST提交,需要在模板里把next参数作为隐藏字段带上,确保登录成功后能正确跳转:
<form method="post" action="{% url 'accounts:login' %}"> {% csrf_token %} <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <!-- 传递next参数 --> <input type="hidden" name="next" value="{{ next }}"> <button type="submit">登录</button> </form>
使用Django自带登录视图的处理方式
如果用Django内置的LoginView类视图,它已经内置了next参数的处理逻辑,只需在登录模板中添加隐藏字段传递request.GET.next的值:
<form method="post"> {% csrf_token %} {{ form.as_p }} <input type="hidden" name="next" value="{{ request.GET.next }}"> <button type="submit">登录</button> </form>
登录成功后,Django会自动跳转到next指定的地址;若next不存在,则跳转到settings.LOGIN_REDIRECT_URL配置的页面。
内容的提问来源于stack exchange,提问作者Matias Pizzi
相关产品推荐
相关产品推荐

