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页面

  • 相关阅读:
    再战CS231-数组的访问
    win10定时关机
    再战CS231-快速排序
    数据库权限
    numpy
    anaconda
    控件的相对位置与绝对位置-UI界面编辑器(SkinStudio)教程
    共用字体-UI界面编辑器(SkinStudio)教程
    添加图片按钮-UI界面编辑器(SkinStudio)教程
    为窗体设置背景图片-UI界面编辑器(SkinStudio)教程
  • 原文地址:https://www.cnblogs.com/gdwz922/p/10448725.html
Copyright © 2011-2022 走看看