flask学习要点
路由
配置
上下文处理器
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)
1
2
3
4
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 '这是首页' |
| |
2.0 常用的钩子函数
before_first_request 处理第一次请求之前执行
before_request 每次请求之前执行,这个装饰器通常用来给视图函数增加一些变量
teardown_appcontext 不管程序是否出错,都会执行
context_processor 上下文处理器,返回的字典中的键可以在模板上下文中使用
errorhandler:errorhandler接收状态码,可以自定义返回这种状态码的响应的处理方法。
| request |
| response=make_response(...) |
| |
| |
| return response |
5模板
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
上下文挂你器
| 请求刚进来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__ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了