摘要
本文部分内容来源于网络,个人收集整理,请勿传播
- flask-session
- metaclass
- WTForms
- flask-SQLAchemy
- flask-script
- flask-migrate
- flask-restful
- 等… http://flask.pocoo.org/extensions/
Flask-Session
flask中session处理机制
- 请求进来之后先看用户有没有随机字符串
- 有的话去获取原来的个人数据
- 没有的话在内存中生成一个空容器(内存对象,随机字符串{放置数据的容器})
- 视图:操作内存中的对象
- 相应:内存对象
- 将数据保存到数据库
- 将随机字符串写在用户cookie中
- obj = SecureCookieSessionInterface()
- obj = open_session(self, request) = SecureCookieSession()
- self.session = SecureCookieSession()
- open_session()
- 去用户请求的cookie中获取原来给你的随机字符串,去cookie中获取key为session的值
- 如果没有,创建一个特殊的空字典
- 此时Local的ctx中有了session,是一个特殊的空字典
第三方session
1 | #pip3 install redis |
1 | from flask_session import RedisSessionInterface |
MetaClass
用来执行当前类由谁来创建,默认是type
- class Foo(metaclass=type) 由type创建类
- class Foo(type) 继承type
使用
1 | class Foo(metaclass=type): |
示例1
1 | class MyType(type): |
示例2
1 | class MyType(type): |
示例3
1 | class MyType(type): |
实例化流程分析
1 | # 源码流程 |
验证流程分析
1 | a. 执行form的validate方法,获取钩子方法 |
wtforms
WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。
1 | pip3 install wtforms |
用户登录注册示例
用户登录
当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如:
- 用户不能为空;用户长度必须大于6;
- 密码不能为空;密码长度必须大于12;密码必须包含 字母、数字、特殊字符等(自定义正则);
app.py
1 | #!/usr/bin/env python |
login.html
1 | <!DOCTYPE html> |
用户注册
注册页面需要让用户输入:用户名、密码、密码重复、性别、爱好等。
app.py
1 | from flask import Flask, render_template, request, redirect |
register.html
1 | <!DOCTYPE html> |
meta
1 | #!/usr/bin/env python |
源码流程
- 解释:metaclass
- 实例 form = LoginForm()
- 验证 form.validate()
1 | class BaseForm: |
Flask-SQLAchemy
- Flask和SQLAchemy的管理者
- 文件和目录的管理
- db = SQLAlchemy()
- 包含配置
- 包含ORM基类
- 包含create_all
- engine
- 创建连接
代码待续
Flask-Script
用于实现django的python manage.py runserver
1 | pip install flask-script |
使用
1 | from flask import Flask,signals,session |
运行
1 | python manager.py runserver |
自定义命令
1 | from flask import Flask,signals,session |
Flask-Migrate
用于数据库操作
1 | from flask import Flask |
使用
1 | python manager.py db init |