Flask基础(一)
1.入门Flask
pip3 install Flask; Tips警告!!!:不要使用工具中的插件创建Flask项目
安装完Flask会有几个附加包,其中各个包应用
Jinja2 用于模板
MarkupSafe 防止xss攻击,用于render
Werkzeug 就是WSGI,承载Flask应用
from flask import Flask # app = Flask("app.py") # 给应用起个名字,通常为当前文件名,可以用 __name__ app = Flask(__name__) # 以后用这个 if __name__ == '__main__': app.run()
Flask 的 Hello World
from flask import Flask, render_template, redirect, send_file, jsonify # app = Flask("app.py") # 给应用起个名字,通常为当前文件名 app = Flask(__name__) @app.route("/") # 路由 def home(): return "hello Word I am Flask" if __name__=='__main__': app.run()
3.Flask 中的 Response
| 响应类型\模板对比 | Django | Flask |
|---|---|---|
| 返回字符串 | HttpResponse("str") | " str " |
| 响应模板 | render() | render_template("index.html") |
| 重定向 | redirect("/") | redirect("/") |
以上是Web框架的 Response 三剑客
响应模板配置
4.sendfile()
上传文件
@app.route("/file") def file(): return send_file('app.py') # 返回文件内容,自动识别文件类型,Content-type中添加文件类型,Content-type:文件类型 ** 浏览器特性 可识别的Content-type 自动渲染 不可识别的Content-type 会自动下载
5.jsonify()
@app.route("/get_json") def get_json(): d = {"k":"v"} # return d # return jsonify("Hello Word") # 返回标准格式的JSON字符串 先序列化JSON的字典,Content-type中加入 Application/json ** Flask 1.1.1 版本中 可以直接返回字典格式,无需jsonify
6.Flask中的Request
| 返回结果 | |
|---|---|
| request.method | ["GET","POST"] |
| request.path | # /login,返回url |
| request.url | # /http://127.0.0.1:9527/login?id=1,返回完整路径 |
| request.host | # 127.0.0.1:5000,返回主机地址 |
| request.cookies | # cookies |
| request.files | # request中的文件,返回FileStorage中,存在sava保存文件,filename原始文件名 |
| request.form | # FormData中的数据,返回ImmutableMultiDict类型,可用to_dict转化为字典 |
| request.args | # id=1,url中的数据 |
| request.data | # 请求头中不含有 Form FormData 保存原始请求体中的数据 b"" |
| request.json | # 请求头中带有content-type:application/json,如果没有在data中 |
| request.values | # 获取url和form数据,如果key相同,url会覆盖form。一般不用!!!!!! |
7.Jinja2 ------ template语言
{{ }} 引用
{% %}逻辑引用
与Django用法相同,但比Django多,有其它表现
# 当传入字典列表时,获取字典值的方法 {% for student in stu_l %} <tr> <td>{{ student.name }}</td> <td>{{ student["age"] }}</td> <td> {% if student.get("gender") != '男' and student.get("gender") != '女' %} 女 {% else %} {{ student.get("gender") }} {% endif %} </td> </tr> {% endfor %}
# 当传入字典套字典时,两种不同方式 {% for skey in stu_d %} <tr> <td>{{ skey }}</td> <td>{{ stu_d[skey].name }}</td> <td>{{ stu_d.get(skey).age }}</td> <td>111</td> </tr> {% endfor %} {% for k,v in stu_d.items() %} <tr> <td>{{ k }}</td> <td>{{ v.name }}</td> <td>{{ v.get("age") }}</td> <td>111</td> </tr> {% endfor %}
扩展——生成标签
方式一:模板直接生成标签
{% macro my_input(na,ty) %} # 找到my_input并接收变量
<input type="{{ ty }}" name="{{ na }}">
{% endmacro %}
{{ my_input("username","password") }} # 开始生成
# 从而生成一个input标签,其类型为password,name值为username
方式二:后台传入标签
# 后台中 from flask import Markup # 先导入模块 inp = Markup("<input type='submit' value='后端返回按钮'>") # 后台定义并返回 return render_template("my_a.html",btn=inp) # 模板中 {{ btn }} # 直接使用 ------------------------------------------------------------------- # 如果要生成的标签多,可以使用全局模板 @app.template_global() # 使用方法: # 1.先写一个方法 # 2.为这个方法加上 @app.template_global() 装饰器 # 3.模板中进行使用 # 后台 @app.template_global() def my_inp(ty,na): s = f"<input type='{ty}' value='{na}'>" return Markup(s) # 模板中 {{ my_inp('submit','text') }} # 后台中的 函数名(参数1,参数2)
8.Flask中的Session
基于请求上下文管理机制
使用方法:
-
先导入session
-
设置secret_key的值(随便设置)
from flask import session app.secret_key = "@#$E@#$"

浙公网安备 33010602011771号