tornado 相关说明

在 handlers 中创建个 auth.py 用来做用户登录,在这文件中创建个类,并逐步完善

在 tornado 中创建 login.html 文件,是个登录页面

{% extends 'base.html' %}
{% block title %}登录{% end %} {% block content %}
<h3>登录首页</h3>
<form action="/login" method="post" enctype="multipart/form-data">
<p>用户名:<input type="text" name="username" placeholder="请输入用户名" required=""></p>
<p>密 码:<input type="password" name="password" placeholder="请输入密码" required=""></p>
<button>登录</button>
</form> {% end %}

在 app.py 的路由配置中添加登录页面的

实现密码加密,

在 utlis 中创建个 auth.py 文件,这个auth 是用来做密码处理的,

import hashlib          # 对密码进行 md5 处理

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

所有 pip install 需要 workon env 之后执行

pip install pycket

pip install redis

python 与 redis 数据库连接,用 redis 存放相关信息

在 app.py 文件的配置中添加 cookie_secret = 字符串(随便填)

再加入如下字典

            pycket={
'engine': 'redis', # 引擎
'storage': {
'host': 'localhost', # 本地数据库
'port': 6379, # 端口
# 'password': '',
'db_sessions': 5, # redis db index
# 'db_notifications': 11,
'max_connections': 2 ** 30, # 最大连接数
},
'cookies': {
# 'expires': 30, # 过期时间 (秒)
'expires_days': 30, # 过期时间 (天)
},
}
# static_url_prefix = '/pics/',
)

  

  

在 handlers 的 auth.py 中的 导入 pycket

在 handlers 的 auth.py 中的  LoginHandler 改为多个继承

这样就添加了 cookie

拿信息

开始用户认证代码的完善,

在 main.py 中写个 AuthBaseHandler 多个继承的基础类,


这样在下面的  Handler 类中就可以直接继承这个类,实现用户认证

这样也可以对上述 login 代码进行优化,

如果要让一个页面只有在用户登录后才能查看,那就可以在这个方法的上边加个装饰器,

要让这个装饰器功能实现,还要在  app.py 文件的 配置中添加  login_url = '/login',

@tornado.web.authenticated

这时只有在用户登录后才能查看这个页面,

用户登出

在 handlers 的 auth.py 中添加用户退出登录类,

在 appp.py 的路由中添加路由

用户注册:
先要对数据库的连接

  创建个库:create database tor

SQLalchemy 版本迁移工具 alembic 使用

进入虚拟环境,安装用到的包

pip install pymysql

pip install sqlalchemy

pip install alembic

创建个包,名为 models

创建个 py 文件名为 db.py, 写数据库的连接信息

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'tor'
USERNAME = 'admin'
PASSWORD = 'Root110qwe' # 指定数据库类型,驱动,
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
USERNAME, PASSWORD, HOST, PORT, DATABASE
)
engine = create_engine(DB_URL)
DBSession = sessionmaker(bind=engine)
Base = declarative_base(engine)

 创建 account.py 文件

from datetime import datetime
from sqlalchemy import (Column,Integer, String, DateTime) from .db import Base class User(Base):
__tablename__ = 'users'
# 主键,自增长,
id = Column(Integer, primary_key=True, autoincrement=True)
# 唯一的,不可以为空
name = Column(String(100), unique=True, nullable=False)
# 密码 不是空的
password = Column(String(100), nullable=False)
# 创建时间
creatd = Column(DateTime, default=datetime.now) def __repr__(self):
return '<User(#{}: {})'.format(self.id, self.name)

  

  

alembic 初始化和配置

用 pychram  把文件下载回电脑,

可以提交下版本,

修改 alembic.ini 配置

连接数据库的 url

修改 env.py

告之 Base 类的位置,

完成 pip 安装之后

  • 在 shell 里面 cd 到项目根目录执行 alembic init alembic

  • 用 pycharm 把生成的文件 download 回来(包括 alembic 目录和 alembic.ini

  • 修改 alembic.ini 设置数据库连接。

    sqlalchemy.url = driver://user:pass@localhost/dbname

  • env.py 中设置,将target_metadata赋值成数据库的元数据(metadata) 如果执行 revision 有 import 报错,注意是否正确将当前项目目录添加到 sys.path 路径

基于数据库 model 定义进行更新

将 model 定义好,并确认在 env.py 里导入的 Base 类是在 model 定义的地方的

  • 配置完成执行( -m "注释信息",根据情况更改,会用到生成的py文件名字里)

    alembic revision --autogenerate -m "create_user_table"

  • 这里可以看到虚拟机目录在 alembic/versions 里生成了 py 文件,检查确认更新的内容,然后执行

    alembic upgrade head

  • 运行成功后,将会在这个表中生成一条记录,
  • 这样就会更新 mysql 数据库了

命令参考

查看记录和历史

alembic history

回退上一个升级的版本

alembic downgrade -1

查看生成的 py 文件

ls -l alembic/versions

其他操作

  • 删除 rm alembic/versions/xxx.py

常见问题

执行 alembic 报错,KeyError:'5b29018b55ba'

原因:该版本曾经upgrade执行过了,但是文件被删除,

解决办法:更新数据库 alembic_version 表记录

ERROR [alembic.util.messaging] Can't locate revision identified by 'a2de455a4f51'  FAILED: Can't locate revision identified by 'a2de455a4f51'

执行 alembic autogenerate 没有看到生成的 py 文件有数据库更新操作的代码

原因:Base import 不正确,或者 model 定义不正确

解决办法:检查 model 代码

数据库还没有执行 upgrade head 更新,不能执行 autogenerate

ERROR [alembic.util.messaging] Target database is not up to date.  FAILED: Target database is not up to date.

删除所有 py 文件之后的重新开始,最好把数据库的表也删除完

这样才能确保生成的py文件反应所有数据库变更

单独更改列名或一些列属性和表名等不能自动识别

需要注意

潭州课堂25班:Ph201805201 tornado 项目 第四课 增加用户注册登录(课堂笔记)的更多相关文章

  1. 潭州课堂25班:Ph201805201 tornado 项目 第八课 增加喜欢功能(课堂笔记)

    tornado 相关说明 新增一个页面,用来做图片收藏, 还要在 account.py 创建一个数据库表,记录用户喜欢的图片,哪些图片用户疯狂传奇 cd 到 项目目录下,执行数据库更新 alembic ...

  2. 潭州课堂25班:Ph201805201 tornado 项目 第五课 增加用户系统-用户中心(课堂笔记)

    tornado 相关说明 在 users 表中创建记录,做测试 在项目根目录下创建 test.py # -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2019/2/27 ...

  3. 潭州课堂25班:Ph201805201 tornado 项目 第十课 深入应用异步和协程(课堂笔记)

    tornado 相关说明 需求: 增加 /save 的 handler,实现异步保存指定 URL 图片的功能 从网页上得到一张图片地址,由这个地址将图片保存到服务器,并将相关数据保存到数据库 impo ...

  4. 潭州课堂25班:Ph201805201 tornado 项目 第七课 界面美化和静态文件处理(课堂笔记)

    tornado 相关说明 使用  Bootstrap 前端框架 可以在 bootCDN 这里找 jquery ,poppe.js 文件 美化项目 twittel 的开源项目, 在 static 目录下 ...

  5. 潭州课堂25班:Ph201805201 tornado 项目 第十一课 项目改进和优化(课堂笔记)

    使用  Bootstrap 前端框架 可以在 bootCDN 这里找 jquery ,poppe.js 文件 当聊天室发来一第图片链接时,自动保存图片到服务器,并保存相关信息到数据库,系统向该用户发出 ...

  6. 潭州课堂25班:Ph201805201 tornado 项目 第六课 用户和图片分享的集成(课堂笔记)

    tornado 相关说明 改善图片上传功能 ,生成唯一的 ID ,与路径拼接,生成 URL, 这里引用 uuid 的 python 库 在 photo.py 中创建个类,用来  辅助用户上传的图片,生 ...

  7. 潭州课堂25班:Ph201805201 tornado 项目 第三课 项目 图片上传,展示 (课堂笔记)

    tornado 相关说明 f增加图片上传功能, 在 main.py ,文件中创建个  UploadHandler 类,用来处理图片上传 上传图片之前,要先渲染这个页面,所以定个 get 方法,把这个页 ...

  8. 潭州课堂25班:Ph201805201 django 项目 第四课 项目搭建 课堂笔记)

    创建一用户,授予对这个 myblog 库的所有表的权限(.*),在任何 ip 地址中访问(@“%”), 刷新: 退出,用新创建的用户登录,并进入这个库, 在昨天创建的项目中,配置文件中 为了数据库的案 ...

  9. 潭州课堂25班:Ph201805201 django 项目 第二十课 数据库分析设计图 (课堂笔记)

    https://www.dbdesigner.net/

随机推荐

  1. 判断三次URL可用性脚本

    #!/bin/bash check_url() { HTTP_CODE=$(curl -o /dev/ -s -) ];then continue fi } URL_LIST="www.ba ...

  2. 在lnmp环境下,将原来的PHP7.0升级到PHP7.2

    基础环境: 系统:centos6.8   环境:lnmp 停止PHP7.0的版本,在做如下操作: 1.下载php-7.2.6.tar.bz2软件包放在/opt 路径下 mkdir /usr/local ...

  3. vue项目使用阿里巴巴矢量图标库教程

    前言:element-ui自带的图标库还是不够全,还是需要需要引入第三方icon,自己在用的时候一直有些问题,参考了些教程,详细地记录补充下. 对于我们来说,首选的当然是阿里icon库 地址:http ...

  4. 常用的web服务器软件整理

    (1)ApacheApache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上.Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软 ...

  5. P1036 选数 题解

    题目链接https://www.luogu.org/problemnew/show/P1036 题目描述 已知 nnn 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1​,x2​,-,xn​ ...

  6. kafka.common.KafkaException: Failed to acquire lock on file .lock in /tmp/kafka-logs. A Kafka instance in another process or thread is using this directory.

    1.刚才未启动zookeeper集群的时候,直接启动kafka脚本程序,kafka报错了,但是进程号启动起来来,再次启动出现如下所示的问题,这里先将进程号杀死,再启动脚本程序. [hadoop@sla ...

  7. mybatis_generator_逆向工程的使用笔记

    1:解压mybatis_generator_1.3.1.zip文件. 2:把features,pougins文件夹copy到D:\java\eclipse\eclipse目录下(D:\java\ecl ...

  8. oracle安装过程中先决条件检查失败的解决办法

    1:公司数据库开始用的mysql,因为公司做的是保密性项目,所以就在项目日志过多的时候项目有爆炸的迹象啊(3000千万数据,貌似mysql有点撑不住).然后组长开始让我安装oracle,公司的内网也是 ...

  9. ASP.NET Core Http请求的处理流程

  10. poj3889

    看题解之前并不知道怎么搞.. 分治是显然的 但是我不知道怎么判断4个块的位置 发现很简单... 注意14是23旋转得到的 而同时也等价于交换了横纵坐标 所以就可以做了