flask基础二

Posted yb635238477

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask基础二相关的知识,希望对你有一定的参考价值。

昨日内容回顾:
    Flask 短小精悍
        稳定性相对较差
        
    Django 大而全
        造成一定的资源浪费

Flask
    1.路由
        @app.route("/",methods=("GET","POST"))
    
    2.视图函数
        @app.route("/",methods=("GET","POST"))
        def index():
            return "123"
    
    3.返回值:
        1.Response  "yinwangba"
        
        2.from flask import render_template
            render_template return render_template("index.html") # 默认情况下模板存放在 templates
            
        3.from flask import redirect
            return redirect("/login")
        
    4.request(全局变量,独有机制--Flask请求上下文管理)
        存储数据:
            request.args.get("name") url中取值
            request.form.get("name") formdata取值
            request.json # content-Type: app/json
            request.data # content-Type: xiaowanba
            request.values # 禁用
        
        属性数据:
            request.method
            request.url
            request.path  "/login"
    
    5.Jinja2
        {{ 非逻辑的 引用变量 执行函数 被夹杂在for if }}
        {% 逻辑代码 %}
        macro 宏指令
    
    6.Session
        app.secret_key = "加密字符串"
        session["user"] = "username"
        
        加密session之后存放在cookies,
        请求到来带上cookie 将session反序列化后拿到数值
 今日内容:

1.装饰器基于session访问控制
        endpoint可以解决视图函数重名的情况

昨天在访问视图函数的时候,我们加上了session的认证,

技术分享图片

这个认证的功能是如果用户没有session,就说明用户没有登录,需要先让他登录才能让他访问。

但是如果我们有很多个视图函数,上面那两行代码就要写很多遍,这样就很麻烦。所以我们再写一个装饰器,这个装饰器用来专门坐验证。

技术分享图片

装饰器写完了,那应该放在视图函数的哪呢?

技术分享图片

这样装饰了一个视图函数可以,但是把这个装饰器同样装饰在了另一个函数上,就会报错,

技术分享图片

这是因为同一个装饰器装饰在不同的视图函数时,重名了。

这时候需要这样一个参数endpoint,相当于给这个视图函数起了一个名字,

技术分享图片

 2.flask中的路由

 那么flask中的路由是怎么动态传参的呢?

技术分享图片

然后在访问的时候:技术分享图片

这样就传参成功了。技术分享图片

当然,也可以传一些其他的参数。

技术分享图片

如果这样传了参数,就制定了传的参数就必须是int型,

技术分享图片

之前还有一种路由的方式:app.add_url_rule("/",viewfunc=viewfunc),这种路由的参数和上面的路由的参数完全一样。

3.flask中的配置
        1.Flask实例的配置 app配置
            app.config["DEBUG"] = True
            app.config.from_object(obj)
            class obj():
                DEBUG = True
                SECERT_KEY = "123123"
        2.初始化Flask实例时的配置
            Flask(__name__)
            1.static_url_path  = "/static_folder" 访问静态目录文件时的地址 默认值是等于static_folder的名字
            2.static_folder = "static" 静态文件的存放路径
            3.template_folder=‘templates‘ 模板路径

4.Flask 中蓝图 插拔机制

我们新建一个文件夹serv,在这个文件夹下新建一个py文件,起名为add_stu.py

 技术分享图片

这样一个蓝图构造完了之后,要记得在项目中注册,即在s1.py中注册:

技术分享图片

5.before_request after_request errorheadler(404)

 之前我们给视图函数加了一个认证的装饰器,

技术分享图片

但是如果有很多视图函数,每个视图函数都要加上这么一句,显得麻烦。

接下来介绍一个before_request,

 before_request:再请求进入视图函数之前作出处理 

技术分享图片

把认证的装饰器这样改了之后,就不需要在视图函数中写了,所有的请求在视图函数之前会走这个认证。

如果有多个before_request,会按照顺序执行。

技术分享图片

打印结果:

先打印get_session1,在打印get_session2

然后就是after_request

 after_request :在请求结束视图函数之后,返回客户端之前

 技术分享图片

打印结果:

先打印after2,在打印after1.

然后是errorheadler()。

我们可以自己写

 






























































以上是关于flask基础二的主要内容,如果未能解决你的问题,请参考以下文章

flask基础之app初始化

flask基础之请求处理核心机制

flask基础(下篇)

今晚九点|Flask 基础与 Web 开发实战

视频版|Flask 基础与 Web 开发实战

明晚九点|Flask 基础与 Web 开发实战