優(yōu)化實例的session--呈現(xiàn)單實例session(十八)

一、首先優(yōu)化相關(guān)的處理請求的類(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):
    """
    發(fā)現(xiàn)或最近上傳的圖片頁面 /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):
    """
    所關(guān)注的用戶圖片流  /   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("上傳失敗,系統(tǒng)不聽話")
        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('用戶名已經(jīng)存在?。。?)


class LoginHandler(BaseHandler):
    def get(self):
        next_url = self.get_argument('next', '/')
        print(next_url)
        if self.current_user:
            print("此時的session對應(yīng)的值為{}".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)))

二、相關(guān)輔助函數(shù)的代碼優(yōu)化(寫成一個類,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):
        """
        進(jìn)行用戶注冊
        :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


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容