首页 > 其他分享 >07.蓝图与视图

07.蓝图与视图

时间:2023-11-19 18:44:38浏览次数:26  
标签:__ 07 蓝图 视图 user router 路由 name

蓝图与视图

简介

Flask 中的蓝图(Blueprint)是一种组织和管理应用程序路由和视图的机制。它允许开发者将相关功能的路由和视图进行分组,从而更好地组织项目结构和实现模块化开发。蓝图可以极大地简化大型应用并为扩展提供集中的注册入口。

Flask 可以通过蓝图来组织 URL 以及处理请求。如果使用蓝图,应用会在 Flask 层中进行管理,共享配置,通过注册按需改变应用对象。蓝图的缺点是一旦应用被创建后,只有销毁整个应用对象才能注销蓝图。

一个项目可以具有多个蓝图。但是一个蓝图并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。

应用场景

  1. 项目复杂度增加,路由和视图函数增多。
  2. 路由需要结构化,模块化进行管理。

蓝图使用

创建蓝图对象

要使用蓝图,首先要声明一个蓝图对象。

from flask import Blueprint

# 1. 蓝图的声明
goods_router = Blueprint(name="goods", import_name=__name__)

  • 参数说明:
    • name:蓝图的名称
    • import_name:蓝图所在的模块 ,一般定义为 __name__

这两个是必填参数。

定义路由

声明了蓝图之后,就可以获得蓝图对象 goods_router。接下来需要使用蓝图对象去定义路由。

# 2. 路由定义
@goods_router.route("/")
def index():
return {"code":0, "msg": "get success", "data": []}


@goods_router.route("/add", methods=["POST"])
def add_goods():
return {"code":0, "msg": "add success"}

路由定义需要使用 / 开头。如果需要指定非 GET 的请求方法,同样通过 methods 参数指定,methods 的值为列表。

注册蓝图对象

当完成上面两步以后,就可以去验证一下路由。需要在启动 flask 服务之前,将蓝图注册到 flask 启动对象中:

from flask import Flask

app = Flask(__name__)


if __name__ == '__main__':
# 注册蓝图
app.register_blueprint(goods_router)
app.run(port=5055, debug=True)

应用启动后,通过 / 和 /add 就可以访问到到蓝图中定义的视图函数。

定义 URL 前缀

当在应用对象上注册一个蓝图时,还可以指定一个 url_prefix 关键字参数,该参数是字符串类型,并且必须以 / 开头,默认是 /

它的作用是在蓝图上注册的路由 URL 自动会加上这个前缀。这样可以保证在多个蓝图中使用相同的 URL 规则而不会最终引起冲突。这样就可以在不同的前缀下定义行为,比如增删改查。

from flask import Blueprint

user_router = Blueprint("user", __name__, url_prefix="/user")


@user_router.route("")
def user_list():
return {"code": 0, "msg": "get success", "data": []}


@user_router.route("/login", methods=["POST"])
def login():
return {"code": 0, "msg": "login success"}


if __name__ == '__main__':
# 注册蓝图
app.register_blueprint(user_router)
app.run(port=5055, debug=True)

当设置了 url_prefix 参数后,定义路由时,如果路由直接使用 url_prefix 的值,则 route() 方法中传入空字符串即可。

如果需要在 url_prefix 值的基础上再加下一级路由,则在 route() 方法中传入对应路由即可,需要使用 / 开头

此时,如果访问的是http://127.0.0.1:5055/login,会报错 404

这就是参数 url_prefix 起了作用,需要在访问路由的时候,加上前缀 /user,也就是 /user/login 才可以访问成功。

标签:__,07,蓝图,视图,user,router,路由,name
From: https://www.cnblogs.com/csfsz/p/17842386.html

相关文章

  • #2023-2024-1 20232307 《网络》第二周学习总结
    教材内容学习总结教材学习中的问题和解决过程-问题一:公钥私钥的区别及用途问题一解决方案:询问chatGPT公钥(PublicKey):公钥是由私钥生成的,可以自由地公开和共享给其他人使用。公钥用于加密数据或验证数字签名。公钥可以安全地分发给其他人,而不会泄露私钥的机密性。公钥对......
  • [SHOI2007] 园丁的烦恼
    [SHOI2007]园丁的烦恼题目背景很久很久以前,在遥远的大陆上有一个美丽的国家。统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草。有一天国王漫步在花园里,若有所思,他问一个园丁道:“最近我在思索一个问题,如果我们把花坛摆成六个六角形,那么……”......
  • 2023-2024-1 20231307《计算机基础与程序设计》第8周学习总结
    作业信息作业属于的课程<班级链接>(2022-2023-1-计算机基础与程序设计)作业要求<作业要求>(2022-2023-1计算机基础与程序设计第一周作业)作业目标《计算机科学概论》第9章和《C语言程序设计》第7章作业正文https://www.cnblogs.com/lzt-/p/17841598.html教材学......
  • P7907 [Ynoi2005] rmscne 题解
    P7907[Ynoi2005]rmscne题解退役前的最后一篇题解,献给Ynoi。再见了各位。题目大意给定一个长度为\(n\)的序列和\(m\)次查询,对于每次查询,给定\(l,r\),求出一个最短的子区间\([l',r']\),满足所有在区间\([l,r]\)中出现的数也在\([l',r']\)中出现过。题解题还是很......
  • 菜单点菜2-5次以及期中考试分析-21207310姜昊
    本次分析菜单2-4,以及期中考试题目,总体来说题目有一定难度,但仍可完成,主要从菜单1过度到2,3时要确定好方向,否则会产生一些无法解决的问题7-4菜单计价程序-2分数:38输入样例:在这里给出一组输入。例如:麻婆豆腐12油淋生菜91麻婆豆腐222油淋生菜13end输出样例:在这......
  • 21207106-xuesong
    菜单系列题及期中总结一、前言这次博客是主要对菜单系列题目和期中题目总结,菜单系列题目包括菜单计价程序-3、菜单计价程序-4、菜单计价程序-5,菜单系列题目,主要是考察对类的创建,怎么设计合适的类,类与类之间的关系,考察了封装,继承,依赖等。其次是考察对正则表达式判断输入格......
  • 视图简单入门
    1视图函数views.py函数(可以不放在views中,但是通常放在里面)2视图函数之请求对象 -#1请求方式(GET,POST)浏览器地址栏中发出的请求都是get请求 print(request.method)-#2请求参数get请求这种形式:http://127.0.0.1/index?name=lqz&age=18print(request.G......
  • 05. 视图
    一、什么是视图函数  视图函数,简称视图,是一个Python函数,它接收Web请求并返回Web响应。响应可以是一个HTML文件、一个重定向、一个404错误、一个XML文档、或者一张图片等等,它可以是任何东西。无论视图本身包含什么逻辑,都要返回响应。逻辑处理代码写在哪里都可以,只要......
  • P1098 [NOIP2007 提高组] 字符串的展开(总结)
    P1098[NOIP2007提高组]字符串的展开http://ww.luogu.com.cn/problem/P1098注意字符中的数字是默认小于字母的。所以要对数字做特判。#include<iostream>#include<string>usingnamespacestd;intmain(){ intp1,p2,p3; cin>>p1>>p2>>p3; strings; cin......
  • 06_二叉树的右视图
    二叉树的右视图给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例1:输入:[1,2,3,null,5,null,4]输出:[1,3,4]示例2:输入:[1,null,3]输出:[1,3]示例3:输入:[]输出:[]提示:二叉树的节点个数的范......