会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132474个问题
Python 全系列/第二阶段:Python 深入与提高/模块 15331楼
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 15334楼
Python 全系列/第四阶段:函数式编程和核心特性/生成器和装饰器 15335楼
JAVA 全系列/第一阶段:JAVA 快速入门/控制语句、方法、递归算法 15337楼
JAVA 全系列/第十六阶段:前后端分离技术VUE/Vue3 15339楼
人工智能/第十八阶段:深度学习-NLP自然语言处理项目实战/AI写唐诗 15341楼
Python 全系列/第一阶段:Python入门/控制语句 15342楼
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 15343楼

一、

    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 深入学习(旧) 15344楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 15345楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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