zoukankan      html  css  js  c++  java
  • 装饰器结合cookie

    用户如果在没有登陆的情况下想访问一个需要登陆的页面
    那么先跳转到登陆页面,在地址栏当中next的后面将会有访问的地址
    通过get_full_path获取路径参数,存放在target当中
    
    通过装饰器,获取到next后面的路径,因为没有获取到cookie,那么将会重定向到需要访问的页面,地址栏当中(next后)携带着访问的地址,传递给login页面,提交POST请求
    当用户输入正确的用户名和密码之后,会对页面添加一个cookie,当跳转到装饰器当中
    发现获取到了cookie,所以不会重定向到登录界面,直接访问到页面
    
    应该跳转到用户之前想要访问的页面去 而不是直接写死
    
    #装饰器
    def login_auth(func):
        def inner(request,*args,**kwargs):
            # print(request.path_info)
            # print(request.get_full_path())  # 能够获取到用户上一次想要访问的url
            target_url = request.get_full_path()
            if request.COOKIES.get('username'): # 获取到cookie当中的内容
                return func(request,*args,**kwargs)
            else:
                return redirect('/login/?next=%s'%target_url)
        return inner
    
    # 登录函数,主要是用来验证POST请求
    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            if username == 'jason' and password == '123':
                # 获取用户上一次想要访问的url
                target_url = request.GET.get('next')  # 这个结果可能是None
                if target_url:
                    # 通过一个函数保存数据对象,如果有值将重定向到target_url页面
                    obj = redirect(target_url)
                else:
                    # 保存用户登陆状态
                    obj = redirect('/home/')
                # 让浏览器记录cookie数据
                obj.set_cookie('username', 'jason666')
                """
                浏览器不单单会帮你存
                而且后面每次访问你的时候还会带着它过来
                """
                # 跳转到一个需要用户登陆之后才能看的页面
                # 这里是相当于用户先用obj接收,接收完成后再返回出去,
                # 这里相当于是return redirect(target_url)
                return obj
        return render(request,'login.html')
    
    # 需要访问的页面
    @login_auth
    def home(request):
        return HttpResponse("我是home页面,只有登陆的用户才能进来哟~")
    
  • 相关阅读:
    前端分布引导插件IntroJs的使用
    分步引导中,Js操作Cookie,实现判断用户是否第一次登陆网站
    android 5.0新特性CardView教程
    Android使用NumberPicker控件实现选择城市,生日
    程控交换机是什么东东!
    sip消息 响应状态码解析大全
    测试人员必看的经典书籍
    mysql创造并使用它
    linux系统备份与还原
    BNF范式(巴科斯范式)简介
  • 原文地址:https://www.cnblogs.com/Ailewent/p/14260236.html
Copyright © 2011-2022 走看看