flask_蓝图的使用方法

flask_蓝图的使用方法

蓝图 Blueprints:

  • 蓝图:个人理解,将一个的请求通过蓝图定义的路由映射关系,找到已定义好的请求体(函数)中,然后通过Flask向外返回一个响应。这就是蓝图的作用。
  • 从项目项目的整体来看,蓝图是是将一个目录模块化。

学习内容:

1、 蓝图的使用demo。 2、 项目中蓝图的构建方式

一:蓝图的使用demo

简单的蓝图使用案例:
要实现一个http://127.0.0.1:5000/auth/register
flaskr/auth.py:

from flask import  Blueprint
bp = Blueprint('auth',  url_prefix='/auth')


@bp.route('/register', methods=('GET', 'POST'))
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        db = get_db()
        error = None

        if not username:
            error = 'Username is required.'
        elif not password:
            error = 'Password is required.'
       elif db.execute(
            'SELECT id FROM user WHERE username = ?', (username,)
        ).fetchone() is not None:
            error = f"User {username} is already registered."
# 以下是数据库的操作
        if error is None:
            db.execute(
                'INSERT INTO user (username, password) VALUES (?, ?)',
                (username, generate_password_hash(password))
            )
            db.commit()
            return '<h1>注册成功</h>'

flaskr/init.py:

def create_app():
    app = Flask(__name__)
    # existing code omitted

    from . import auth
    app.register_blueprint(auth.bp)

    return app

如果想在请求响应之前做出某些事情可以加@bp.before_app__request,例如:

flaskr/auth.py:

@bp.before_app_request
def load_logged_in_user():
    user_id = session.get('user_id')

    if user_id is None:
        g.user = None
    else:
        g.user = get_db().execute(
            'SELECT * FROM user WHERE id = ?', (user_id,)
        ).fetchone()

# 工程结构化蓝图目录demo 1. 工程目录结构demo: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531100932256.png) 2. 在controllers目录下创建__init__.py文件,并引入并注册controllers目录中的book.py和user.py所处理路由请求。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531101230865.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZveDU4NDgzMjYzNg==,size_16,color_FFFFFF,t_70) 3. 通过蓝图在book.py和user.py中处理具体的请求,例如: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531101458377.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZveDU4NDgzMjYzNg==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021053110160448.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZveDU4NDgzMjYzNg==,size_16,color_FFFFFF,t_70) 4. 在api目录下初始化蓝图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531101828891.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZveDU4NDgzMjYzNg==,size_16,color_FFFFFF,t_70)

结论

1. 更加理解了路由在Flask中的使用方法
2. 理解了路由的定义和工程结构化使用
3. 学习了如何使用请求前的处理函数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

求索永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值