说明

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

实现

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

后端 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. 牛客练习赛53 (E 老瞎眼 pk 小鲜肉) 线段树+离线

    考试的时候切的,类似HH的项链~ code: #include <bits/stdc++.h> #define ll long long #define M 500003 #define ...

  2. Bzoj 3631: [JLOI2014]松鼠的新家(树链剖分+线段树)

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个 ...

  3. windows游戏编程键盘

    键盘 首先我们来看一下键盘常用消息 键盘的消息处理过程 键盘消息会有击键消息和字符消息 键盘消息的附加参数 wParam:非系统键的虚拟码 lParam: windows常用虚拟键码及对应的按键

  4. AE开发之shp转txt

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 2016百度之星资格赛 Problem B(大数+组合数)

    题意:度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列.最多200个1. 比如 ...

  6. idea 2018注册码(激活码)

    最近做一个项目,用idea 社区版的   但是缺少了好多功能 无奈只能用专业版的,但是需要注册激活  下面是我的注册方法 1.打开了idea  会提示让激活  选择Licensse server 2. ...

  7. CentOS 安装 docker-compose 加速

    sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$( ...

  8. Linux rpm 安装MySQL

    1 检查是否存在旧版本mysql (1) mysql 执行命令:rpm -qa|grep mysql,若存在旧mysql,删除查询到的旧mysql,执行: rpm -e --nodeps XXXX  ...

  9. PHP魔术方法和魔法变量详解

    一.魔术常量 __LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名. 自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对 ...

  10. leetcode 96. Unique Binary Search Trees 、95. Unique Binary Search Trees II 、241. Different Ways to Add Parentheses

    96. Unique Binary Search Trees https://www.cnblogs.com/grandyang/p/4299608.html 3由dp[1]*dp[1].dp[0]* ...