首页 > 编程语言 >python-flask之路由

python-flask之路由

时间:2023-02-25 21:45:41浏览次数:67  
标签:return python app URL price flask book route 路由

简单示例如下

from flask import Flask
app = Flask(__name__)


@app.route('/hello')
def hello():
    return 'hello'


@app.route('/books')
def books():
    return 'books'


if __name__ == '__main__':
    app.run(debug=True)

变量规则

上面的示例中,不论是/hello 还是 /books,URL都是固定的,

但URL可不都是固定的,比如/book/1/price 这种restful风格的URL,中间的1是某个book的id,如果用GET方法来请求这个URL,则表示希望获取id为1的book的价格。

这种URL的某一部分是变化的,这一次请求是/book/1/price,下一次请求或许会变成/book/21/price,你无法为每一个URL绑定一个处理函数。

为了解决这种情况,flask允许你在URL设置动态变化的部分,给URL添加变量部分,像/book/1/price 这种URL,就可以这样绑定

@app.route('/book/<int:id>/price')
def price(id):
    return str(id)

这种URL变量部分的规则为 <converter:variable_name> ,variable_name将作为参数传递给所绑定的函数,而且可以根据converter转换器对variable_name进行转换

converter转换器有下面几种

转换器说明
int 接受整数
float 接受浮点数
path 接受带斜线的path

如果不标注转换器类型,则默认转为字符串,下面是这几种转换器的例子

# 不指定转换器
@app.route('/book/<name>/author')
def author(name):
    return name


# 转换器为int
@app.route('/book/<int:id>/price')
def price(id):
    return str(id)


# 转换器为float
@app.route('/book/price-ge/<float:price>')
def books_by_price(price):
    return str(price)


# 转换器为path
@app.route('/book/<path:book_info>')
def books_by_path(book_info):
    return book_info

启动服务,一次在浏览器里访问下面的URL来体会转换器的作用

  1. http://127.0.0.1:5000/book/python/author
  2. http://127.0.0.1:5000/book/13/price
  3. http://127.0.0.1:5000/book/price-ge/22.3
  4. http://127.0.0.1:5000/book/2019/09/sales

路由规则管理

添加路由规则,除了使用route装饰器外,还可以使用add_url_rule方法直接添加,下面两段代码在功能作用上是一样的

1、使用route添加路由规则

@app.route('/add_url')
def add_rule():
    return 'add url rule'

2、使用add_url_rule添加路由规则

def add_rule():
    return 'add url rule'


app.add_url_rule('/add_url', 'add_rule', add_rule)

在route装饰器中,调用了add_url_rule方法来添加路由规则,因此,他们最终的效果是一样的

设置method

http协议中,有很多种请求方法

一个URL,我们可以使用不同的方法来请求,在创建路由规则时,我们可以指定这个URL支持哪些请求方法

@app.route('/users', methods=['GET', 'POST'])
def users():
    return 'ok'

在route装饰器中设置methods,如果不设置该参数,则默认支持GET方法。

users函数既要处理GET请求,又要处理POST请求,那么如何区分它们呢? 这就要用到请求对象request

from flask import Flask, request
app = Flask(__name__)


@app.route('/users', methods=['GET', 'POST'])
def users():
    if request.method == 'GET':
        return 'get'
    if request.method == 'POST':
        return 'post'

    return 'ok'


if __name__ == '__main__':
    app.run(debug=True)

flask请求对象request

request是flask框架的全局对象,你可以通过它来获得当前进入的请求数据,如果是在多线程环境下,flask可以保证你所使用的request对象就是当前这个线程所处理的请求。

既然request是请求对象,那么合理的猜测是通过它,我们可以获得当前请求的全部信息,例如请求的method,path, url, headers,cookies,请求的参数,请求的body.....

事实上也的确如此,下面的服务端代码和客户端代码,将互相配合向你演示如何使用request获得有关当前请求的重要信息

服务端代码

 

标签:return,python,app,URL,price,flask,book,route,路由
From: https://www.cnblogs.com/Vincent-yuan/p/17155481.html

相关文章

  • python实现客户端和服务端的UDP相互通信
    实验指南这篇博客旨在实验客户端和服务端相互发送消息的实验,实验成功的现象为,客户端和服务端的两个窗口,即client和server左上角均被打上文字,因为客户端是没有给图片附上文......
  • 【Python】【图像处理】图片压缩方法
    一直想找个“无损压缩”的办法。当然这并非真的无损。我采用了Opencv的处理图像相关的方法。请见代码:注意:opencv安装:pipinstallopencv-python别想不开installcv2......
  • Python | import argparse模块的使用
    我们在写python脚本的时候,有时候需要在运行的时候传入参数,而不是写死在程序里,这个时候就要用到argparse模块。argparse模块是Python内置的用于命令项选项与参数解析的......
  • python学习——【第十四弹】
    前言上篇文章​​python学习——【第十三弹​​】中介绍了python中的模块,这篇文章接着学习python中的包。python中的包包是一种用“点式模块名”构造Python模块命名空间的......
  • python绘制基本图
    importpandasaspdimportnumpyasnpcatering_sale='D:\大三下\大数据实验课\data\catering_sale.xls'data=pd.read_excel(catering_sale,names=['data','sale'])......
  • python基础-元组tuple( )
    元组的定义和操作元组的特性:元素数量支持多个元素类型任意下标索引支持重复元素支持可修改性不支持数据有序是使用场景不可修改、可重复的......
  • python基础-列表[ ]
     1列表的定义#定义一个列表listmy_list=["jhk",123,'fasdf']print(my_list)print(type(my_list))#定义一个嵌套的列表my_list=[[1,2,3],[4,5,6],......
  • python 画图 chap3
    importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.figure()p=data.boxplot(return_type='dict'......
  • python基础-基本语句
    1条件语句在进行逻辑判断时,我们需要用到条件语句,Python 提供了 if、elif、else 来进行逻辑判断。格式如下所示: 1if判断条件1:2执行语句1...3elif判断......
  • python基础-入门必备知识
    1标识符标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。以下划线开头的标识符有特殊含义......