1. 程式人生 > >Flask之初識

Flask之初識

Flask初識

  1.和幾種框架的對比 

  Django :
    優點:大 元件全 session models
    缺點:所有資源全部載入,造成資源上一定的浪費

  Flask :
    優點:小 短小精悍 session 三方元件多太多了
    缺點:穩定性相對而言較差

  Tornado:
    優點 :非同步 IO 非阻塞 原生Websocket

  2.由於之前已經學習過Django,所以Flask可基於Django框架學習

    2.1 安裝  pip install flask

    2.2 啟動flask:

      from flask import Flask
      app = Flask(__name__)
      app.run("0.0.0.0",5000,debug=True)

    2.3 flask的路由

      @app.route("/home",methods=["GET","POST"])

    2.4 Response三劍客 + 小兒子:

      return "hello s13 students"                           # Django HttpResponse 返回字串
      return render_template("index.html")           # 返回模板
      return redirect("/index")                                # 重定向跳轉
      小兒子
      return send_file("2.mp3")                             # 開啟檔案並返回客戶端
      return jsonify({"name":"yinwangba"})           # 返回標準的json格式字串 content-type: application/json

    2.5 Request:

      # print(request.form)           # form   存放form表單中的序列化資料
      # print(request.args)           # args    存放URL中的序列化資料
      # print(request.values)          # values   存放URL和form表單中的序列化資料
      # print(request.method)                # method    存放請求方式
      # print(request.path)           # path   路由地址
      # print(request.url)              # url      請求全部地址 http://127.0.0.1:5000/home?id=jwb&username=ywb
      # print(request.host)           # host         主機位 127.0.0.1:5000
      # print(request.host_url)          # host_url   將主機位轉成url http://127.0.0.1:5000/
      # print(request.data)           # data         當請求頭content-type無法被識別時
      # print(request.json)           # json         當請求頭content-type:application/json
      # print(request.headers)          # headers  檢視請求頭
      # print(request.files.get("file"))         # files         獲取檔案物件
      # file = request.files.get("file")
      # file.save(file.filename)

    2.6 Jinja2:

      a.模板

      {{}} 引用變數 非邏輯程式碼時使用
      {%%} 邏輯程式碼使用

      b.返回安全字元
      | safe
      Markup : from flask import Markup 後臺返回安全標籤字串

      c.模板繼承
      {% block jj2 %}
      {% include "login.html" %}
      d.巨集的概念
      {% macro func(name,type_name) %}
      <input type="{{ type_name }}" name="{{ name }}">
      <input type="submit" value="提交檔案">
      {% endmacro %}
      {{ func("file","file") }}

    2.7 Flask中的Session元件:

      from flask import session
      app.secret_key = "OldBoyEdu.com"
      session被序列化後存放在 瀏覽器的cookie中

    2.8 特殊裝飾器:

      @app.template_global()
      def a_and_b(a,b):
      return a+b

      @app.template_filter()
      def abc(a,b,c):
      return a+b+c