flask入门
django与flask
django --->羽绒服--->加载项巨大,项目浪费
--->django 原生组件非常丰富 -教科书式框架 --->django.model -orm
--->django.form
--->modelfrom
--->admin
--->django.session --基于model
flask --->半截袖 ---> 第三方组件运行稳定性相对较差
--->精简 --短小精悍 --精简到只有session
--->flask 第三方组件,非常全
django 适合大型 密集型 --->uwsgi 优化io操作比较好
flask 适合小型 API服务类型
flask web 框架
flask ---> flask库文件
Jinja2 --->模板渲染库
MarkupSafe --->返回安全标签(只要flask返回模板或者标签时,都会依赖Markupsafe)
werkzeug --->德文 "工具" ==uWSGI 底层就是WSGI --->flask项目启动就是基于werkzug
应用flask
启动flask
from flask import Flask
app=False(__name__)
app.run()
flask输出helloworld
from flask import Flask #导入Flask 类创建Flask应用对象
app = Flask(__name__) #app=application
@app.route('/index') #为Flask 应用对象增加路由
def index(): #与路由绑定视图函数,视图函数名尽可能保存唯一
return "hello world" #return 相当于django中的httpresponse
if __name__ == '__main__': #当前文件处于脚本状态下运行如下代码
app.run() #启动Flask应用
flask中的Response
Django ----> Flask
HTTPResponse("hello") "hello"
render("html文件") render_template("html文件")
redirect("重定向路径") redirect("重定向路径")
flask新方法
send_file("文件路径") --->返回文件
--->打开并返回文件内容 自动识别文件类型,再responseheaders中加入
--->content-type:文件类型 --可以被客户端识别的文件类型
--->不能识别的类型,下载处理 --浏览器会下载(这是浏览器处理)
jsonify("字符串或数据类型") --->返回标准格式的json字符串
--->content-type:application/json == 标准格式
-------------------------
return d #暂时不建议使用 兼容性差
之间返回dict时,本质上在执行jsonify
API接口
重定向
再ResponseHeaders中加入了一个localtion:http://url
flask中的request
在路由的装饰器中添加路由的运行请求方式
@app.route('/login',methods=["POST","GET"])
def ....
...
flask中的debug模式
app.debug=True #开启debug模式
修改代码会自动重启
request获取post参数
request.form 获取formdata中的数据
request.form.to_dict() 获取dict类型数据
request获取get参数
request.url #get请求的请求地址
request.values #接收所有请求的数据(url,formdata中的数据)
request.url_charset #url的编码方式
request.url_root #完整请求地址 host
request.url_rule #请求路由地址
request.files #接收上传的文件
--->ret.save(保存路径) 就可以直接保存文件
request.args #获取url中的数据
支持to_dict() 方法
获取其他的数据
Request.headers
request.cookies
request.path == request.url_rule
request.host
request.host_url
特殊的提交方式数据获取
如果:content-type :application/json
--->在request.json 获取数据
获取原始请求体中的数据
只会在content-type无法被识别时或 不包含form字眼
request.data --->bytes类型
flask中的session
from flask import session
开启session
app.secret_ket="复杂字符串"
session['user']=request.form.get("")
session 服务器端的键值对
--->flask 交由客户端保管机制
开启:
开启session ---session[username]=123 ---{username:123}
序列化字段 ==字符串
加密字符串 secretKey密钥字符串
接收:
从cookie中获取到一个教sessionKey的值
通过secretkey 解密session
反序列化成字典
cookie 客户端的键值对
Jinja2
{{ }} 引用变量数据,以及执行函数
{% %} 逻辑代码
全局函数
@app.template_global() #使用全局装饰器装饰函数
def aa(a,b):
return a+b
<p>{{ aa(10,2) }}</p> #在html模板中直接{{}}调用函数,并传参.