2018年11月21日 Flask全回顧: 1.Flask啓動: from flask import Flask app = Flask(__name__) app.run("0.0.0.0",5000,debug=True) 2.Flask中的路由 + 路由配置 1.@app.route("/index") app.add_url_rule("/index",endpoint="index",view_func=index,**options) def index(): return "123" 2.動態路由參數 @app.route("/index/<nid>",endpoint) def index(nid): url_for(endpoint,nid=1) 配置 @app.route( "/index", methods=["GET","POST"], # 容許進入視圖函數的請求方式 endpoint="123", # 反向URL地址 defaults={nid:1}, # 默認參數 strict_slashes=True, # 是否嚴格要求路由地址 "/" redirect_to="/login" # 重定向跳轉 請求進入視圖函數以前 301 ) def index(nid) url_for(endpoint) # 反向生成URL 3.Response三劍客 + 小兒子: from flask import render_template,redirect HttpResponse return "小兒子" render return render_template("index.html") redirect return redirect("/login") 小兒子: from flask import send_file,jsonify return send_file() #打開並返回文件內容 return jsonify({"nid":1}) # 返回標準的JSON格式字符串 content-type:application/json 4.Request from flask import request 數據獲取: request.form # 獲取form表單中的數據 request.json # 請求頭:Content-type:application/json request.data # Content-type沒法被識別的時候 b"" request.args # URL參數 屬性: request.method # 獲取請求方式 request.path # 獲取路由地址 /index request.url # 獲取所有請求地址 http://127.0.0.1:5000/index/aaaa request.host # 獲取主機地址:127.0.0.1:5000 5.Jinja2 {{}} 引用 執行 非邏輯 {%%} 邏輯 if for from flask import Markup Markup("<a>連接</a>") | safe 6.session app.secret_key = "asdf123" app.permanent_session_lifetime # 聲明週期 31天 session["key"] = "value" 在flask中session放在客戶端的cookie中 7.Flask實例化配置 template_folder = "temp" # 更改模板存放目錄 static_folder = "" # 靜態文件存放目錄 默認 static static_url_path = "/" # 靜態文件訪問路徑 默認 /static_folder 8.Flask配置 app.config.from_object(SettingClass) # SettingClass 中配置必須爲大寫 9.藍圖 Blueprint 一個不能被run的Flask實例 from flask import Blueprint bp = Blueprint("bp",__name__,url_perfix="/bp") template_folder #當前目錄 相對路徑 static_folder #當前目錄 相對路徑 url_perfix="/bp" # 藍圖前綴 @bp.route("/bpindex") def bpindex(): app.register_blueprint(bp) 10.特殊裝飾器 @app.template_global() # 全局函數 模板調用 @app.template_filter() # 帶篩選的全局函數 偏函數 1 | template_filter() @app.before_request # 請求進入視圖函數以前調用 @app.after_request # 響應返回客戶端以前調用 正常狀況下:be1 - be2 - af2 - af1 異常狀況下: be1 - af2 - af1 @app.errorhandler(404) # 重定義報錯頁面 def error404(res) 11.Flash from flask import falsh,get_falshed_messages def func1(): falsh("123456") # [] - "123456" - ["123456"] def func2(): get_falshed_messages() # ["123456"] - [] @app.before_first_request # 基於flash實現的 12.Flask CBV from flask import views class IndexView(views.MethodView): def get(self): pass app.add_url_rule("/index",view_func=IndexView.as_view(name="index")) 今日內容: 1.Flask中的CBV from flask import views class IndexView(views.MethodView): def get(self): pass app.add_url_rule("/index",view_func=IndexView.as_view(name="index")) 2.Flask-Session from flask_session import Session app.config["SESSION_TYPE"] = "redis" app.config["SESSION_REDIS"] = Redis() Session(app) session["key"] = "value" 3.WTForms 由後端生成表單,具備校驗功能 from wtforms.fields import simple,core from wtforms import Form,validators class LoginForm(Form): username=simple.StringField( label = "username", validators=[ validators.DataReqired(messges="不能爲空"), validators.Length(min=4,max=8,messges="4 < x < 8"), ], render_kw = {"class":"kkkk"} ) lf = LoginForm() render_template("login.html",lf = lf) <form method="post"> {% for f in lf %} <p>{{ f.label }} : {{ f }}{{ f.errors.0 }}</p> {% endfor %} <p><input type="submit" value="註冊"></p> </form> lf = LoginForm(request.form) if lf.validata(): OK else: render_template("login.html",lf = lf) 4.DBUtils: 詳見: https://www.cnblogs.com/DragonFire/p/9498396.html