Alt*_*yyr 3 python django-rest-framework
我正在使用从ModelViewSet派生的基本UserViewSet。
通过主键检索用户api/users/<pk>工作正常。
但我也希望能够通过用户名检索用户。
我添加了一条新的详细路线,但是404当我尝试使用url获取用户时,我总是会进入服务器/api/users/retrieve_by_username/altoyr。
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
@detail_route(methods=['get'])
def retrieve_by_username(self, request, username=None):
try:
user = User.objects.get(userName=username)
return Response(user)
except User.DoesNotExist:
return Response("No user with username found!", status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
Urls通过路由器注册:
router = DefaultRouter()
router.register(r'users', views.UserViewSet)
# The API URLs are now determined automatically by the router.
# Additionally, we include the login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
Run Code Online (Sandbox Code Playgroud)
我想我缺少构建剩余网址的重要部分。
您可以通过添加以下列表路由来做到这一点:
@list_route(methods=['get'], url_path='retrieve_by_username/(?P<username>\w+)')
def getByUsername(self, request, username ):
user = get_object_or_404(User, username=username)
return Response(UserSerializer(user).data, status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)
网址将类似于:
/api/users/retrieve_by_username/altoyr
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1570 次 |
| 最近记录: |