2021-10-18 20:42:13 +00:00
|
|
|
from django.contrib.auth.models import User
|
2021-10-19 19:51:44 +00:00
|
|
|
from rest_framework.views import APIView
|
|
|
|
from rest_framework import exceptions, permissions, parsers
|
|
|
|
from rest_framework.response import Response
|
2021-10-18 20:42:13 +00:00
|
|
|
|
2021-10-19 19:51:44 +00:00
|
|
|
class UsersList(APIView):
|
|
|
|
permission_classes = (permissions.IsAuthenticated,)
|
|
|
|
parser_classes = (parsers.JSONParser, parsers.FormParser,)
|
2021-10-18 20:42:13 +00:00
|
|
|
|
2021-10-19 19:51:44 +00:00
|
|
|
def get(self, request):
|
|
|
|
qs = User.objects.all()
|
2021-10-18 20:42:13 +00:00
|
|
|
|
|
|
|
search = self.request.query_params.get('search', None)
|
|
|
|
if search is not None:
|
2021-10-19 19:51:44 +00:00
|
|
|
qs = qs.filter(username__istartswith=search) | qs.filter(email__istartswith=search)
|
|
|
|
|
2021-10-18 20:42:13 +00:00
|
|
|
limit = self.request.query_params.get('limit', None)
|
|
|
|
if limit is not None:
|
|
|
|
try:
|
2021-10-19 19:51:44 +00:00
|
|
|
qs = qs[:abs(int(limit))]
|
2021-10-18 20:42:13 +00:00
|
|
|
except ValueError:
|
|
|
|
raise exceptions.ValidationError(detail="Invalid query parameters")
|
|
|
|
|
2021-10-19 19:51:44 +00:00
|
|
|
return Response([{'username': u.username, 'email': u.email} for u in qs])
|