我正在使用Django Rest Framework来构建一个API,这是我第一次使用DRF,但是我有使用Laravel/NestJs的经验,所以路由的概念并不陌生。
在我的DRF应用程序中,我的url配置如下所示:
// urls.py
urlpatterns = [
path('api/v1/accounts/<str:account_number>/', accounts.AccountsViewSet.as_view()),
url('api/v1/', include(router.urls)),
]
在Postman中,我将GET
请求发送到以下URL:
{{my_host}}/api/v1/accounts/:account_number/
我的观点如下:
// view.py
def get(self, request, account_number=None, *args, **kwargs):
print(account_number)
if account_number is not None:
print('account_number was provided')
else:
print('account_number not provided')
当发送一个GET
请求到我的端点时,我可以为account_number
key提供一个值,假设我使用ABC123
作为key值,给定上面的视图,第一个print语句返回ABC123
。
我还将进入第一个if
块,并看到消息account_number was provided
一切顺利!
但是,如果我 * 不 * 提供帐号(我将路径变量值留空),我将在日志中获得路径变量本身。例如:
// view.py
def get(self, request, account_number=None, *args, **kwargs):
print(account_number) // :account_number
if account_number is not None:
print('account_number was provided'). <!-- still getting here
else:
print('account_number not provided')
正如你所看到的,我正在获取变量,我希望得到一个空字符串''
,而不是变量名(键):account_number
。
我试过设置值来检查空字符串或null
(也是字符串),但由于:account_number
键被传入...我不确定还能尝试什么。
如何检查:account_number
在我的视图中是否为空(未提供)?这是DRF独有的吗?我可以使用Laravel和/或NestJs很容易地进行这些检查。
谢谢您的建议!
1条答案
按热度按时间ruarlubt1#
URL路径
api/v1/accounts/<str:account_number>/
需要名为account_number的URL参数,该参数是字符串类型,如URL路径中的所示。当您向
api/v1/accounts/1223
发出GET请求时,Django知道应该将值1223赋给account_number参数,AccountsViewSet视图将接收该值作为参数。另一方面,当您向
api/v1/accounts/
发出GET请求时,account_number参数没有提供值,因此Django将无法将此URL与AccountsViewSet视图匹配,该视图需要account_number参数的值,相反,Django将返回404 Not Found响应,表明所请求的URL不存在。要解决此问题,请再添加一个不带URL参数的路径,该路径指向同一视图
这应该可以解决问题