【发布时间】:2016-09-25 21:00:19
【问题描述】:
我正在使用 django rest 框架。 这是我的代码:
urls.py:
urlpatterns = [
url(r'^users/show', UserShow.as_view()),
]
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)
但是如何使用基于 generic 类的视图来做到这一点?
【问题讨论】:
-
您能解释一下为什么您使用 ListAPIView 来获取 single 对象吗?有一个专门用于此类用途的 RetrieveAPIView,此外,您可以将用户名或 id 用作 url 的一部分而不是查询..
标签: python django django-rest-framework django-class-based-views