• flask 基础语法学习


    回顾

    #6行flask
    from flask import Flask
    app = Flask(__name__)
    @app.route("/")
    def index():
        return "HelloWorld!!"
    app.run()

    1.response

    from flask import render_template,redirect,send_file,jsonify
    return =httpresponse
    render_template
    redirect
    特殊返回值
    1.send_file(文件路径) 打开文件并返回文件内容 Content-Type 文件类型 自动识别
    2.jsonify({k:v}) Content-Type:application/json app.config["JSONIFY_MIMETYPE"]

    2.request

    request.method 请求方式
    request.args url参数
    print(request.args.to_dict())#转换成字典
    request.form FormData 数据
    request.json #请求头 Content-Type:application/json 数据序列化至此
    request.data 只要请求体中有内容 b"
    request.files 接收FormData中的文件

    3.session

    from flask import session
    app.secret_key="123213"
    session["user"]="username"

    4.路由

    动态参数
    @app.route("/detail/<stu_id>")
    def detail(stu_id)
        1.endpoint Flask Mapping 路由和视图的指向
        2.methods 允许进入视图函数的请求方式

    5.初始化配置

    Flask(__name__) 中
    1.template_folder 模版存放路径
    2.static_folder 静态文件存放路径
    3.static_url_path 金泰文件访问路径

    6.config对象 正式测试环境

     2.Flask对象配置
        app.config == app.default_config 查看默认配置 及 配置项
        
        class Obj(object):
            DEBUG = True
        
        app.config.from_object(Obj) # 记住

    7.蓝图

    Flask蓝图 
        Blueprint:  bp.py
        from flask import Blueprint
        # 把Blueprint理解为 不能被 Run 的 Flask 对象
        bp = Blueprint("bp",__name__,url_prefix="/user")
    
        @bp.route("/bp",methods=["GET","Post"])
        def my_bp():
            return "I am bp in user.py"
        
        __init__py
        from flask import Flask
        from .views import add
    
        def create_app():
            app=Flask(__name__)
            app.register_blueprint(add.add)
            return  app
        
        app.py:
        from flask import Flask
        from user import bp
        from acc import acc
        app = Flask(__name__)
    
        app.register_blueprint(bp)
        app.register_blueprint(acc)
    
        if __name__ == '__main__':
            app.run(debug=True)

    8.特殊装饰器 中间件

    @app.before_request # 在请求进入视图函数之前
    @app.after_request # 结束视图函数之后,在响应返回客户端之前
    def af5(ret):
    
    正常 be1 - be2 - vf - af5 - af4 - af3 - af2 - af1
    异常 be1 - af5 - af4 - af3 - af2 - af1
    
    @app.errorhandler(404)
    def error404(error_message):

    9.CBV

    from flask import views
    
    class Login(views.MethodView):
        def get(self):
            pass
        
        def post(self):
            pass
    
    app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))
    
    endpoint == as_view(name="login") 中的 "login"

    jianjin2 模版

        {{}} 引用 执行函数
        {%%} 逻辑代码
    
        {{ stu_list[0].name }}{{ stu_list.0.age }}
        {{ stu_dict }}
    
    {% for stu in stu_list %}
        <p>{{ stu.name }}{{ stu.get("age") }}{{ stu["gender"] }}</p>
    {% endfor %}
    #if判断
    {% if v["gender"] == "" %}
        男
    {% else %}
        {{ v["gender"] }}
    {% endif %}
    
    自定义标签simple_tag
    
    @app.template_global()#全局使用 可选
    def ab(a,b):
        return a+b
     html中引入
     {{ ab(4,4) }}
     
     前端执行html
    @app.route("/")
    def index():
        tag = "<input type='text' name='user' value='xiao'>"
        return render_template("index.html",tag=tag)
    <body>
    
        {{ tag|safe }}
    
    </body>
    
    后端执行html
    from flask import Markup  # 导入 flask 中的 Markup 模块
    @app.route("/")
    def index():
        tag = "<input type='text' name='user' value='xiao'>"
        # Markup帮助咱们在HTML的标签上做了一层封装,让Jinja2模板语言知道这是一个安全的HTML标签
        markup_tag = Markup(tag)
        print(markup_tag,type(markup_tag))
    
        return render_template("index.html", tag=markup_tag)
        
    母板
    index.html
    <body>
        <h1>Welcome to My</h1>
        <h2>下面的内容是不一样的</h2>
        {% block content %}
    
        {% endblock %}
        <h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
        <h1>My is Good</h1>
    </body>
    login.html
    {% extends "index.html"%}
    {% block content %}
    {% endblock %}
    
    include jinja2
    login.html
    <h4>欢迎登陆</h4>
    <form>
        用户名:<input type="text" name="user">
        密码:<input type="text" name="pwd">
        <input type="submit" value="提交">
    </form>
    
    index.html 文件中的内容
    
    <body>
    
        <h1>Welcome to My</h1>
    
        {% include "login.html" %}
        <h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
    
        <h1>My is Good</h1>
    
    </body>

    flask 上下文管理
    分为3个阶段
    1,请求进来时,将请求相关的数据放入上下问管理中
    2,在视图函数中,要去上下文管理中取值
    3,请求响应,要将上下文管理中的数据清除

    详细点
    请求刚进来, 将request,session封装在RequestContext类中,app,g封装在AppContext类中
    并通过LocalStack将requesttext和appcontext放local类中
    2,视图函数中,通过localproxy-->偏函数-->locastack-->local取值
    3,请求响应时,先执行save.session()在各自执行pop(),将local中的数据清楚

    http://www.cnblogs.com/zhaopanpan/p/9457343.html

  • 相关阅读:
    jstl标签
    get和post
    try中的局部变量在finally中是找不到的。
    bzoj 4408: [Fjoi 2016]神秘数 数学 可持久化线段树 主席树
    ZOJ2112 BZOJ1901 Dynamic Rankings 树套树 带修改的区间第k小
    BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树
    POJ2104 K-th Number 不带修改的主席树 线段树
    POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd
    POJ1151 Atlantis 水题 计算几何
    BZOJ 2333: [SCOI2011]棘手的操作 可并堆 左偏树 set
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10699100.html
Copyright © 2020-2023  润新知