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
        
    
    
相关文章
相关标签/搜索