request方法传入动态参数的一个"误区"

晚上写了一个请求类,传了一个动态参数进去,实例化测试的时候,发现请求数据根本没法读到,先附上代码

import requests

class MyRequests:

    def send_request(self, method, url, **kwargs):
        if method.lower()== "get":
            res = requests.request(method, url, params=kwargs)
        elif method.lower() == "post":
            res = requests.request(method, url, data=kwargs)
        print(res.text)

mr = MyRequests()
mr.send_request("get", "http://localhost:8080/futureloan/mvc/api/member/register",params={"mobilephone":"13923715845","pwd":"test123"})

期望的数据是注册成功,但是怎么试都是手机号为空

{"status":0,"code":"20103","data":null,"msg":"手机号不能为空"}

为什么?问题就出在if判断之后,如果请求方式是get,就让params=kwargs,如果请求方式是post,data=kwargs,但是实例化的时候就出问题了,**kwargs要求必须以关键字参数(key=value的形式)传入,传入的是params={"mobilephone":"13923715845","pwd":"test123"}),这时候经过if判断后,就成了

res = requests.request(method, url, params=‘params={"mobilephone":"13923715845","pwd":"test123"}‘)

这种请求参数,服务器当然是识别不到参数"mobilephone"和"pwd"了,所以这是一个容易出问题的写法,如何避免呢?

import requests

class MyRequests:

    def send_request(self, method, url, **kwargs):
        res = requests.request(method, url, **kwargs)
        print(res.text)

mr = MyRequests()
mr.send_request("get", "http://localhost:8080/futureloan/mvc/api/member/register",params={"mobilephone":"13923715845","pwd":"test123"})

这就得到了我们想要的结果

{"status":1,"code":"10001","data":null,"msg":"注册成功"}

原文地址:https://www.cnblogs.com/cnhkzyy/p/9315634.html

时间: 2024-10-16 02:31:15

request方法传入动态参数的一个"误区"的相关文章

浅谈为什么只有指针能够完成多态及动态转型的一个误区

c++多态由一个函数地址数组Vtable和一个指向Vtable的指针vptr实现. 具体来说,类拥有自己的vtable,类的vtable在编译时刻完成. 每个对象有自己的vptr指针,该指针初始化时指向对象所实现的类的vtable. 关于向上转型的误区: 通常对于向上转型的理解是这样的,当子类对象向上转型(允许隐式)成父类对象时,实际上只是将子类对象暂时看做父类对象,内部的数据并未改变. 对于没有虚函数的对象,这句话是正确的,但是,当引入虚函数后,这样的理解是有问题的,实际上,向上转型的过程中,

Java vararg(动态参数)的应用

可变参数在JDK 1.5添加,刚才知道的. 以下来自<Java泛型和集合>一书. 将参数打包成一个数组传入方法中是一件让人讨厌的事,在jdk1.5中加入了一个新的功能称为vararg(动态参数),让我们来看看示例 class Lists { public static <T> List<T> toList(T… arr) { List<T> lists = new ArrayList<T>(); for(T element : arr) { li

函数之动态参数

基本函数只能所传的变量参数有限,如果想传任意个就需要使用函数动态参数 动态参数分两种: *代表多个, 动态参数有一个*和两个* 1.一个 * 默认将传入的参数全部放置在元组中(按照顺序传值) def f1(*args): print(args,type(args))f1(11,22,33,'abc','def') #传任意多个参数输出结果:(11, 22, 33, 'abc', 'def') <class 'tuple'> #显示的类型是元组动态参数还可以将列表添加输出为元组 def f1(*

菜鸟成长日记:Java基础篇2 --- 动态参数类型

动态参数类型:也称为可变参数类型或者不定参数类型 动态参数类型主要解决繁琐的参数输入,或者参数数量不确定的问题,当方法被调用时jvm会主动将参数转化为数组来进行处理(看例子) 使用动态参数要注意的问题: 1.动态参数可以是同一个类型的数组,也可以是不同的,不同时类型为Object(看例子) 2.方法中动态参数要在参数列表最后,且只能有一个 3.动态参数可以不用指定大小 废话不说,直接上代码 1 /** 2 * 动态参数 3 * @author wangchong 4 * @date 2017年9

如何通过动态参数实现周报制作

需求描述 在货品交易系统里,用户不仅要看当天的交易情况,还需要查看一周 / 一个月 / 一年的情况,也叫做周报 / 月报 / 年报.下图所示就是其中订货信息周报的效果. 它是如何根据用户输入的一个日期查询出该日期所在周的订货信息表的呢? 实现步骤 1. 参数配置 其中,arg1 是用户输入的日期,对应普通参数: arg2 是基于 arg1 计算得到的一周的起始日期,对应动态参数,表达式为:[email protected](arg1); arg2 是基于 arg1 计算得到的一周的结束日期,对应

JS中用apply、bind实现为函数或者类传入动态个数的参数

为纪念10年没写blog,第一篇博文就以这样一个有趣的窍门开始吧 -___- 在ES5中,当我们调用一个函数时,如果要传入的参数是根据其他函数或条件判断生成的,也就是说不确定会传入多少个参数时,在不改变原函数的情况下该如何办呢? (当然了,能避免此文所述情况发生就尽量避免,比如将参数改为object或array等等) 大部分人可能知道用apply能完美解决这个问题: apply与call一样会将第一个参数作为函数的调用对象,即改写了调用函数内的this指针为第一个参数,如果不是对象的方法,可以不

多态 这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。

多态 类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def whoAmI(self): return 'I am a Person, my name is %s' % self.name clas

Effective JavaScript Item 21 使用apply方法调用函数以传入可变参数列表

本系列作为Effective JavaScript的读书笔记. 下面是一个拥有可变参数列表的方法的典型例子: average(1, 2, 3); // 2 average(1); // 1 average(3, 1, 4, 1, 5, 9, 2, 6, 5); // 4 average(2, 7, 1, 8, 2, 8, 1, 8); // 4.625 而以下则是一个只接受一个数组作为参数的例子: averageOfArray([1, 2, 3]); // 2 averageOfArray([1

报表工具中动态参数的使用方法和场景

报表开发过程中,有的时候我们会觉得普通参数很难满足一些业务需求,比如第二个数据集要引用第一个数据集的结果进行计算,动态控制 SQL 的过滤条件,动态列等,如果您遇到了这种情况,可以尝试使用动态参数即 ${参数名} 的方式来达到我们想要的效果. 那么,什么是动态参数呢? 动态参数一般是依赖于普通参数的具有计算能力的参数,在报表中动态参数我们可以看做是一个占位符,在报表运算之前,系统会全面搜索整张报表定义,将所有 ${参数名} 中的参数名替换成参数值即 动态参数表达式的结果. 下面我们举几个例子,看