zoukankan      html  css  js  c++  java
  • 潭州课堂25班:Ph201805201 tornado 项目 第五课 增加用户系统-用户中心(课堂笔记)

    tornado 相关说明 

    在 users 表中创建记录,做测试

    在项目根目录下创建 test.py 

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2019/2/27 0027  下午 12:20
    
    
    from models.db import DBSession
    from models.account import User
    
    # 实例工厂类
    session = DBSession()
    # 实例数据库的类
    u = User(name='abc', password='123')
    # 把数据库的类加到工厂中
    session.add(u)
    session.commit()

    运行这个文件,就可以在数据库中保存记录

     知道怎么向数据库添加数据后,就可以完成用户注册的功能:

    在 handlers 的 auth.py 中写个用户注册类,

    在 app.py 中设置路由

     

    在 templates 模板文件中 添加 register.html 

    把测试成功的代码添加到 models 的 account.py 文件中

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2019/2/27 0027 上午 4:57

    from datetime import datetime
    from sqlalchemy import (Column,Integer, String, DateTime)

    from .db import Base,DBSession
    session = DBSession()

    class User(Base):
    __tablename__ = 'users'
    # 主键,自增长,
    id = Column(Integer, primary_key=True, autoincrement=True)
    # 唯一的,不可以为空
    name = Column(String(100), unique=True, nullable=False)
    # 密码 不是空的
    password = Column(String(500), nullable=False)
    # 创建时间
    creatd = Column(DateTime, default=datetime.now)

    def __repr__(self):
    return '<User(#{}: {})'.format(self.id, self.name)

    @classmethod
    def add_user(cls,name, password):
    user = User(name=name, password=password)
    session.add(user)
    session.commit()

      

    在 utlis的 auth.py 中引入 models 的 account 

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2019/2/26 0026  上午 9:26
    
    import hashlib          # 对密码进行 md5 处理
    from models.account import User
    
    def hashed(text):
        """哈西处理"""
        return hashlib.md5(text.encode('utf8')).hexdigest()
    
    USER_DATA = {
        'username':'abc',
        'password':hashed('123')
    }
    
    def authenticate(username, password):
        """
        校验用户名,密码
        :return True or False
        """
        if username and password:
            is_match =  (username==USER_DATA['username'])and (hashed(password)==USER_DATA['password'])
            return is_match
        else:return False
    
    
    def register(name, password):
        """
        用户注册,对密码进行哈西处理
        :param name:
        :param password:
        :return:
        """
        # 把密码哈西后存入数据库
        User.add_user(name=name, password=hashed(password))
    

     在 handlers 的 auth.py 中 调用  register 的方法

    # -*- coding: utf-8 -*-
    # 斌彬电脑
    # @Time : 2019/2/26 0026  上午 8:28
    
    import tornado.web
    from utlis import auth
    from .main import AuthBaseHandler
    # from models.account import User
    
    
    class LoginHandler(AuthBaseHandler):
        """登录"""
        def get(self, *args, **kwargs):
            self.render('login.html')
    
        def post(self, *args, **kwargs):
            # 从 login.html 的 form 表单中拿到用户名,密码, None 为异常处理,(如果拿不到,传蛇夫座值)
            name = self.get_argument('username', None)
            password = self.get_argument('password', None)
            next = self.get_argument('next', '/')                   # 返回原始页面
            if auth.authenticate(name, password):
                self.session.set('login_user', name)
                # 重定向到首页
                self.redirect(next)
            else: self.write('用户名或密码不正确')
    
    
    class LogoutHandler(AuthBaseHandler):
        """用户退出登录"""
        def get(self, *args, **kwargs):
            self.session.set('login_user','')
            self.write('您已成功退出登录')
    
    
    class RegisterHandler(AuthBaseHandler):
        """用户注册,信息写入数据库"""
        def get(self, *args, **kwargs):
            self.render('register.html')
    
        def post(self, *args, **kwargs):
            name = self.get_argument('name', '')
            password_1 = self.get_argument('password1', '')
            password_2 = self.get_argument('password2', '')
    
            if password_1 == password_2:
                # 所信息添加到数据库中
                auth.register(name,password_1)
                # 注册成功后跳转到首页面
                self.redirect('/')
            else:
                self.write('两次输入的密码不一致')
    

      

    如果这些可以跑通,就可以把 utlis 下 auth.py 中的USER_DATA删除,调用数据库的信息,

    因为数据库中的 name 是唯一的,如果有同名的用户名进行注册,传到数据库中,就会报错,

    所以,在注册是,把 name 值先在数据库中查询,看看是否存在,

     

     

    创建图片信息数据库的表,

    在 models 的 account.py 中写个创建图片信息存放的表

    执行更新数据库的操作

    alembic revision --autogenerate -m "create img_post table"

    alembic upgrade head

     

    在 utlis 中的 photo.py 中写个保存用户上传图片的信息,

     在 main.py 处理图片上传中将图片信息存到数据库

    把三个基本页面改成从数据库中获取数据,之后渲染

    查询图片信息

    把这个方法引入到 man.py 在  PostHandler 中调用

    在 html 文件中渲染

     index页面

  • 相关阅读:
    VOA 2009/11/02 DEVELOPMENT REPORT In Kenya, a Better Life Through Mobile Money
    2009.11.26教育报道在美留学生数量创历史新高
    Java中如何实现Tree的数据结构算法
    The Python Tutorial
    VOA HEALTH REPORT Debate Over New Guidelines for Breast Cancer Screening
    VOA ECONOMICS REPORT Nearly Half of US Jobs Now Held by Women
    VOA ECONOMICS REPORT Junior Achievement Marks 90 Years of Business Education
    VOA 2009/11/07 IN THE NEWS A Second Term for Karzai; US Jobless Rate at 10.2%
    Ant入门
    Python 与系统管理
  • 原文地址:https://www.cnblogs.com/gdwz922/p/10448725.html
Copyright © 2011-2022 走看看