day 117 session 數據庫鏈接池 Flask的所有回顧

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
        
    
    
相關文章
相關標籤/搜索