一、
1、项目要求描述:
登录用户时,通过session对象保存用户信息到Redis数据库,登录成功后获取session对象提示给用户
2、存在BUG描述(不知道怎么用文字描述还是截图吧):
a、网页操作


b、pycharm后台报错如下

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

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

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

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