说明

实现网页登录后跳转应该分为两类:即登录成功后跳转登录失败再次登录成功后跳转。参考网上内容,基本都只实现了第一类。而没有实现第二类。

实现

为了能让登录失败后再次登录成功后还能实现跳转。我这里采用了笨办法, 即:无论登录成功与否,都将跳转链接在前后端进行传递 ,这样跳转链接就不会在登录失败后消失。不多说,上代码

后端 views.py

from django.shortcuts import render, redirect

def login(request):
# 当前端点击登录按钮时,提交数据到后端,进入该POST方法
if request.method == "POST":
# 获取用户名和密码
username = request.POST.get("username")
passwd = request.POST.get("password")
# 在前端传回时也将跳转链接传回来
next_url = request.POST.get("next_url") # 对用户进行验证,假设正确的用户名密码为"aaa", "123"
if username == 'aaa' and passwd == '123':
# 判断用户一开始是不是从login页面进入的
# 如果跳转链接不为空并且跳转页面不是登出页面,则登录成功后跳转,否则直接进入主页
if next_url and next_url != "/logout/":
response = redirect(next_url)
else:
response = redirect("/index/")
return response
# 若用户名或密码失败,则将提示语与跳转链接继续传递到前端
else:
error_msg = "用户名或密码不正确,请重新尝试"
return render(request, "app/login.html", {
'login_error_msg': error_msg,
'next_url': next_url,
})
# 若没有进入post方法,则说明是用户刚进入到登录页面。用户访问链接形如下面这样:
# http://host:port/login/?next=/next_url/
# 拿到跳转链接
next_url = request.GET.get("next", '') # 直接将跳转链接也传递到后端
return render(request, "autotest/login.html", {
'next_url': next_url,
})

前端页面 login.html

   <form action="{% url 'login' %}" method="post">
<h1>请使用xxx登录</h1>
<div>
<input id="user" type="text" class="form-control" name="username" placeholder="账户" required="" />
</div>
<div>
<input id="pwd" type="password" class="form-control" name="password" placeholder="密码" required="" />
</div>
// 注意这里多了一个input。它用来保存跳转链接,以便每次点击登录按钮时将跳转链接传递回后端
// 通过display:none属性将该input元素隐藏起来
<div style="display: none;">
<input id="next" type="text" name="next_url" value="{{ next_url }}" />
</div>
// 判断是否有错误提示,若有则显示
{% if login_error_msg %}
<div id="error-msg">
<span style="color: rgba(255,53,49,0.8); font-family: cursive;">{{ login_error_msg }}</span>
</div>
{% endif %}
<div>
<button type="submit" class="btn btn-default" style="float: initial; margin-right: 60px">登录</button>
</div>
</form>

总结

其实这种实现方式就是让跳转链接在前后端交互中不损失掉。当然也可以在前端不用form元素,直接用ajax的post形式,然后让跳转在前端的ajax逻辑中执行。

Django 实现登录后跳转的更多相关文章

  1. 关于WordPress登录后跳转到指定页面

    前面在写模版的时候,有朋友要求网站登录后要跳转的到指定的页面.这个从前还真没遇到过.于是就用万能的搜索(很少百度)找了下,方法基本上就是一个,代码如下: <?php    // Fields f ...

  2. wordpress注册、登录后跳转到首页

    只想注册后跳转到首页 function new_login_redirect() { return '这里换成首页地址'; } add_action( 'user_register', 'auto_l ...

  3. yii中登录后跳转回登录前请求的页面

    当我们请求一个经过权限控制的请求不通过时,会跳转到一个地方请求权限,请求结束后需要跳转回之前的页面.比如我们请求一个需要登录的action,会被跳转到login页面,我们希望登录成功后跳转到我们之前希 ...

  4. vue实现登录后跳转到之前的页面

    在开发中我们经常遇到这样的需求,需要用户直接点击一个链接进入到一个页面,用户点击后链接后会触发401拦截返回登录界面,登录后又跳转到链接的页面而不是首页,这种问题该如何去做呢? 先说一下我们需要用到的 ...

  5. Laravel 登录后跳转回登录前浏览的页面

    一.经过 Auth 中间件检查后跳转至登录页面 也就是没有通过 auth 中间件的认证检查,被 auth 中间件拦截后跳转至登录页面.这种情况下,Laravel 默认会在用户登录成功后自动跳转回登录前 ...

  6. rails登录后跳转到登录前的路径

    # 重定向到存储的地址或默认地址 def redirect_back_or(default) redirect_to(session[:forwarding_url] || default) sess ...

  7. javaweb-实现不同用户登录后跳转到不同界面

    今天下午,实现了公文流转系统的一小部分——登录界面验证不同用户跳转到不同界面 Dao package com.office.Dao; import java.sql.Connection; impor ...

  8. flutter 登录后跳转到根路由

    flutter 登录以后  会有返回箭头显示 因为  路由的切换导致不是路由的第一个页面,解决办法清空路由. Navigator.of(context).pushAndRemoveUntil( new ...

  9. laravel 登录后跳转原来浏览的页面

    方法 1.修改一下文件/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php 修改内容如下: 没有的加入 ...

随机推荐

  1. Comet OJ - Contest #2 (D 错综的光影所迷惑的思念是) 容斥计数

    题意:给定一颗 $n$ 个节点的树,定义 $dis(x,y)$ 为树上点 $x$ 到 $y$ 的路径经过的边数. 定义一个点集 $S$ 的 $f(S)$ 为 $f(S)=max\left \{dis( ...

  2. docker 1.12

    curl https://releases.rancher.com/install-docker/1.12.sh | sh http://rancher.com/docs/rancher/v1.6/e ...

  3. 第2组 Alpha冲刺(4/4)

    队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:了解整个游戏的流程 GitHub签入记录 接下来的计划:继续完成游戏 还剩下哪些任务:完成游戏 燃尽图 遇到的困难:没有美术比较好的 ...

  4. jmeter如何使用正则表达式,如何提取token等想要的数据

    使用正则表达式,提取你想要的任何数据, 例如要提取响应结果里的token字段及sex字段(响应内容为: "token":"83EEAA887F1D2F1AA1CDA9E1 ...

  5. 在AspNetCore3.0中使用Autofac

    1. 引入Nuget包 Autofac Autofac.Extensions.DependencyInjection 2. 修改Program.cs 将默认ServiceProviderFactory ...

  6. Codeforces 812E Sagheer and Apple Tree ——(阶梯博弈)

    之前在bc上做过一道类似的阶梯博弈的题目,那题是移动到根,这题是移动到叶子.换汤不换药,只要和终态不同奇偶的那些位置做nim即可.因此这题给出了一个条件:所有叶子深度的奇偶性相同.同时需要注意的是,上 ...

  7. static关键字的用法小结

    static:是一个修饰符,用于修饰成员(成员变量,成员函数). 当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,写法:类名.静态成员 static特点: 1.随着 ...

  8. ZR#956 集合

    ZR#956 集合 解法: 维护一个异或操作的懒标记,并对应的处理插入.删除和异或操作.接下来考虑如何整体加一. 考虑一个数字 $ x $ 变为 $ (x+1) \pmod {2^{30}} $ 的过 ...

  9. Linux设备驱动程序 之 中断下半部

    中断处理程序的局限 1. 中断处理程序以异步的方式执行,并且它有可能会打断其他重要代码的执行,因此,为了避免被打段的代码停止时间过长,中断处理程序应该执行的越快越好: 2. 如果当前有一个中断处理程序 ...

  10. 三、Navicat将远程MySql数据库数据导入本地

    1.安装本地的MySql.记住用户名和密码,这里以root,root为例. 2.打开Navicat,新建连接(连接),输入连接名,用户名,密码.确定,连接测试.这里连接名为luzhanshi.这样本地 ...