会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132647个问题
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado项目 16楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado项目(旧) 17楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado项目(旧) 18楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado项目 19楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 深入学习(旧) 21楼

一、

    1、项目要求描述:

    登录用户时,通过session对象保存用户信息到Redis数据库,登录成功后获取session对象提示给用户

    2、存在BUG描述(不知道怎么用文字描述还是截图吧):

    a、网页操作

blob.png

blob.png

    b、pycharm后台报错如下

blob.png

    c、Redis数据库有保存的信息。

blob.png

二、自己调试过程:

    1、怀疑是登录时,创建的session对象,没有保存用户信息就保存在了Redis数据库(验证步骤如下,步骤应该是说明了session对象没有保存用户信息,因为输出时None,但是如何改正自己不会还请老师指导)

blob.png

    2、怀疑获取session对象时没有获取到(验证步骤如下,步骤应该是说明了没有获取到session对象,因为输出时None。但是如何改正自己不会还请老师指导)

blob.png

    3.通过上面的猜测,觉得BUG存在的原因是,第一:MainHandler类中设置修改session对象时没有调用到session对象,所以没有保存用户信息。第二:LoginHandler类中,没有获取到session对象所以不能返回给HTML页面。(下面是视图类代码如下)

#coding=utf-8
from tornado.web import RequestHandler
from utils.session import SessionManager, Session

class BaseHandler(RequestHandler):
    def prepare(self):
        #从cookie中获取sessionid
        c_sessionid = self.get_cookie('sessionid','')
        print c_sessionid
        #根据sessionid获取session对象
        sessionobj = SessionManager.getsessionobj(c_sessionid)
        print sessionobj.sessionid
        if sessionobj.sessionid != c_sessionid:
            self.set_cookie('sessionid',sessionobj.sessionid,expires_days=14)
            print self.get_cookie('sessionid')
        self.session = sessionobj
    def on_finish(self):
        SessionManager.cache2redis(self.session)

class MainHandler(BaseHandler):
    def initialize(self,conn):
        self.conn = conn
    def get(self, *args, **kwargs):
        self.render('login.html')
    def post(self, *args, **kwargs):
        #获取用户登录参数
        uname = self.get_argument('uname')
        pwd = self.get_argument('pwd')
        #获取游标对象
        cursor = self.conn.cursor()
        #执行SQL语句
        cursor.execute('select * from db_test1 where user_name="%s" and user_pwd="%s"'%(uname,pwd))
        #执行结果
        user = cursor.fetchone()
        #将登录用户对象保存在session对象中
        self.session.set('user',user)
        # 判断是否登录成功
        if user:
            self.redirect('/login/')
            # self.write(u'用户%s登录成功'%uname)
        else:
            self.write(u'用户不存在,或密码输入不正确')

class RegisterHandler(BaseHandler):
    def initialize(self,conn):
        self.conn = conn
    def get(self, *args, **kwargs):
        self.render('register.html')
    def post(self, *args, **kwargs):
        #获取请求参数
        uname = self.get_argument('name')
        pwd = self.get_argument('pwd')
        #实现在数据库插入数据
        try:
            cursor = self.conn.cursor()
            cursor.execute('insert into db_test1 values(null,"%s","%s",now())'%(uname,pwd))
            self.conn.commit()
            self.write('注册成功!')
        except Exception as e:
            self.conn.rollback()
            self.write('注册失败!')

class LoginHandler(BaseHandler):
    def get(self, *args, **kwargs):
        #从session中获取当前登录用户对象
        user = self.session.get('user')
        # print user
        self.write(u'欢迎%s登录成功!'%user.uname)


三、项目压缩文件如下(python2.7解释器):

test_register_login.zip







Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 深入学习(旧) 22楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 深入学习(旧) 23楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 深入学习(旧) 25楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 26楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado项目 27楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 深入学习(旧) 28楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado项目(旧) 29楼
Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 深入学习(旧) 30楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637