flask学习
学习博客:https://www.cnblogs.com/sss4/p/8097653.html
1.配置
app.debug='' 第一种:app.config['DEBUG']=True 第二种: app.config.from_pyfile('py文件')
from_json
from _object:可以传类
2.路由
典型写法:@app.route('/index',methods=['GET'],enpoint='别名') 路由本质:app.add_url_rule() 参数:了解
自定义转换器(支持正则)
3.CBV加装饰器
decorators=[auth,] class IndexView(views.View): methods = ['GET'] decorators = [auth, ] def dispatch_request(self): print('Index') return 'Index!'
4. 模板
支持执行函数,并且传参数
|safe
2.extends,include一模一样
5.请求响应
request请求相关信息
# request.method
# request.args
# request.form
request.files
response
# return "字符串"
# return render_template('html模板路径',**{})
# return redirect('/index.html')
#return jsonify({'k1':'v1'})
jsonify--返回json格式
往里写cookie
res=make_response('ok')
res.set_cookie()
session
设置:session['username'] = 'cao'
取值:user=session['user'] 删除:session.pop('user')
del session['user']
闪现(错误信息展示)
flash('',category='xx') get_flashed_messages(category_filter=['x1'])
@app.errorhandler(404) def error_404(arg): return "404错误了"
@app.template_global() def sb(a1, a2): return a1 + a2 #{{sb(1,2)}}
@app.template_filter() def db(a1, a2, a3): return a1 + a2 + a3 #{{ 1|db(2,3)}}
蓝图
对程序进行目录结构划分
使用蓝图之大型系统 详见代码:pro_flask_大型应用目录示例.zip 总结: 1 xxx = Blueprint('account', name,url_prefix='/xxx') :蓝图URL前缀,表示url的前缀,在该蓝图下所有url都加前缀 2 xxx = Blueprint('account', name,url_prefix='/xxx',template_folder='tpls'):给当前蓝图单独使用templates,向上查找,当前找不到,会找总templates 3 蓝图的befort_request,对当前蓝图有效 4 大型项目,可以模拟出类似于django中app的概念
什么是函数,什么是方法?

在类内部定义的函数,由对象来调用就是方法,类直接调用,它还是函数
请求上下文
-请求来了,先经过实现wsgi协议的web服务器 -app.call -ctx:包了两个东西,一个是request,一个空session -ctx.push {线程id:{stack:[ctx,]}} 生成了了应用上下文app_ctx:{线程id:{stack:[app_ctx,]}} 打开session,session赋值 -执行dispatch方法(请求扩展的东西) -视图函数: request.method session.get()
-ctx.auto_pop(error)
-flask-session
wtforms
类似于django的form组件基本类似
数据校验功能
渲染表单功能
渲染错误信息
钩子函数
数据库连接池
有两种模式:
1.来一个线程。创建一个连接,100个线程就100个链接,相当于给每一个线程独享自己的数据库连接
2.先创建出数据库池子,如果有50个,就是一个池子里面50个,25个结束了,其他的25个再进来
基本概念:程序一开始,先创建出一堆链接,以后有线程要链接数据库,直接从池子里面取出
DButils模块
基于pymysql模块
为什么要用数据库连接池?
-为了防止数据读写错误
多个线程访问同一个资源 ?
-加锁 -拷贝一份独享
数据库连接池对象应该是单例的
SQLAlchemy(使用范围较广)
第三方的orm框架
操作mysql数据库,还得需要pymysql
可以执行原生sql
django的orm也支持原生sql(没怎么用过)
django的orm直接用命令做数据库同步操作
SQLAlchemy需要写方法,执行方法,来做数据库同步
SQLAlchemy只能创建数据表,删除数据表,不能修改数据表
-自己做,在数据表中新增字段,models中添加相应的字段
主要用来orm操作
fliter 传的是表达式
filter_by 传参数
增,删,改都需要提交commit()
主键做成自增,数据如果没有提交,自增字段也会增加

浙公网安备 33010602011771号