flask学习要点
路由
配置
上下文处理器
1.0 上下文介绍
flask中有两个上下文,一个是应用上下文(app),另一个是请求上下文(request)。
应用上下文current_app和请求上下文request 都是一个全局变量,所有请求都是共享的。
flask有特殊的机制,可以保证每次请求的数据都是隔离的。所以可以直接导入request对象,也不会被一些脏数据影响,并且不需要在每个函数中使用request的时候,都导入request对象。
request: 请求上下文的对象,一般用来保存请求的变量,如:args、form等。
session:请求上下文的对象,一般用来保存会话信息。
current_app :应用上下文对象,返回当前的app。
print(app)
app2 = current_app
with app.app_context(): #添加上下文,让app2可以打印出来
print(app2)
g:应用上下文对象,处理请求时用来作临时存储的对象。
@app.route('/')
def login():
#res = Response('京东网')
# res.set_cookie('username', 'cheney', max_age=606024)
# session['username'] = 'jerry'
# session.permanent = True
# request.form.get('username')
# return res
username = session.get('username')g.username = username
log_a()
log_b()
return '这是首页'
g.username = username
log_a()
log_b()
return '这是首页'
2.0 常用的钩子函数
before_first_request 处理第一次请求之前执行
before_request 每次请求之前执行,这个装饰器通常用来给视图函数增加一些变量
teardown_appcontext 不管程序是否出错,都会执行
context_processor 上下文处理器,返回的字典中的键可以在模板上下文中使用
errorhandler:errorhandler接收状态码,可以自定义返回这种状态码的响应的处理方法。
request
response=make_response(...)
#响应头
#cookle
return response
5模板
render_template
6session
flask-session 将默认保存在cookle中的值
保存到redis/memcached/file/Mongodb/sqlalchemy中
2种方式保存:cookle'redis
7常见装饰器
before_render_template,
after_this_request
app.errorhandler(404)
app.before_request()
app.after_request()
闪现
中间件
蓝图
补充
1打包自己的包需要一个包
pip install pipreqs
打包依赖包 pipqeqs ./
数据库连接池
pip install DBUTILS
pip install mysqlclient最新
DbUtils(pymysql)
1每个线程创建一个链接,默认不关闭,线程终止是才关闭链接
2创建共享连接池,常用
只要写原生sql,就要用链接池
wtforms表单验证模块
from wtforms.form import Form
class myform(Form):
user=类(正则,插件)
字段=类(正则,插件)
字段=类(正则,插件)
SQLAchemy 和flask-sqlalchemy
orm模型 对象关系映射模型
类————表
对象————记录(一行数据)
db first 表生成类
code first 类结构乘车表
原生sql语句比较
flask-script
脚本启动
flask-migrate
数据库迁移
localstack
对local中数据进行处理
对lacal中对象维护成堆栈
local={123:{stack:[ctx:]}
local
保存请求上下文对象/app对象
保持线程间数据隔离
上下文挂你器
请求刚进来requestcontext(request,session),appcontext(app,g)--local
视图处理localproxy()--偶函数--localstack()--local
请求结束localstack.pop()
}
上下文管理器
请求上下文:request\session
app上下文:app\g
反射
信号
mtv和mvc
数据库 模板 视图
pymvsql操作
import pymysql
com=pymysql.connect()
cursor=com.cursor()
row_1=cursor.fetchone()
cursor.close()
com.close()
面向对象的一些补充
cless a(c)
b=a()
1调用c.__call__
2调用a.__new__
3调用a.__init__
基类有Type实例化创造
类指定metaclass方法,则都由该类实例化
TYPE.__init__
type{__call__
lei>__new__
lei>__init__