• Django 登录页面重定向


    转自:http://blog.chedushi.com/archives/3484

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

    比如用户正在浏览一篇文章,发现下载该文章的附件需要登录才能进行,这时候点击登陆链接转入登陆页面,输入用户名密码登陆成功以后,会自动转回原来的那篇文章所在的页面。(目前很多网站采用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><a href="{{ refresh_url }}">{{ refresh_url }}</a></p>
    <meta http-equiv="refresh" content="2;url={{ refresh_url }}">

    使用@login_required装饰器:

    在settings.py中更改LOGIN_URL = 'xxx',其中xxx是想要的重定向登录路径。

  • 相关阅读:
    Mysql Explain 详解
    linux常用命令笔记
    chrome的全局搜索快捷键
    蒋介石如何能够强大的北洋军阀对战?(北洋军阀一盘散沙,以添油战术应对,所以完全失败;北伐军主次应对得到,后期实力大增)
    千万大军剑拔弩张 1945年的美苏两军谁是霸主?(苏联陆军强大,但国力远远不是美国的对手。微信号:熊熊点兵)
    C/C++语言中闭包的探究及比较
    HTTP RFC7230
    Oracle
    c#与oracle数据库连接池
    net平台下连接池
  • 原文地址:https://www.cnblogs.com/nigang/p/3738795.html
Copyright © 2020-2023  润新知