zoukankan      html  css  js  c++  java
  • Django 跳转和重定向

    Django 跳转和重定向的方法:

    跳转和重定向很常见的场景就是登录和注销后返回到当前页面。给你个登录和注销的例子。

    比如用户正在浏览一篇文章,发现下载该文章的附件需要登录才能进行,这时候点击登陆链接转入登陆页面,输入用户名密码登陆成功以后,会自动转回原来的那篇文章所在的页面。(目前很多网站采用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 }}">
  • 相关阅读:
    webapi 中使用 protobuf
    apache httpclient cache 实现可缓存的http客户端
    编译nginx时提示undefined reference to 'pcre_free_study' 的问题及解决
    深入理解JVM内存回收机制(不包含垃圾收集器)
    从JDK源码理解java引用
    Buffer的创建及使用源码分析——ByteBuffer为例
    二叉树的子结构、深度以及重建二叉树
    数据结构——树与二叉树的遍历
    Java NIO之Buffer的使用
    Java多线程之synchronized详解
  • 原文地址:https://www.cnblogs.com/yuyezhulan/p/3991835.html
Copyright © 2011-2022 走看看