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的主要内容,如果未能解决你的问题,请参考以下文章

12_关于flask中的宏

Flask之模板之宏继承包含

Flask模板宏的概念和基本使用

python flask(多对多表查询)

python后端 flask框架 计算时间差 并根据时间差条件返回flag值

python后端 flask框架 计算时间差 并根据时间差条件返回flag值