会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 128778个问题

image.png

02_tornado_forum.zip

sxt_forum.zip

老师 , 出现这问题是啥原因啊, 可以帮我看下吗

Python 全系列/第十三阶段:Python_Tornado 框架/Tornado项目(旧) 61楼
Python 全系列/第十三阶段:Python_Tornado 框架/Tornado 深入学习(旧) 62楼
Python 全系列/第十三阶段:Python_Tornado 框架/Tornado 深入学习(旧) 63楼
Python 全系列/第十三阶段:Python_Tornado 框架/Tornado 异步(旧) 67楼
Python 全系列/第十三阶段:Python_Tornado 框架/Tornado 深入学习(旧) 68楼
Python 全系列/第十三阶段:Python_Tornado 框架/Tornado 数据库操作(旧) 69楼
Python 全系列/第十三阶段:Python_Tornado 框架/Tornado简介(旧) 71楼

一、

    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 全系列/第十三阶段:Python_Tornado 框架/Tornado 深入学习(旧) 73楼

一、主要代码:

    1、python文件

#coding=utf-8
from tornado.ioloop import IOLoop
from tornado.web import RequestHandler
from tornado.web import Application
import MySQLdb

#创建与数据库的连接
def __getConn():
    return MySQLdb.connect(host='127.0.0.1',user='root',passwd='123',db='tronado',port=3306)
#显示注册界面
class IndexHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.render('templates/register.html')
#实现注册
class RegisterHandler(RequestHandler):
    def initialize(self,conn):
        self.conn = conn

    def post(self, *args, **kwargs):
        #获取请求参数
        uname = self.get_argument('name')
        print uname
        pwd = self.get_argument('pwd')
        print 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('注册失败!')

app = Application([
    (r'/',IndexHandler),
    (r'/register/',RegisterHandler,{'conn':__getConn}),
])

if __name__ == '__main__':
    app.listen(8000)
    IOLoop.current().start()

    2、templates内代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>地下城与勇士注册界面</title>
</head>
<body>
    <div align="center">
        <h1>地下城与勇士注册界面</h1>
        <hr color="red" size="4px">
        <form action="/register/" method="post">
            <p>账&emsp;号:<input type="text" name="name"></p>
            <p>密&emsp;码:<input type="password" name="pwd"></p>
            <p><input type="submit" value="提交注册"></p>
        </form>

    </div>
</body>
</html>

二、数据库表

blob.png

blob.png

三、pycharm运行环境如下:

blob.png

四、存在问题,在网页提交数据后显示注册失败。

1、blob.png

2、blob.png

五、自己无法解决(代码检查过  没有写错)


Python 全系列/第十三阶段:Python_Tornado 框架/Tornado 深入学习(旧) 74楼
Python 全系列/第十三阶段:Python_Tornado 框架/Tornado 深入学习(旧) 75楼

百战程序员微信公众号

百战程序员微信小程序

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