在 users 表中创建记录,做测试
在项目根目录下创建 test.py
# -*- coding: utf-8 -*-# 斌彬电脑# @Time : 2019/2/27 0027 下午 12:20from models.db import DBSessionfrom 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 '
在 utlis的 auth.py 中引入 models 的 account
# -*- coding: utf-8 -*-# 斌彬电脑# @Time : 2019/2/26 0026 上午 9:26import hashlib # 对密码进行 md5 处理from models.account import Userdef 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 Falsedef 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:28import tornado.webfrom utlis import authfrom .main import AuthBaseHandler# from models.account import Userclass 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页面