美文网首页
优化实例的session--呈现单实例session(十八)

优化实例的session--呈现单实例session(十八)

作者: 梦捷者 | 来源:发表于2020-04-15 08:59 被阅读0次

    一、首先优化相关的处理请求的类(mian.py)

    import tornado.web
    from PIL import Image
    from pycket.session import SessionMixin
    from utiles.orm import OrmHandler
    from models.db import Session
    from models.auth import User, Post
    
    
    class BaseHandler(tornado.web.RequestHandler, SessionMixin):
        def get_current_user(self):
            return self.session.get('username_session')
    
        def initialize(self):
            self.db_session = Session()
            self.orm = OrmHandler(self.db_session)
    
        def on_finish(self):
            self.db_session.close()
    
    
    class ExploreHandler(BaseHandler):
        """
        发现或最近上传的图片页面 /explore  ExploreHandler
        """
        @tornado.web.authenticated
        def get(self):
            posts = self.orm.get_all_posts()
            self.render('explore.html', posts=posts, username=self.current_user)
    
        def post(self):
            pass
    
    
    class IndexHandler(BaseHandler):
        """
        所关注的用户图片流  /   IndexHandler
        """
        @tornado.web.authenticated
        def get(self):
           users = self.orm.get_all_users()
           username = self.current_user
           user = self.db_session.query(User).filter_by(username=username).first()
           post_id = user.id
           self.render('user/information.html', users=users, username=username, post_id=post_id)
    
        def post(self):
            pass
    
    
    class PostHandler(BaseHandler):
        """
        单个图片详情页面  /post/id   PostHandler
        """
        @tornado.web.authenticated
        def get(self, post_id):
            session = Session()
            user = session.query(User).filter_by(username=self.current_user).first()
            if post_id == str(user.id):
                posts = session.query(Post).filter_by(user_id=post_id).all()
                self.render('post.html', post_id=post_id, posts=posts, username=self.current_user)
            else:
                self.redirect('/upload')
            session.close()
    
    
    class One_pictureHandler(BaseHandler):
         def get(self, post_id):
             session = Session()
             post_one = session.query(Post).filter_by(id=post_id).first()
             self.render('one_picture.html', post=post_one)
    
    
    class UploadHandler(BaseHandler):
        """
        用户上传图片信息
        """
        @tornado.web.authenticated
        def get(self):
            self.render('user/upload.html', username=self.current_user)
    
        @tornado.web.authenticated
        def post(self):
            try:
                files = self.request.files['picture']#list类型中包含一个字典
                if files[0]:
                    dict_img = files[0]
                    filename = dict_img['filename']
                    print(filename)
                    print(dict_img['content_type'])
                    save_path = 'static/upload/{}'.format(filename)
                    with open(save_path, 'wb') as f:
                        f.write(dict_img['body'])
                    im = Image.open(save_path)
                    im.thumbnail((200, 200))
                    im.save('static/thumbs/thumb_{}'.format(filename), 'JPEG')
                    post_id = self.orm.add_post(self.current_user, 'upload/{}'.format(filename), 'thumbs/thumb_{}'.format(filename))
                    print(post_id)
                    if post_id:
                        self.redirect('/post/{}'.format(str(post_id)))
                else:
                    self.write("上传失败,系统不听话")
            except Exception as e:
                print(e)
                self.redirect('/upload')
    
    
    class RegisterHandler(BaseHandler):
        """
        用户注册
        """
        def get(self):
            self.render('user/register.html')
    
        def post(self):
            username = self.get_argument('username', '')
            password = self.get_argument('password', '')
            email = self.get_argument('email', '')
            gender = self.get_argument('gender', '')
            age = self.get_argument('age', ' ')
            if not self.db_session.query(User.username).filter(User.username == username).first():
                value = self.orm.add_user(username, password, email, age, gender)
                if value == 'ok':
                    self.session.set("username_session", username)
                    self.redirect('/')
                else:
                    self.write("不好意思哦,注册失败!!!!")
            else:
                self.write('用户名已经存在!!!')
    
    
    class LoginHandler(BaseHandler):
        def get(self):
            next_url = self.get_argument('next', '/')
            print(next_url)
            if self.current_user:
                print("此时的session对应的值为{}".format(self.current_user))
                self.redirect(next_url)
            else:
                self.render('user/login.html', next_url=next_url,msg="暂时无问题!!")
    
        def post(self):
            next_url = self.get_argument('next_url', '/')
            username = self.get_argument("username", '')
            password = self.get_argument("password", '')
            ret = self.orm.user_login(username, password)
            if ret is not None:
                if not self.session.get('username_session'):
                    if ret['result'] == True:
                        self.session.set("username_session", username)
                        self.redirect(next_url)
                    else:
                        self.render('user/login.html', next_url=next_url, msg=ret['msg'])
            else:
                self.render('user/login.html', next_url=next_url, msg='用户名不存在')
    
    
    class LogoutHandler(BaseHandler):
        @tornado.web.authenticated
        def get(self):
            self.session.delete('username_session')
            next_url = self.get_argument('next', '/')
            self.render('user/login.html', msg="退出成功!!", next_url=next_url)
    
    
    class CheckHandler(BaseHandler):
        @tornado.web.authenticated
        def get(self):
            user = self.session.query(User).filter_by(username=self.current_user).first()
            post_id = user.id
            self.redirect('/post/{}'.format(str(post_id)))
    
    

    二、相关辅助函数的代码优化(写成一个类,orm.py文件中)

    from models.auth import User, Post
    from hashlib import md5
    
    
    def hash(text):
        return md5('{}+{}'.format(text, 'jiayan').encode()).hexdigest()
    
    
    class OrmHandler:
        """
        配合RequestHandler实例化的session一起使用
        """
        def __init__(self, session):
            self.session = session
    
        def get_all_posts(self):
            """
            获取所有图片
            """
            data_all = self.session.query(Post).all()
            return data_all
    
        def get_all_users(self):
            """
            获取所有用户的信息
            :return:
            """
            users = self.session.query(User.id, User.username, User.gender, User.age, User.creatime, User.emial).all()
            return users
    
        def add_user(self,username, password, email, age, gender):
            """
            进行用户注册
            :param username:
            :param password:
            :param email:
            :return:
            """
            if username and password:
                user = User(username=username, password=password, emial=email, age=age, gender=gender)
                self.session.add(user)
                self.session.commit()
                return 'ok'
            else:
                return 'false'
    
        def add_post(self, username, image_url, thumb_url):
            user = self.session.query(User).filter_by(username=username).first()
            post = Post(user_id=user.id, image_url=image_url, thumb_url=thumb_url)
            self.session.add(post)
            self.session.commit()
            post_id = post.user_id
            return post_id
    
        def user_login(self, username, password):
            """
            用户登录模块
            :param username:
            :param password:
            :return:
            """
            try:
                ret = {'result': False}
                if username and password:
                    user = self.session.query(User).filter_by(username=username).first()
                    # if hash(session.query(User.password).filter(User.username == username).first()[0]) == hash(password):
                    if hash(user.password) == hash(password):
                        ret['result'] = True
                    else:
                        ret['msg'] = '密码错误'
                else:
                    ret['msg'] = '用户名和密码不能为空'
                return ret
            except:
                pass
    
    
    

    相关文章

      网友评论

          本文标题:优化实例的session--呈现单实例session(十八)

          本文链接:https://www.haomeiwen.com/subject/rbdupctx.html