Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django Rest Framework APIClient不解析查询参数

Django Rest Framework APIClient不解析查询参数
EN

Stack Overflow用户
提问于 2016-07-14 17:34:33
回答 3查看 2.1K关注 0票数 4

我使用的是djangorestframework==3.3.3Django==1.9.4

我有一个测试,我想检查查询参数是否被正确处理。

代码语言:javascript
运行
AI代码解释
复制
class TestResourceView(APITestCase):

    def test_view_process_query_params_correctly(self):
        client = APIClient()
        client.login(username='<username>', password='password')
        response = client.get('/api/v2/resource/1/users/?fields=first_name;last_name')
        self.assertEqual(response.status_code, 200)
        # .... rest of the test .... 

在我的视图中,我放入print语句只是为了查看查询参数是否被正确解析,但我得到的查询字典为空:

代码语言:javascript
运行
AI代码解释
复制
class Resource(APIView):
    def get(self, request):
        query_params = request.query_params
        print('Printing query params')
        print(query_params)
        # .... rest of the code ....

    def post(self, request):
        query_params = request.query_params
        print('Printing query params')
        print(query_params)
        # .... rest of the code ....

运行测试时导致终端:

代码语言:javascript
运行
AI代码解释
复制
Printing query params
<QueryDict: {}>

同时,如果我像这样测试post请求:

代码语言:javascript
运行
AI代码解释
复制
response = client.post('/api/v2/resource/1/users/?fields=first_name;last_name')

我得到了不正确的参数解析:

代码语言:javascript
运行
AI代码解释
复制
Printing query params
<QueryDict: {'last_name': [''], 'fields': ['first_name']}>

使用APIClient的正确方法是什么?或者这仍然是一个bug?因为已经有类似的issue

EN

回答 3

Stack Overflow用户

发布于 2019-12-12 22:04:33

对我来说,问题是DRF需要的是data中的参数,而不是像Django测试客户端那样的args

这个答案帮助了我:https://stackoverflow.com/a/45183972/9512437

代码语言:javascript
运行
AI代码解释
复制
class AccountTests(APITestCase):

    def setUp(self):
        self.user = CustomUser.objects.create_user(email="user1@test.com", password="password1", is_staff=True)
        self.client = APIClient()

    def test_add_name(self):
        self.client.force_authenticate(self.user)

        url = reverse('customuser-detail', args=(self.user.id,))
        data = {'first_name': 'test', 'last_name': 'user'}
        response = self.client.put(url, data, format='json')

        self.assertEqual(response.status_code, status.HTTP_200_OK)
票数 1
EN

Stack Overflow用户

发布于 2016-07-14 19:45:04

查询参数的格式不正确。

如果你希望结果是{'fields': ['last_name', 'first_name']},那么你的帖子url应该是.../users/?fields=first_name&fields=last_name'。您可能希望使用getlist()访问参数。

票数 0
EN

Stack Overflow用户

发布于 2016-07-15 09:59:58

1)关于client.get('/api/v2/resource/1/users/?fields=first_name;last_name')中的空<QueryDict: {}> -我的代码中有错误。我有两个同名的测试,其中一个的<QueryDict: {}>确实是空的。因此,在运行测试时,django使用<QueryDict: {}>运行测试

2)关于client.post('/api/v2/resource/1/users/?fields=first_name;last_name')中查询参数的错误解析,我发现了以下discussion。所以,django基本上遵循HTTP标准,其中说;分号是保留字符,如果使用,那么正确的方式理解它与&相同。这里有更多details

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38380674

复制
相关文章
Django rest framework(5)----解析器
解析器  (1)api/urls.py # api/urls.py from django.urls import path,re_path from .views import UserView,
zhang_derek
2018/04/11
1.3K0
Django rest framework(5)----解析器
Django Rest Framework
https://q1mi.github.io/Django-REST-framework-documentation/
vanguard
2020/07/07
2.4K0
Django Rest Framework 解析器(下)
① 仅处理请求头 content-type 为 application/json 的请求体
小团子
2019/07/18
4510
Django Rest Framework 解析器(下)
Django REST Framework
Django REST Framework 1. REST 前后端分离 API-ApplicationProgrammingInterface 为了应付千变万化的前端需求 REST:RepresataionsStateTrans 20000 Fieding博士提出 RESTful:遵守REST规范的技术设计的软件可以称为RESTful REST规范 URL代表一个资源,一个资源应该是一个名词 动作有HTTP的methode方法提供 URL应该包含版本信息,版本信息也可以放在HTTP协议中 过滤信息,使用UR
ruochen
2021/07/22
2.2K0
Django REST Framework
Django Rest Framework 解析器(上)
在前端向后端发送 form 表单或者 ajax 数据的时候,django 的 content_type 会拿到请求头中的 Content-Type 属性,然后根据值进行分析。
小团子
2019/07/18
5720
Django Rest Framework 解析器(上)
Django REST framework初识
现在工作中用的就是 django-rest 框架,今天主要讲下 django-rest 是个什么东西,为什么会使用它。准确的说 django-rest 是 django web 框架的一个插件,透过Django REST framework( DRF ) 建立 REST API 非常方便快速。现在的常见的开发的模式是前后端分离模式,页面是由前端工程师使用vue、 react等前端框架编写,接口由后端工程师通过其他框架编写,简单来说,前端工程师负责页面渲染,后端工程师负责接口,为前端页面提供数据。这样前后端都由各自擅长的工程师负责,不像很早之前,前后端由一个人编写。这样做的好处是各司其职,专业的人做专业的事。开发效率也很高效,因为django开发速度比较快,如果写api接口的话用django-rest和django很搭。
用户4945346
2020/06/16
6380
Django REST Framework 简介
Django REST Framework(以下简称DRF)是基于Django框架的一个强大的Web API框架。它是一个开源项目,为开发者提供了一种方便、灵活和可扩展的方式来构建和发布Web APIs。
玖叁叁
2023/04/24
8990
安装 Django REST Framework
安装Django REST Framework(以下简称DRF)非常简单。您只需按照以下步骤操作:
玖叁叁
2023/04/24
1.7K0
Django进阶:DRF(Django REST framework)
DRF即Django REST framework的缩写,官网上说:Django REST framework是一个强大而灵活的工具包,用于构建Web API。简单来说:通过DRF创建API后,就可以通过HTTP请求来获取、创建、更新或删除数据(CRUD)。
一只大鸽子
2023/09/02
7060
Django进阶:DRF(Django REST framework)
Django REST framework初次使用
我们将使用 django-rest 创建一个简单的API,以允许管理员用户查看和编辑系统中的user和group。
用户4945346
2020/06/16
7430
Django Rest Framework-介绍
什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性 对于REST这种面向资源的架构风格
程序员同行者
2018/07/02
1.9K0
django rest framework通用view
官方文档:http://www.django-rest-framework.org/ drf为我们提供强大的通用view的功能,本博客对这些view进行简要的总结分析。 首先,我们看一下主要的几种view以及他们之间的关系。
程序员同行者
2018/12/12
1.1K0
ElementUI 分页+django rest framework
在之前的文章中,链接如下:https://www.cnblogs.com/xiao987334176/p/14313471.html
py3study
2021/03/29
1.7K0
ElementUI 分页+django rest framework
Django Rest Framework 限流(下)
向认证一样Django进阶篇 Rest framework (五),在 utils 包中定义限流组件。
小团子
2019/07/18
8360
Django Rest Framework 限流(下)
Django Rest Framework 权限(下)
像 Django进阶篇 Rest framework (七) 一样进入,request 的请求流程,进入源码查看具体权限的操作。
小团子
2019/07/18
4190
Django Rest Framework 权限(下)
Django Rest Framework 视图(上)
在之前的 django rest framework,其它组件中,在视图函数中继承类都是 rest_framework.view.APIView,这个 APIView 是继承的 django 中的 View 并且做了封装和方法重写。那么在 django rest framework 中,还有没有提供其它的类能够继承?
小团子
2019/07/18
9630
Django Rest Framework 视图(上)
Django Rest Framework 权限(上)
为了更好的管理各个功能组件,在 django rest framework 认证中,可以将认证类单独的拿出来,放在其它目录下,然后导入到 views.py 文件中,在权限环节也可以这么做。
小团子
2019/07/18
9560
Django Rest Framework 权限(上)
Django REST Framework 教程开篇
欢迎来到 HelloDjango 全栈系列教程第二步——Django REST Framework 教程!
HelloGitHub
2021/05/14
1.1K0
Django Rest Framework 分页(上)
在 serializer.py 文件中添加 UserGroupSerializer 类函数
小团子
2019/07/18
7000
Django Rest Framework 分页(上)
django rest_framework 分页
本文主要介绍在drf框架中如何对查询的数据进行分页,在drf框架中有提供该基础功能的使用案例和文档,详情参考drf-pagination-官网文档 (opens new window)
编程黑洞
2023/03/30
6580

相似问题

Django测试rest框架: APIRequestFactory与APIClient

12

Django Rest框架APIClient在测试期间不处理异常

31

如何在` `django rest_framework test`的`APIClient`头部添加鉴权token

18

针对查询参数Django REST Framework进行筛选,许多对多

21

Django REST Framework不创建新对象?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档