gpt4 book ai didi

python - Django-REST : Get User by username instead of primary-key

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:30 25 4
gpt4 key购买 nike

我正在使用从 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)

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'))
]

我想我错过了构建 rest url 的一个重要部分。

最佳答案

你可以通过添加一个列表路由来做到这一点:

@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)

并且 url 将如下所示:

/api/users/retrieve_by_username/altoyr

关于python - Django-REST : Get User by username instead of primary-key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33720416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com