You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.7 KiB
44 lines
1.7 KiB
from django.contrib.auth.models import User |
|
from rest_framework import viewsets |
|
from rest_framework.permissions import AllowAny, IsAuthenticatedOrReadOnly |
|
|
|
from user_info.serializers import UserRegisterSerializer |
|
from user_info.permissions import IsSelfOrReadOnly |
|
|
|
from rest_framework.decorators import action |
|
from rest_framework.response import Response |
|
from user_info.serializers import UserDetailSerializer |
|
|
|
|
|
class UserViewSet(viewsets.ModelViewSet): |
|
queryset = User.objects.all() |
|
serializer_class = UserRegisterSerializer |
|
lookup_field = 'username' # 和UserRegisterSerializer中的url中lookup_field对应 |
|
|
|
# http://127.0.0.1:8000/api/user/admin/info/ |
|
@action(detail=True, methods=['get']) |
|
def info(self, request, username=None): |
|
queryset = User.objects.get(username=username) |
|
serializer = UserDetailSerializer(queryset, many=False) |
|
return Response(serializer.data) |
|
|
|
# http://127.0.0.1:8000/api/user/sorted/ |
|
@action(detail=False) |
|
def sorted(self, request): |
|
users = User.objects.all().order_by('-username') |
|
# 是否分页 |
|
page = self.paginate_queryset(users) |
|
if page is not None: |
|
serializer = self.get_serializer(page, many=True) |
|
return self.get_paginated_response(serializer.data) |
|
serializer = self.get_serializer(users, many=True) |
|
return Response(serializer.data) |
|
|
|
def get_permissions(self): |
|
# 注册用户的POST请求是允许所有人都可以操作的 |
|
if self.request.method == 'POST': |
|
self.permission_classes = [AllowAny] |
|
else: |
|
self.permission_classes = [IsAuthenticatedOrReadOnly, IsSelfOrReadOnly] |
|
|
|
return super(UserViewSet, self).get_permissions()
|
|
|