最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Django中request.query_params无法获取GET传递的参数

Django crifan 7417浏览 0评论

折腾:

【已解决】内容管理系统的统计列表中只列当前组的用户

期间,前端代码GET去调用后台Django的API接口,可以看到已经传递参数了:

但是后台却没有收到对应的参数fucntion_group_id:

INFO|20180727 11:44:55|views:user_scripts_count:389|function_group_id=None

但是从server的debug的log中,是可以看到参数的:

所以需要去搞清楚,为何此处Django的代码:

    def user_scripts_count(self, request):

        logger.info("user_scripts_count: request=%s", request)

        function_group_id = request.query_params.get(‘function_group_id’, None)

没有获取到GET的query的参数。

django query_params not work

Requests – Django REST framework

python – URL query parameters are not processed in django rest – Stack Overflow

Django Rest Framework – query params with special characters – Stack Overflow

python – Django Rest required parameters in URL – Stack Overflow

看了代码,貌似之前是为了解决:

【已解决】Django中对于单个REST的接口把JWT的token验证放到query string的url中

期间,用:

    def get_jwt_value(self, request):

        # Check if ‘jwt_token’ is in the request query params.

        # Give precedence to ‘Authorization’ header.

        logger.debug("request=%s", request)

        queryParams = request.query_params

        reqMeta = request.META

        logger.debug("queryParams=%s", queryParams)

        logger.debug("reqMeta=%s", reqMeta)

此处log输出是可以获取到:

DEBUG|20180727 15:43:48|jwt_token:get_jwt_value:21|queryParams=<QueryDict: {‘fucntion_group_id’: [‘5’]}>

的。而后续获取不到,难道是此处获取后,query para就变空了?

去找找原因

发现此处是有值,但不是以为的单个值,而是list:

INFO|20180727 15:59:43|views:user_scripts_count:387|user_scripts_count: request=<rest_framework.request.Request object at 0x10be0cd68>

INFO|20180727 15:59:43|views:user_scripts_count:389|queryParams=<QueryDict: {‘fucntion_group_id’: [‘5’]}>

INFO|20180727 15:59:43|views:user_scripts_count:391|function_group_id=None

这就诡异了

queryParams=<QueryDict: {‘fucntion_group_id’: [‘5’]}>

但是:

function_group_id = request.query_params.get(‘function_group_id’, None)

却返回None

django query_params get empty

结果再去把传递过来的参数拷贝到代码中:

突然发现搜参数:

function_group_id

并没有搜到和包含:

然后才注意到,此处传递进来的是:

fucntion_group_id

是笔误,应该是:

function_group_id

然后再去找web前端代码,发现是之前同事写的代码,是笔误:

改回:function_group_id

并且也发现,正常应该搜到很多个的才对:

【总结】

Django中的:

function_group_id = request.query_params.get(‘function_group_id’, None)

是可以正常的获取到url中

127.0.0.1 – – [27/Jul/2018 16:06:46] "GET /api/v1/scripts/user_scripts_count/?function_group_id=5 HTTP/1.1" 200 –

的query的参数的。

而此处之所以出错,获取不到,是因为之前同事笔误,把参数名:function_group_id,误写为了fucntion_group_id,改回来,即可正常传递参数了。

转载请注明:在路上 » 【已解决】Django中request.query_params无法获取GET传递的参数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.163 seconds, using 22.12MB memory