Flask要点理解

路由端点

通常,我们使用app.route()装饰器将视图函数注册为路由。如果不使用该装饰器,也可以采用app.add_url_rule(rule, endpoint, view_func)方法注册路由。如下:

app = Flask(__name__)

# 方法一
@app.route('/hello')
def greet():
return 'Hello.' # 方法二
def greet():
return 'Hello.'
app.add_url_rule('/hello', 'greet', 'greet')

URL规则和视图函数之间是通过端点来映射的(默认情况下端点是视图函数的名称),即

/hello(URL规则)-->greet(端点)-->greet(视图函数)

对于上面的方法一,我们也可以显示的使用endpoint参数来改变端点,而不是默认使用视图函数的名称,如下:

@app.route('/hello', endpoint='hello')
def greet():
return 'Hello.'

这时映射规则变成这样,/hello(URL规则)-->hello(端点)-->greet(视图函数)


:为什么引入端点的概念?

:使用端点可以实现蓝本的视图函数命名空间。

我们分别在蓝本A和蓝本B中创建一个名为index的视图函数,并将这两个蓝本注册到程序实例上,如下:

# project/app_package/blueprints_package/blueprint_A.py
from flask import Blueprint a_bp = Blueprint('A', __name__) @blog_bp.route('/')
def index():
return 'index'
# project/app_package/blueprints_package/blueprint_B.py
from flask import Blueprint b_bp = Blueprint('B', __name__) @blog_bp.route('/')
def index():
return 'index'
# project/app_package/__init__.py
from flask import Flask
from app_package.blueprints_package.blueprint_A import a_bp
from app_package.blueprints_package.blueprint_B import b_bp app = Flask('app_package')
app.register_blueprint(a_bp, url_prefix='/A')
app.register_blueprint(b_bp, url_prefix='/B')

接着我们使用命令flask routes查看当前程序注册的所有路由,返回结果如下:

$ flask routes
Endpoint Methods Rule
------------- ------- ---------------------------
A.index GET /A/
B.index GET /B/
static GET /static/<path:filename>

从输出结果可以看出,每个路由的URL规则(Rule)对应的端点(Endpoint)不再仅仅是视图函数名,而是“蓝本名.视图函数名”的形式,即扩展了端点的命名空间,解决了不同蓝本中视图函数重名的问题。

Flask端点概念的更多相关文章

  1. ASP.NET Core端点路由 作用原理

    端点路由(Endpoint Routing)最早出现在ASP.NET Core2.2,在ASP.NET Core3.0提升为一等公民. Endpoint Routing的动机 在端点路由出现之前,我们 ...

  2. 实验5、Flask设计模式和Web服务体验

    1. 实验内容 Flask appbuilder包括基本的表单验证,内置管理模块.本节主要学习Flask appbuilder的后台管理模块使用和对Flask设计模式拓展作简要介绍 2. 实验要点 掌 ...

  3. 《python核心编程》读书笔记--第16章 网络编程

    在进行网络编程之前,先对网络以及互联网协议做一个了解. 推荐阮一峰的博客:(感谢) http://www.ruanyifeng.com/blog/2012/05/internet_protocol_s ...

  4. [XBee] ZigBee学习笔记

    转自:http://blog.csdn.net/wanghanjiett/article/details/6931867 几个重要概念: node(节点): 在zigbee堆栈中最多有三种节点:Coo ...

  5. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  6. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  7. Python高手之路【十三】socket网络编程

    什么是客户/服务器架构? 什么是客户/服务器架构?不同的人有不同的答案.这要看你问的是什么人,以及指的是软件系统还是硬件系统了.但是,有一点是共通的:服务器是一个软件或硬件,用于提供客户需要的&quo ...

  8. python实现TCP/UDP通信

    一.说明 对于TCP/udp的说明已经很多了,我在这里只是简单的说明一下 二.套接字scoket 套接字是一种具有之前所说的"通信端点"概念的计算网络数据结构.相当于电话插口,没它 ...

  9. (二)Wireshark的实用表格

    主要内容: 1.了解端点概念,学习如何在Wireshark中查询端点信息 2.学习利用端点窗口与会话窗口来分析数据包的特点 3.学会Wireshark的协议分层统计窗口的用法 一.端点概念 和数学里的 ...

随机推荐

  1. IPEX-1代/3代/4代/5代,PCB天线底座,公头,样式及封装尺寸图

    1.IPEX-1代,PCB天线底座 2.IPEX-3代,PCB天线底座 3.IPEX-4代,PCB天线底座 4.IPEX-5代,PCB天线底座

  2. 隐马尔科夫模型 HMM(Hidden Markov Model)

    本科阶段学了三四遍的HMM,机器学习课,自然语言处理课,中文信息处理课:如今学研究生的自然语言处理,又碰见了这个老熟人: 虽多次碰到,但总觉得一知半解,对其了解不够全面,借着这次的机会,我想要直接搞定 ...

  3. 教你如何使用github+jsDelivr搭建免费图床

    前言 之前写了一篇文章,教你如何使用Typora+PicGo实现图片自动上传到图床 . 这里我用的是七牛图床,七牛图床有一定的免费使用量(没记错的话应该是10个G),如果你的存储量超过这个大小就需要付 ...

  4. STM32入门系列-学习STM32要掌握的内容

    STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...

  5. Boxing

    测试自动装箱和自动拆箱,意思是运行的时候编译器帮我们加了两个代码: public class AutoBoxingandUnBoxing { public static void main(Strin ...

  6. Pycharm同步远程服务器调试

    Pycharm同步远程服务器调试 1.需要准备工具 xftp:上传项目文件 xshell:连接Linux系统调试,执行命令 PyCharm:调试python代码 这些软件可以自行网上搜索下载,也可以关 ...

  7. 9_Palindrome Number

    9.Palindrome Number Determine whether an integer is a palindrome. An integer is a palindrome when it ...

  8. dat.GUI 打造可视化工具(一)

    前言 有时候学习api其实我们可以从源码的角度学习,因为有时候很多文档写的太不清楚了,自己都是慢慢去试,去猜,去实现其实也是挺浪费时间的,面对未知的一脸蒙蔽,偶尔烦躁,其实需要的是自己静下心来慢慢研究 ...

  9. sdasd

    create PROCEDURE v4(in c_year int) BEGIN declare num int(10) default 0; declare num1 int(10); select ...

  10. 【QT】QtConcurrent::run()+QThreadPool实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> <子类化QObject+moveToThread实现多线程> <继承QRunnab ...