在 drf 视图集检索中将 pk 验证为 int url
Validate pk as int in drf viewset retrieve url
代码如下:
class UserViewSet(ViewSet):
# ... Many other actions
def list(self):
# list implementation
def retrieve(self, request, pk):
# manual pk int validation
router = DefaultRouter()
router.register(r"users", UserViewSet, basename="users")
urlpatterns = router.urls
现在 pk 未验证为 int,因此发出了对 db 的请求,我想避免这种情况。有什么办法可以在网址中添加这种类型的验证吗?
我可以在不使用这样的路由器的情况下实现这一目标:
urlpatterns = [
path('users/<int:pk>/', UserViewSet.as_view({'get': 'retrieve'}),
# many other actions have to be added seperately
]
但是我的视图集中有很多操作,所有操作都必须单独添加。有没有更简洁的方法或软件包?
使用lookup_value_regex
属性,
class UserViewSet(ViewSet):
<b>lookup_value_regex = '\d+'</b>
...
代码如下:
class UserViewSet(ViewSet):
# ... Many other actions
def list(self):
# list implementation
def retrieve(self, request, pk):
# manual pk int validation
router = DefaultRouter()
router.register(r"users", UserViewSet, basename="users")
urlpatterns = router.urls
现在 pk 未验证为 int,因此发出了对 db 的请求,我想避免这种情况。有什么办法可以在网址中添加这种类型的验证吗? 我可以在不使用这样的路由器的情况下实现这一目标:
urlpatterns = [
path('users/<int:pk>/', UserViewSet.as_view({'get': 'retrieve'}),
# many other actions have to be added seperately
]
但是我的视图集中有很多操作,所有操作都必须单独添加。有没有更简洁的方法或软件包?
使用lookup_value_regex
属性,
class UserViewSet(ViewSet):
<b>lookup_value_regex = '\d+'</b>
...