潭州课堂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页面





潭州课堂25班:Ph201805201 tornado 项目 第五课 增加用户系统-用户中心(课堂笔记)的更多相关文章
- 潭州课堂25班:Ph201805201 tornado 项目 第八课 增加喜欢功能(课堂笔记)
tornado 相关说明 新增一个页面,用来做图片收藏, 还要在 account.py 创建一个数据库表,记录用户喜欢的图片,哪些图片用户疯狂传奇 cd 到 项目目录下,执行数据库更新 alembic ...
- 潭州课堂25班:Ph201805201 tornado 项目 第四课 增加用户注册登录(课堂笔记)
tornado 相关说明 在 handlers 中创建个 auth.py 用来做用户登录,在这文件中创建个类,并逐步完善 在 tornado 中创建 login.html 文件,是个登录页面 {% e ...
- 潭州课堂25班:Ph201805201 tornado 项目 第十课 深入应用异步和协程(课堂笔记)
tornado 相关说明 需求: 增加 /save 的 handler,实现异步保存指定 URL 图片的功能 从网页上得到一张图片地址,由这个地址将图片保存到服务器,并将相关数据保存到数据库 impo ...
- 潭州课堂25班:Ph201805201 tornado 项目 第七课 界面美化和静态文件处理(课堂笔记)
tornado 相关说明 使用 Bootstrap 前端框架 可以在 bootCDN 这里找 jquery ,poppe.js 文件 美化项目 twittel 的开源项目, 在 static 目录下 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第十一课 项目改进和优化(课堂笔记)
使用 Bootstrap 前端框架 可以在 bootCDN 这里找 jquery ,poppe.js 文件 当聊天室发来一第图片链接时,自动保存图片到服务器,并保存相关信息到数据库,系统向该用户发出 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第六课 用户和图片分享的集成(课堂笔记)
tornado 相关说明 改善图片上传功能 ,生成唯一的 ID ,与路径拼接,生成 URL, 这里引用 uuid 的 python 库 在 photo.py 中创建个类,用来 辅助用户上传的图片,生 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第三课 项目 图片上传,展示 (课堂笔记)
tornado 相关说明 f增加图片上传功能, 在 main.py ,文件中创建个 UploadHandler 类,用来处理图片上传 上传图片之前,要先渲染这个页面,所以定个 get 方法,把这个页 ...
- 潭州课堂25班:Ph201805201 django 项目 第五课 静态页面转为模板 (课堂笔记)
一.分析静态页面 1.静态vs动态 条目 静态页面 动态页面 网站内容 固定不变 经常变动 浏览器加载速度 更快(无需向服务器发起请求) 更慢 改变网站内容 很难(修改或者创建新的html页面) ...
- 潭州课堂25班:Ph201805201 爬虫基础 第五课 (案例) 豆瓣分析 (课堂笔记)
动态讲求 , 翻页参数: # -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2018/9/1 0001 3:44 import requests,json class ...
随机推荐
- mysql 重启,修改编码utf8mb4,并修改数据库链接,生效
1.启动:/etc/init.d/mysql start 2.停止:/etc/init.d/mysql stop 3.重启:/etc/init.d/mysql restart SHOW VARIABL ...
- python selenium简单安装及使用
1.安装 pip install selenium 2.下载浏览器对应的Driver 链接地址:https://sites.google.com/a/chromium.org/chromedriver ...
- windows telnet 模拟 http请求
1. 开启windows自带的telnet客户端(控制面板 --> 程序 --> 启用或关闭windows功能 --> ) 2. 打开cmd,使用Telnet客户端 3. 按ctrl ...
- SHELL希尔排序
/****************************************************************************** * Compilation: javac ...
- [再寄小读者之数学篇](2014-04-01 from 2103471050@qq.com 曲线积分)
求 $\int_\vGa y^2\rd s$, 其中 $\vGa$ 由 $\dps{\sedd{\ba{rl} x^2+y^2+z^2&=a^2\\ x+z&=a \ea}}$ 决定. ...
- [物理学与PDEs]第1章第2节 预备知识 2.2 Ampere-Biot-Savart 定律, 静磁场的散度与旋度
1. 电流密度, 电荷守恒定律 (1) 电荷的定向移动形成电流. (2) 电流密度 ${\bf j}$, 是描述导体内一点在某一时刻电流流动情况的物理量, 用单位时间内通过垂直于电流方向的单位面积的电 ...
- Chrome 禁止从页面打开 Data URI 网址了
现如今,网民的网络账户被盗,很有可能是被“钓鱼”了.去年的一份安全报告中指出:“近85%的资金损失是通过钓鱼网址泄露支付信息造成的”. 传统的钓鱼网站通常是申请一个和被冒充网站相似的域名,比如 tao ...
- H5取经之路——CSS基础语法
一.CSS常用选择器 [选择器的命名规则] * 1.只能有字母数字下划线组成,不能有其他任何字符 * 2.开头不能是数字 [通用选择器] * 1.写法:*{} * 2.选中页面中的所有标签 * 3.优 ...
- 新加坡100M带宽,国内延迟70ms,仅800元
▇ 新加坡100M带宽,延迟80msE3_8G_1TB_100M_5IP_800元促:E3_32G_1TB SSD_1200元 ▇ 马来西亚,独享带宽,延迟70msL5630_16G_1TB_15M_ ...
- jdk1.8新特性 lambda表达式和Stream
一.Lambda 1.lambda : 匿名函数 2.好处:减少打码的冗余,增强匿名函数的可读性 3.语法格式 语法格式一 : 无参数,无返回值 () -> System.out.println ...