【问题标题】:Python Requests: How to set optional and non-optional parameters at the same time?Python Requests:如何同时设置可选参数和非可选参数?
【发布时间】:2019-11-18 14:34:32
【问题描述】:

我想使用 API 查询我的数据库。

我有:

import requests
query_params = {'author':'grisham','year':'1998'}
response = requests.get(url='http://111.111.1.1:1000',params=query_params)

这很好用,我可以返回作者 grisham 于 1998 年出版的所有书籍的数据框。

但是,我想将其修改为“作者是一个强制性参数,但可以选择添加年份作为第二个参数”(以区分那些只想要他所有书籍的人与那些想知道什么的人他在某一年发表)。

我似乎在请求库中找不到参数,而不是参数,我可以将其更改为两个字典,可选参数和强制参数,并分别传递它们吗?或者有更好的方法吗?

我猜this 是我正在寻找的东西,想知道我的用例是否有更pythonic/高效/更清洁的东西?

【问题讨论】:

  • requests 对 API 的条件参数一无所知,它只是传递你告诉它的任何内容。因此,如果您不想发送年份,则不要将其添加为参数
  • 如果您想对数据实施任何约束,您需要提供自己的 requests.get 包装器,而不是直接使用它。 PreparedRequest 周围的子类或包装器也是可能的。

标签: python python-requests


【解决方案1】:

给定参数是否需要,以及(如果不需要)是否选择将其包含在对 API 的调用中对 requests 库没有任何影响。它的工作以发送您提供的数据并报告结果开始和结束。是否需要年份应包含在 API 规范中。如果它是可选的,那么您可以选择将其排除在外,只需不将其包含在您发送的字典中即可。

换句话说,year 字段是 API 的参数。它不是requests 库的参数,requests 只知道或关心它,因为它是需要在请求正文中发送的一条数据。对于requests,年份字段始终是可选的,因为requests 只是传递一条消息。

【讨论】:

    【解决方案2】:

    就像其他人所说的那样,由您来验证提供的参数以确定是否正确传递了任何必需的参数。requests 库只是将其发送出去。

    是的,您可以将两个字典传递给 requests.get()(需要 Python 3.5+):

    query_params = {**required_params, **optional_params}
    

    【讨论】:

    • 这并没有真正将 2 个字典传递给 requests……它只是将它们解压缩到一个字典中并将结果提供给 requests。它绝对是对语法的紧凑和有效使用,但实际上并没有按照您的要求进行。
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 2012-12-02
    • 2010-12-07
    • 2012-05-02
    相关资源
    最近更新 更多