• 向后台提交数据:利用cookie加session提交更多数据,


    个人逻辑,可能考虑不全面,各位看到后留言,我修改啊

    实现效果:浏览器第一次访问提交用户名,后台验证通过,生成随机字符串,和用户名组成字典,保存到服务器,把随机字符串设置成cookie发给浏览器,同一个浏览器第二次来访问这个服务器上的其他页面时候,获取携带的cookie的随机字符串判断在字典,把用户信息前台展示否则跳到其他页面或提示浏览器cookie没设置

    代码如下:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    import  tornado.web
    import tornado.ioloop
    dic = {}
    class LoginHandler(tornado.web.RequestHandler):
        # 如果前台提交的用户是对的,生成随机字符串,根据随机字符串构建空字典,让随机字符串做key,用户信息做新字典的信息。最后把随机字符串给cookie返回给浏览器
        # 如果用户不对,提示验证不通过
    
        def get(self, *args, **kwargs):
            if self.get_argument('u') in ['zhangsan','lisi']:
                #根据不同的时间利用md5生成不同的字符串
                import hashlib
                import time
                obj = hashlib.md5()
                obj.update(bytes(str(time.time()),encoding='utf-8'))
                random_str = obj.hexdigest()
                #根据随机字符串构建空字典,让随机字符串做key,用户信息做新字典的信息
                dic[random_str] = {}
                dic[random_str]['is_login'] = True
                dic[random_str]['user'] = self.get_argument('u')
                # print(dic)
                #随机字符串设置到浏览器里,供下载浏览器访问其他页面携带
                self.set_cookie('cookie',random_str)
    
            else:
                # 如果用户不对提示验证不通过
                self.write('验证不通过')
    
    class ManagerHandler(tornado.web.RequestHandler):
        # 获取浏览器携带的cookie的value,看携带的这个value即随机字符串是否在字典dic,要是在,并且is_login的value是True,前端显示用户名,否则跳到login页面
        def get(self, *args, **kwargs):
            # 获取浏览器携带的cookie的value
            cc = self.get_cookie('cookie')
            #看携带的这个value即随机字符串是否在字典dic,要是在,并且is_login的value是True,前端显示用户名,否则跳到login页面
            print(cc)
            new_random = dic.get(cc,None)
            print(new_random)
            if not new_random:
                self.redirect('/login')
            else:
               if new_random['is_login']:
                    self.write(new_random['user'])
               # else:
               #     self.redirect('/login')
    setting = {
    'cookie_secret':'eeee'
    }
    app = tornado.web.Application([(r'/login',LoginHandler),
                                    (r'/manager',ManagerHandler),
                             ],**setting)
    if __name__ == '__main__':
        app.listen('8000')
        tornado.ioloop.IOLoop.instance().start()
  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/wenxianfeng/p/10386484.html
Copyright © 2020-2023  润新知