登陆和注销操作在网页编程上很常见,这两个操作经常需要在操作成功以后转入发出请求的页面。

比如用户正在浏览一篇文章,发现下载该文章的附件需要登录才能进行,这时候点击登陆链接转入登陆页面,输入用户名密码登陆成功以后,会自动转回原来的那篇文章所在的页面。(目前很多网站采用ajax方法弹出对话框登陆,效果更好一些)

怎么做呢?下面说的是django的实现,但是大多数的web framework都可以这么做。

注销操作
因为不需要单独的注销页面,相对简单,利用HTTP_REFERER,Django的注销页面这样写就行:

def logout_user(request):
    logout(request)
    return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))

登录操作
登陆操作相对复杂,因为一般都有单独的登陆页面,如果登陆成功再取HTTP_REFERER就是登陆页面自己的url,而不是之前的那个页面。

可以利用django的session,在转入登陆的时候,用的是页面的get请求,这时候在session中记录HTTP_REFERER,用户输入用户名密码进行登陆的时候(Post请求),从session中取出即可:

def login_user(request):
    if request.method == 'GET':
        #记住来源的url,如果没有则设置为首页('/')
        request.session['login_from'] = request.META.get('HTTP_REFERER', '/')
        #TODO:显示登陆页面,blablabla
    elif request.method == 'POST':
        #TODO: 用户登录操作,blablabla
        #重定向到来源的url
        return HttpResponseRedirect(request.session['login_from'])

最后的重定向,有时候需要用户感觉到被重定向回去了,就写个简单的页面告诉用户两秒以后跳转,然后改改相应的login代码就行:

<p>两秒钟后转入如下链接,如果长时间没有响应请直接点击:</p>
<p><a href="{{ refresh_url }}">{{ refresh_url }}</a></p>
<meta http-equiv="refresh" content="2;url={{ refresh_url }}">

Django登陆以后重定向到请求登陆的页面的更多相关文章

  1. Django中间件 及 form 实现用户登陆

    Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误 ...

  2. 如何批量的在django中对url进行用户登陆限制

    参考URL: https://blog.csdn.net/hanshengzhao/article/details/79540306?utm_source=blogxgwz0 1,首先定义一个内部有装 ...

  3. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

  4. web初学之重定向与请求转发

    重定向与请求转发的问题 (1)RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法. (2 ...

  5. 命令行登陆Oracle(包括远程登陆)

    本方法适用于在cmd命令行窗口以及pl/sql登陆Oracle下登录本机或者远程Oracle. 1.首先保证在当前主机上设置了ORACLE_HOME环境变量:     例如:ORACLE_HOME=D ...

  6. 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别

      请求转发:MVC设计模式.细节.请求域属性的编程实例.请求重定向和请求转发的区别 MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层) ...

  7. 深入浅出Java 重定向和请求转发的区别

    深入浅出Java 重定向和请求转发的区别 <span style="font-family:FangSong_GB2312;font-size:18px;">impor ...

  8. ubuntu登陆后一闪回到登陆界面

    ubuntu登陆后一闪回到登陆界面   最后发现居然是我的环境变量配置问题........   解决方法:   先CTRL+ALT+F1   root进去, 查看nickleo用户为什么登录失败 ca ...

  9. Servlet交互【重定向 与 请求分派】详解

    Servlet交互 在serlvet中,需要调用另外一个资源来对浏览器的请求进行响应,两种方式实现: 调用HttpServletResponse.sendRedirect 方法实现 重定向 调用Req ...

随机推荐

  1. POJ - 3080 Blue Jeans 【KMP+暴力】(最大公共字串)

    <题目链接> 题目大意: 就是求k个长度为60的字符串的最长连续公共子串,2<=k<=10 限制条件: 1.  最长公共串长度小于3输出   no significant co ...

  2. LoRaWAN 1.1 网络协议规范 - 4 MAC 帧格式 Part II

    LoRaWAN 1.1 网络协议规范 LoRaWAN 1.1 版本封稿很久了也没有完整啃过一遍,最近边啃边翻译,趁着这个机会把它码下来. 如果觉得哪里有问题,欢迎留言斧正. 翻译不易,转载请申明出处和 ...

  3. 查找最大或最小的 N 个元素

    使用内置的heapd模块 In [1]: import heapq In [2]: nums = [1,8, 2, 23, 7, -4, 18, 23, 42, 37, 2] In [3]: prin ...

  4. grpc 使用总结

    1.grpc支持多种语言,需要根据pb文件创建出相应java文件. 2.构建服务端. 3.构建客户端. 4.grpc对象基于创建者模式.

  5. 服务器被ddos攻击?分析如何防止DDOS攻击?

    上周知名博主阮一峰的博客被DDOS攻击,导致网站无法访问而被迫迁移服务器的事情,引起了广大网友的关注及愤慨,包括小编的个人博客也曾接受过DDOS的“洗礼”,对此感同身受.所以,本文我们一起来了解下DD ...

  6. spring cloud——feign为GET请求时的对象参数传递

    一.问题重现 楼主在使用feign进行声明式服务调用的时候发现,当GET请求为多参数时,为方便改用DTO对象进行参数传递.但是,在接口调用时feign会抛出一个405的请求方式错误: {"t ...

  7. 集合(2)—Collection之List的使用方法

    声明集合变量 List list = new ArrayList(); 或者 : public LIst list: public 构造函数(){ this.list = new ArrayList( ...

  8. CSS属性级Hack

     CSS属性级Hack    color:red; /* 所有浏览器可识别*/   _color:red; /* 仅IE6 识别 */   *color:red; /* IE6.IE7 识别 */   ...

  9. apache 通过ajp访问tomcat多个站点

    copy mod_jk.so to modules下 httpd的配置项中添加如下内容 LoadModule proxy_module modules/mod_proxy.so LoadModule ...

  10. android: 在android studio中使用retrolambda的步骤

    找了各种说明,包括retrolambda官方文档都没有试成功 最后在这个链接中找到答案:http://blog.csdn.net/qq_26819733/article/details/5222565 ...