Python Django rest框架路由器-如何添加自定义URL和查看功能
我正在使用Django Rest框架的默认路由器,并尝试自定义我的链接 如何设置和安排如下内容:Python Django rest框架路由器-如何添加自定义URL和查看功能,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在使用Django Rest框架的默认路由器,并尝试自定义我的链接 如何设置和安排如下内容: class UserViewSet(viewsets.ViewSet): """Userviewset Restful Structure: | URL style | HTTP Method | URL Nanme | Action Function | |----------------|-------------|---------
class UserViewSet(viewsets.ViewSet):
"""Userviewset
Restful Structure:
| URL style | HTTP Method | URL Nanme | Action Function |
|----------------|-------------|-------------|-----------------|
| /users | GET, POST | user-list | user_list |
| /users/<email> | GET, DELETE | user-detail | user_detail |
"""
# Router class variables
lookup_field = 'email'
lookup_value_regex = '[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}'
# Viewsets class variables
#queryset = User.objects.all()
def list(self, request):
"""GET - Show all users"""
print request.version
api_result = user_list.lists_all_users()
return Response(api_result)
def create(self, request):
"""POST - Add new user"""
api_result = user_list.create_new_user(request.data)
return Response(api_result)
def retrieve(self, request, email=None):
"""GET - Show <email> user"""
api_result = user_detail.retrieve_the_user(email)
return Response(api_result)
def partial_update(self, request, email=None):
return Response()
def destroy(self, request, email=None):
"""DETELE - Delete <email> user"""
api_result = user_detail.destroy_the_user(email)
return Response(api_result)
/myModels/dosomething
(并将其列在API根视图中)/myModels/addModel?name=abc&address=xyz
视图.py
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
router = routers.DefaultRouter(trailing_slash=True)
router.register(r'mymodels', views.MyModelViewSet)
url.py
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
router = routers.DefaultRouter(trailing_slash=True)
router.register(r'mymodels', views.MyModelViewSet)
通过在视图上使用
@detail\u route
或@list\u route
装饰器,可以向默认路由器添加更多端点
@list\u route
将在/myModel/new route/
上创建新端点,而@detail\u route
将在/myModel//new route/
上创建新端点
但是,如果您想完全替换默认路由器提供的端点,您应该考虑编写一个自定义路由器
对自定义路由器以及示例自定义路由器有很好的解释。让我演示如何使用
ViewSet
和router
:
router = routers.SimpleRouter(trailing_slash=False)
router.register(prefix=r'users', viewset=UserViewSet, base_name='user')
根据,您的视图集需要在类中声明视图
我给出了一个关于用户api的示例,并指导您如下所示:
class UserViewSet(viewsets.ViewSet):
"""Userviewset
Restful Structure:
| URL style | HTTP Method | URL Nanme | Action Function |
|----------------|-------------|-------------|-----------------|
| /users | GET, POST | user-list | user_list |
| /users/<email> | GET, DELETE | user-detail | user_detail |
"""
# Router class variables
lookup_field = 'email'
lookup_value_regex = '[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}'
# Viewsets class variables
#queryset = User.objects.all()
def list(self, request):
"""GET - Show all users"""
print request.version
api_result = user_list.lists_all_users()
return Response(api_result)
def create(self, request):
"""POST - Add new user"""
api_result = user_list.create_new_user(request.data)
return Response(api_result)
def retrieve(self, request, email=None):
"""GET - Show <email> user"""
api_result = user_detail.retrieve_the_user(email)
return Response(api_result)
def partial_update(self, request, email=None):
return Response()
def destroy(self, request, email=None):
"""DETELE - Delete <email> user"""
api_result = user_detail.destroy_the_user(email)
return Response(api_result)
因此,将生成相应的URL:
和列表
具有相应的url:创建
/users
,检索
和部分更新
都有相应的url:销毁
/users/
list\u route
或detail\u route
展开视图集:
@list_route(methods=['post'])
def login(self, request):
"""POST - login by user"""
...
因此,新操作具有相应的url:
具有相应的url:login
/users/login
我希望它能对您有所帮助。您能澄清您的用户详细信息和用户列表对象指的是什么吗?这在DRF 3.8中已被弃用:。您可以改用@action装饰器。