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

一、首先优化相关的处理请求的类(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


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 我去找你,在阴冷的清晨,在潮湿的弄堂,在那棵茂盛的树下。我没看见你,没看见似曾相识的面容,动人心魄的眼神,...
    冰夫阅读 166评论 0 0
  • 极简训练营5月25日 今日买了什么: 买菜并光盘。 今日扔了什么:药。 去向:垃圾桶。 原因:身体不舒服时看医生,...
    璇豆的天空阅读 279评论 0 0
  • 刚刚听到Vakning að elska这首歌,往下拉时看到三条评论,瞬间眼眶红了。 第一条评论: 无人与我立黄昏...
    九马阅读 2,341评论 0 1
  • 《一本正经》 打开梦的仓库 遍寻“七心海棠”
    小庄主人阅读 131评论 0 3
  • 一个程序至少有一个进程,一个进程至少有一个线程: 进程:一个程序的一次运行,在执行过程中拥有独立的内存单元,而多个...
    Zhui_Do阅读 605评论 0 1