折腾:
期间,前端代码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,改回来,即可正常传递参数了。