Flask Python教程:获取不同请求方式的参数方法分享

Flask中 如何获取不同请求方式的参数

  • 前言
  • 一、get请求下
  • 1.1、路径中带有参数
  • 1.1.1、postman示例
  • 1.1.2、 flask代码实现
  • 1.1.3、 注意事项
  • 1.2、在url后边带有参数
  • 1.2.1、postman示例
  • 1.2.2、 flask代码实现
  • 二、post请求下
  • 2.1、form-data格式
  • 2.1.1、postman示例
  • 2.1.2、flask代码实现
  • 2.2、www-form-urlendoded格式
  • 2.2.1、postman示例
  • 2.2.2、flask代码实现
  • 2.3、json传参格式
  • 2.3.1、postman示例
  • 2.3.2、flask代码实现
  • 2.3.3、注意事项
  • 2.4、headers传参格式
  • 2.4.1、postman示例
  • 2.4.2、flask代码实现
  • 前言

    前面基本上固定了项目的框架,接下来就是实现各个模块的功能。基于现在主流前后端交互的api,那么就来看看如何使用flask实现参数接受的。这里是我常用的方式,关于更多使用方式,请点击这里去文档查看更多

    一、get请求下

    1.1、路径中带有参数
    1.1.1、postman示例

    1.1.2、 flask代码实现
    @blog_base_blueprint.route('/path_posts/<int:resource_id>', methods=['GET'])
    def get_post_path(resource_id):
        resource_lists: List[models.Resource] = (models.Resource.query
                                                 .filter(models.Resource.id == resource_id)
                                                 .all())
    
        return jsonify({
            'code': 0,
            'msg': 'success',
            'data': {
                "resource_list": [resource.to_format() for resource in resource_lists]
            }
        })
    

    1.1.3、 注意事项
  • 在注册路由的时候一定要写上参数和参数的类型
  • 定义方法的时候一定写上参数名,这样才能直接使用
  • 1.2、在url后边带有参数

    当参数以 params 形式传递,也就是参数以?a=x&b=y 的形式显示在 url 中访问的形式

    1.2.1、postman示例

    1.2.2、 flask代码实现

    通过request.args.get(‘key’)request.values.get(‘key’) 来接收参数

    @blog_base_blueprint.route('/posts', methods=['GET'])
    def get_posts():
        current_app.logger.info('获取列表')
        resource_id = request.args.get('resource_id', 2)
    
        resource_lists: List[models.Resource] = (models.Resource.query
                                                 .filter(models.Resource.id == resource_id)
                                                 .all())
    
        return jsonify({
            'code': 0,
            'msg': 'success',
            'data': {
                "resource_list": [resource.to_format() for resource in resource_lists]
            }
        })
    

    二、post请求下

    前后端API交互时,常见的还是post的请求方式,且常用的有form-data 或x-www-form-urlendoded形式,还有为json数据的body体

    2.1、form-data格式
    2.1.1、postman示例

    2.1.2、flask代码实现

    使用request.form获取

    @blog_base_blueprint.route('/add_post', methods=['POST', 'GET'])
    def create_or_update_resource():
        title = request.form.get('title')
        json_data = request.form
        return jsonify({
            'json_data' : json_data,
            'title' : title,
        })
    
    2.2、www-form-urlendoded格式
    2.2.1、postman示例

    2.2.2、flask代码实现

    使用request.form接收参数

    #测试www-form-urlendoded格式
    @blog_base_blueprint.route('/test1', methods=['POST'])
    def test1():
        title = request.form.get('title2')
        json_data = request.form
        id = request.values.get('id')
        return jsonify({
            'json_data' : json_data,
            'title' : title,
            'id' : id,
        })
    
    2.3、json传参格式
    2.3.1、postman示例

    2.3.2、flask代码实现

    使用request.get_json()request.get_data()实现,使用方法参考点击查看使用文档

    #测试json格式
    @blog_base_blueprint.route('/test1_json', methods=['POST'])
    def test1_json():
        json_data1 = request.get_data(as_text=True)
        print(json_data1)
        json_data2 = request.get_json()
        title = request.json.get('title')
        return jsonify({
            'json_data1' : json_data1,
            'json_data2' : json_data2,
            'title' : title,
        })
    
    2.3.3、注意事项

    根据结果可以看到:

  • get_data()方法,获取到的是未经处理的原始数据,如果数据格式是json的,则取得是json字符串,排序和请求参数一致
  • get_json()方法,将请求参数做了处理,得到字典格式,因此排序会打乱,依据字典排序规则。
  • 2.4、headers传参格式

    很多时候,为了安全性,接口交互时会传递token,这时候是使用request.headers来接收headers里的token的

    2.4.1、postman示例

    2.4.2、flask代码实现

    使用request.headers实现

    @blog_base_blueprint.route('/add_post', methods=['POST', 'GET'])
    def create_or_update_resource():
    
        token = request.headers.get('Authorization', '')
    
        title = request.form.get('title')
        # json_data = request.form
        return jsonify({
            'token' : token,
        })
    

    作者:ignativs amor

    物联沃分享整理
    物联沃-IOTWORD物联网 » Flask Python教程:获取不同请求方式的参数方法分享

    发表回复