Tôi thường coi chế độ xem Người dùng giống như bất kỳ điểm cuối API nào khác yêu cầu ủy quyền, ngoại trừ tôi chỉ ghi đè bộ quyền của lớp chế độ xem bằng quyền của riêng tôi cho POST (hay còn gọi là tạo). Tôi thường sử dụng mẫu này:
from django.contrib.auth import get_user_model
from rest_framework import viewsets
from rest_framework.permissions import AllowAny
class UserViewSet(viewsets.ModelViewSet):
queryset = get_user_model().objects
serializer_class = UserSerializer
def get_permissions(self):
if self.request.method == 'POST':
self.permission_classes = (AllowAny,)
return super(UserViewSet, self).get_permissions()
Để có biện pháp tốt, đây là bộ nối tiếp tôi thường sử dụng với nó:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = (
'id',
'username',
'password',
'email',
...,
)
extra_kwargs = {
'password': {'write_only': True},
}
def create(self, validated_data):
user = get_user_model().objects.create_user(**validated_data)
return user
def update(self, instance, validated_data):
if 'password' in validated_data:
password = validated_data.pop('password')
instance.set_password(password)
return super(UserSerializer, self).update(instance, validated_data)
djangorestframework 3.3.x / Django 1.8.x