Flask03 路由控制(转换器)、反转、请求方法控制

1 提出问题

  如何实现前端传过去的路径时动态的(即:多个url对应一个url视图函数)

  例如:

    浏览器中输入  http://127.0.0.1:5000/test/good/  或者  http://127.0.0.1:5000/test/fury/ 时,在后台执行的都是同一个url视图函数

 

2 解决问题

  利用flask的转换器实现  

  2.1 什么是转换器

    @app.route('/test/<string:let>/', endpoint="test01") 中 <> 的部分就叫做转换器

      代码解释:路径的最后一部分可以是任意值,但是这个值得类型必须是string类型

    

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
    return "这是主页面, hello"

@app.route('/test/<string:let>/', endpoint="test01")
def test(let):
    return "多个url对应一个url视图函数  " + let

print(app.url_map)
if __name__ == "__main__":
    app.run(debug=True)
View Code

  2.2 转换器的种类

    default  默认转换器(注意:默认转换器就是字符串转换器)

    string  字符串转换器,不能识别  /

    path  路径转换器,可以看成是string转换器的加强版,可以识别  /

      点睛:我们在访问静态文件时之所以可以通过路径进行访问,是因为静态文件的转换器时path类型

    int  整型转换器

    float  浮点型转换器

      点睛:int转换器只能识别整数,float转换器只能识别浮点型

      点睛:在url视图函数中会自动将获取到的数据转换成相应的类型

    any  多选一类型转换器

    uuid  UUID类型转换器

      点睛:在url视图函数中获取到的数据时UUID类型

      点睛:如何获取uuid

        form uuid import uuid4

        uuid4()

        注意: uuid4() 返回的是一个UUID类型的类

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
    return "这是主页面, hello"

@app.route('/test/<string:let>/', endpoint="test01")
def test(let):
    return "字符串类型转换器  " + let

@app.route('/test/<let>', endpoint='test02')
def test(let):
    return "默认类型转换器  " + let

@app.route('/test/<path:let>/', endpoint='test03')
def test(let):
    return "path类型转换器   " + let

@app.route('/test/<int:let>/', endpoint='test04')
def test(let):
    return 'int类型转换器    ' + str(let)

@app.route('/test/<float:let>/', endpoint='test05')
def test(let):
    return 'float类型转换器  ' + str(let)

@app.route('/test/<any(fury,zeus,"123","12.34"):let>/', endpoint='test06')
def test(let):
    return 'any类型转换器    ' + let

@app.route('/test/<uuid:let>/', endpoint='test07')
def test(let):
    return 'uuid雷翔转换器   ' + let

print(app.url_map)
if __name__ == "__main__":
    app.run(debug=True)
View Code

 

3 提出问题

  如何根据端点去寻找路径

 

4 解决问题

  通过反转的方式实现

  补充知识点:url和url视图函数是怎么对应的

    flask中url跟视图函数并不是直接对应的,而是有一个中间者-endpoint

    url  ->  endpoint  ->  view_function

      根据url找到对应的端点,在根据对应的端点找到url视图函数;素以端点时url和url视图函数之间的桥梁,所以我们可以根据端点找到对应的路径  

  4.1 如何通过 url_for 方法来获取路径

    4.1.1 从flask模块中引入url_for

      from flask import url_for

    4.1.2 利用 ur_for 获取路径

      path = url_for('myTest')

    

from flask import Flask
from flask import url_for
app = Flask(__name__)
@app.route('/')
def index():
    path = url_for('myTest')
    print(path)
    return '这里还是主页'
@app.route('/test/', endpoint='myTest')
def test():
    return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
    app.run()
View Code

  4.2 url_for 小应用

    把通过端点获取到的路径放到一个html中去,这样无论如何修改url路径,只要端点不变那么就不用修改html中的路径

from flask import Flask
from flask import url_for
app = Flask(__name__)
@app.route('/')
def index():
    path = url_for('myTest')
    print(path)
    html = '''
        <a href="%s">点击进入测试页面</a>
    '''%path
    return html
@app.route('/test/', endpoint='myTest')
def test():
    return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
    app.run(debug = True)
View Code

  4.3 通过蓝图的端点获取蓝图路径

    和普通路由的区别:蓝图的端点在前面需要加上蓝图名

from flask import Flask
from flask import url_for
from flask import Blueprint

app = Flask(__name__)

bp = Blueprint('movie', __name__)
@bp.route('/action/', endpoint='actionMovie')
def action():
    return '动作电影专区'

app.register_blueprint(bp)

@app.route('/')
def index():
    path = url_for('movie.actionMovie')
    print(path)
    html = '''
        <a href="%s">点击进入动作电影</a>
    '''%path
    return html
@app.route('/test/', endpoint='myTest')
def test():
    return '这里是测试页面'
print(app.url_map)
if __name__ == '__main__':
    app.run(debug = True)
View Code

  4.4 带变量的路径反转

from flask import Flask
from flask import url_for

app = Flask(__name__)

@app.route('/')
def index():
    path = url_for("test01", let='fury')
    return '这是主页    ' + path

@app.route('/test/<string:let>/', endpoint="test01")
def test(let):
    return '测试页面    ' + let;

print(app.url_map)

if __name__ == '__main__':
    app.run(debug = True)
View Code
from flask import Flask
from flask import url_for

app = Flask(__name__)

@app.route('/')
def index():
    path = url_for("test01", let='fury', name='zeus')
    return '这是主页    ' + path

@app.route('/test/<string:let>/', endpoint="test01")
def test(let):
    return '测试页面    ' + let;

print(app.url_map)

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

 

5 控制请求方式

  5.1 请求方式

    POST GET HEAD OPTIONS

      点睛:有get就默认有head,options永远都有

  5.2 如何修改请求方式

    注意:默认情况下有三种请求方式

      

    

  5.3 如何通过python实现请求

    利用pip安装requests包

      pip install requests

    导入相关方法

      from requests import get, post, head, options
    调用相关方法
      resp = get(url)

    查看相应头部信息

      resp.headers

    查看响应实体信息
      resp.content.decode('utf-8')

 

 

 

    

 

转载于:https://www.cnblogs.com/NeverCtrl-C/p/7491694.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
flask框架中,可以通过request.method来获取前端请求方法。\[2\]具体来说,如果请求是通过GET方法发送的,可以使用request.method == 'GET'来判断;如果请求是通过POST方法发送的,可以使用request.method == 'POST'来判断。根据请求的不同,可以执行相应的操作。例如,在flask中,可以使用@app.route装饰器来定义路由,并使用methods参数指定允许的请求方法,如methods=\['GET', 'POST'\]。然后,在对应的路由函数中,可以使用request.method来判断请求方法,并执行相应的逻辑。例如,如果请求方法是POST,可以使用request.form.get来获取表单元素的值,如request.form.get('id')来获取id的值。\[3\] #### 引用[.reference_title] - *1* [Pythonflask框架使用方法和内容解析(参数获取,请求头获取,请求方法等等)](https://blog.csdn.net/m0_58002043/article/details/121033528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【Pythonflask框架 响应前端ajax请求](https://blog.csdn.net/qq_46092061/article/details/130225142)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值