我使用的是django rest框架,下面是我的代码:
网址.py:
urlpatterns = [
url(r'^users/show', UserShow.as_view()),
]
视图.py:
class UserShow(ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def get_queryset(self):
queryset = User.objects.all()
username = self.request.query_params.get('username', None)
user_id = self.request.query_params.get('user_id', None)
if username is not None:
queryset = queryset.filter(username=username)
if user_id is not None:
queryset = queryset.filter(pk=user_id)
return queryset
我想从url中获取值,如下所示:/users/show?user_id=1
或/users/show?username=mike
。
**user_id
或username
必须是必需参数。**如何在基于类的视图中控制它?
用我的代码,如果我发送的请求与错误的参数名称/users/show?user111name=mike
或简单的/users/show
视图当然回应我与queryset = User.objects.all()
,并列出所有的用户。我不需要。我需要如果所需的参数是None
响应与404。
我可以通过基于函数的视图获得所需结果:
@api_view(['GET'])
def users(request):
if request.method == 'GET':
queryset = User.objects.all()
username = request.GET.get('username', None)
user_id = request.GET.get('user_id', None)
if username is not None:
queryset = queryset.filter(username=username)
elif user_id is not None:
queryset = queryset.filter(pk=user_id)
else:
return Response({"status": "required field not found."},
status=status.HTTP_404_NOT_FOUND)
if not queryset.exists():
return Response({"status": "not found."},
status=status.HTTP_404_NOT_FOUND)
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)
但是我如何使用泛型基于类的视图呢?
2条答案
按热度按时间sczxawaw1#
以及URL中:
如果你url结构是必须的,对上面的做些小改动:
以及URL中:
cwxwcias2#