【问题标题】:Specify two arguments in URL parameters for path Django在路径 Django 的 URL 参数中指定两个参数
【发布时间】:2021-08-16 20:25:38
【问题描述】:

我目前有一个接受 GET 请求的端点,用于检索某个日期范围内的用户(实际上没有必要解释“为什么”)。具体端点如下所示:GET /users/?fromdate={yyyy-mm-dd}&todate={yyyy-mm-dd}

例如,我可以有这样的请求:GET /users/?fromdate=2017-01-01&todate=2017-04-01

没有过多详细介绍urls.py 和views.py,我已经指定了路由器寄存器和路径以接受到此端点的请求(工作正常):

urls.py:

router = routers.DefaultRouter()
router.register(r"user", views.UserViewSet, basename='user')

urlpatterns = [
    path('user/', views.UserViewSet.as_view({'get': 'user'}), name='user')
]

我现在正在尝试运行单元测试,只是为了向此端点发送请求

我的 test_user.py 类的一部分如下所示:

def test_user_list(self):
    response = self.client.get(reverse('user', kwargs={'fromdate': '2017-01-01', 'todate': '2017-04-01'})), format='json')
    self.assertEqual(response.status_code, 200)

但是,当我运行单元测试时,我得到一个错误:

使用关键字参数“{'fromdate': '2017-01-01', 'todate': '2017-04-01'}' 未找到。尝试了 1 种模式:['/user/$']

我认为错误是由于我的路径(虽然它通过像 Postman 这样的 REST 客户端手动工作)没有指定期望 path('user/', views.UserViewSet.as_view({'get': 'user'}), name='user') 的参数

那么我如何指定参数来满足上面的“fromdate”和“todate”?我查看了documentation,但除了/articles/2005/03/ 之类的网址之外,我找不到任何其他内容。

【问题讨论】:

    标签: python django unit-testing django-rest-framework django-unittest


    【解决方案1】:

    kwargs,当传递给 reverse() 时,成为 URL args,例如user/arg1/arg2/

    如果您想传递 URL 变量,则应将 kwargs 作为数据传递给 .get():

    response = self.client.get(reverse('user'), {'fromdate': '2017-01-01', 'todate': '2017-04-01'})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-19
      • 2013-11-27
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      相关资源
      最近更新 更多