Trong mã của tôi, tôi có một viewset cho User. Tôi muốn chỉ cho phép các hoạt động Đọc (/người dùng/42 và /users/) mà ReadOnlyModelViewSet thực hiện tốt.django rest framework - sử dụng detail_route và detail_list
Ngoài ra, tôi muốn có một số /người dùng/đăng ký URL mà tôi có thể POST để đăng ký Người dùng mới.
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
@list_route(methods=['post'])
def register(request):
serializer = UserSerializer(data=request.DATA)
if serializer.is_valid():
user = User.objects.create_user(
username = serializer.init_data['username'],
password = serializer.init_data['password'],
)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Vài câu hỏi:
này có được điều này đúng cách để làm điều đó?
Có một cụ chữ ký cho một phương pháp nếu tôi đặt nó trong một list_route hoặc detail_route trang trí? vì trong các ví dụ detail_route luôn cùng một chữ ký của nó đối với phương pháp: method_name (tự, yêu cầu, pk = Không):
cảm ơn!
cảm ơn câu trả lời của bạn, tôi sẽ xem xét. một câu hỏi - ModelviewSet cho phép GET, POST, PATCH, GET và DELETE. khi bạn ghi đè lên phương thức cập nhật và nâng cấp một NotAllowed - nó sẽ chỉ tốt cho POST và PATCH? hoặc cũng cho DELETE?Tôi có nghĩa là nó bao gồm tất cả các phương pháp bên cạnh GET và POST để tạo ra? chỉ cố gắng đảm bảo rằng tôi chỉ cho phép các phương pháp mong muốn –
Bạn hoàn toàn đúng. Tôi đã sửa đổi mã để sử dụng mixin chính xác một cách rõ ràng, thay vì khỉ vá mã sửa đổi. –