Flask
Posted gugu-da
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask相关的知识,希望对你有一定的参考价值。
1.Flask Web框架
- Flask flask库文件
- Jinja2 模板渲染库
- MarkupSafe 返回安全标签
- Werkzeug 德文“工具” ==uWSGI 底层是WSGI
2.Flask中的Response
-
“HelloWorld” 相当于Django中HttpResponse("HelloWorld")
-
render_template("html文件") 默认存放路径templates、相当于Django中 render("html文件")
渲染并返回模板文件
-
redirect("/home")
- 302 HTTP status
- 4xx 错误客户端
- 5xx 错误服务器
-
send_file("文件路径") 返回文件
- 打开并访问文件内容
- Content-Type:文件类型(可以被客户端识别的文件类型)不能识别的类型,浏览器会下载
-
jsonify("字符串或数据类型") 返回JSON字符串
- Content-Type:application/json == 标准格式
- API接口
1.打包JSON 序列化JSON字符串
2.编写ResponseHeaders 加入Content-Type:application/json
#导入Flask类 创建Flask应用对象 from flask import Flask, send_file, jsonify from flask import render_template, redirect # app==application app = Flask(__name__) #为Flask应用对象提供路由 # @app.route("/index") #与路由绑定的视图函数,视图函数名尽可能保持唯一 # def index(): # # 相当于Django中的HttpResponse # return "HelloWorld" @app.route("/home") def home(): return render_template("home.html") #当前文件处于脚本状态时运行如下代码 @app.route("/re") def re(): return redirect("/home") @app.route("/get_file") def get_file(): return send_file(‘f1.py‘) @app.route("/get_json") def get_json(): d = { "name": "zevin999" } return jsonify(d) # return d #不建议使用,兼容性 #当前文件处于脚本状态时运行如下代码 if __name__ == "__main__": #启动Flask应用 app.run()
3.Flask中的Request
- methods=["GET","POST"] 在添加路由的装饰器中允许请求方式
- request.form获取FormData中的数据 to_dict()
- request.args
4.Flask中的Session
-
Session 服务器端的键值对、Cookie 客户端的键值对
-
交由客户端保管机制
-
开启session[username] = 123
{
username:123
}
-
序列化字典 (字符串)
-
加密字符串 secret_key
-
-
接收反序列化Session
- 从Cookie中获取到一个叫session 的值(application的cookies中查看)
- 通过secret_key解密session
- 反序列化成字典
import os
from flask import Flask, render_template, request, redirect, session
app = Flask(__name__)
app.secret_key = "@#@$$%^*^4^$$%@@&&)"
#开启Debug模式
app.debug = True
@app.route("/login", methods=["POST","GET"])
def login():
# 从request中取出请求方式
print(request)
print(request.method)
#判断请求方式
if request.method == "GET":
#请求地址
print(request.url)
#编码方式
print(request.url_charset)
#请求地址
print(request.url_root)
#请求路由地址
print(request.url_rule)
#接收所有get,post请求中的数据,url和formdata
print(request.values)
#获取url中的数据 字符串
print(request.args)
print(request.args.get("id"))
return render_template("login.html")
if request.method == "POST":
# 在Django中request.POST取出FormData
# 在Flask中获取FormData request.form
print(request.form.get("username"))
print(request.form.to_dict())
#获取一个FileStorage Flask文件特殊对象
# print(request.files.get("my_file"))
my_file = request.files.get("my_file")
new_file = os.path.join("templates", my_file.filename)
my_file.save(new_file)
#获取其他数据
# request.headers
# request.cookies
# request.path == request.url_rule
# request.host == ‘127.0.0.1:9527‘
# request.host_url == ‘http://127.0.0.1:9527/‘
#特殊提交方式数据获取
# Content-Type:application/json
#request.json 获取Content-Type:application/json时提交的数据
#Content-Type 无法被识别 或 不包含Form字眼
#request.data 获取原始请求体中的数据b
if request.form.get("username") == "zevin":
session["user"] = request.form.get("username")
return redirect("/")
return "用户名错误"
@app.route("/")
def index():
print(session.get("user"))
return render_template("index.html")
if __name__ == "__main__":
app.run("0.0.0.0", 9527)
5.jinja2
{{}} 引用变量数据 执行函数
{%%}逻辑代码
from flask import Flask, render_template
STUDENT = {‘name‘: ‘David‘, ‘age‘: ‘20‘, "gender": ‘男‘}
STUDENT_LIST = [
{‘name‘: ‘David‘, ‘age‘: ‘20‘, "gender": ‘男‘},
{‘name‘: ‘Adina‘, ‘age‘: ‘21‘, "gender": ‘中‘},
{‘name‘: ‘Sudo‘, ‘age‘: ‘22‘, "gender": ‘女‘}
]
STUDENT_DICT = {
1: {‘name‘: ‘David‘, ‘age‘: ‘20‘, "gender": ‘男‘},
2: {‘name‘: ‘Adina‘, ‘age‘: ‘21‘, "gender": ‘中‘},
3: {‘name‘: ‘Sudo‘, ‘age‘: ‘22‘, "gender": ‘女‘}
}
app = Flask(__name__)
app.debug = True
@app.template_global()
def ab(a, b):
return a+b
#查看STUDENT
@app.route("/stu")
def stu():
return render_template("stuinfo.html", stu_info=STUDENT, stu_list=STUDENT_LIST, stu_dict=STUDENT_DICT, funcab=ab)
if __name__ =="__main__":
app.run("0.0.0.0", 9527)
以上是关于Flask的主要内容,如果未能解决你的问题,请参考以下文章