Mặc dù câu trả lời được chấp nhận cho câu hỏi này không trả lời câu hỏi như đã được nói, tôi cảm thấy rằng nó không giải quyết được vấn đề thực tế trong tay.
Để hoàn thiện câu trả lời này, việc vô hiệu hóa api HTML có thể duyệt được thực hiện bằng cách xóa nó khỏi các lớp kết xuất như vậy:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
Tuy nhiên, vấn đề thực sự mà câu hỏi ám chỉ là mọi người có thể đăng lên API mà không cần xác thực. Mặc dù việc xóa biểu mẫu làm cho nó ít rõ ràng hơn, câu trả lời này không bảo vệ các điểm cuối API.
Tối thiểu, ai đó tìm thấy câu hỏi này và đang tìm cách bảo vệ API khỏi các bài nộp POST không được xác thực hoặc không được ủy quyền; họ đang tìm cách thay đổi Quyền API
Sau đây sẽ đặt tất cả các điểm cuối chỉ được đọc trừ khi người dùng được xác thực.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
Nếu bạn muốn ẩn hoàn toàn API trừ khi người dùng đăng nhập, bạn cũng có thể sử dụng IsAuthenticated
.
FYI: Điều này cũng sẽ xóa biểu mẫu khỏi API có thể duyệt HTML khi nó phản hồi các quyền. Khi người dùng được xác thực đăng nhập, biểu mẫu sẽ có sẵn một lần nữa.
Vòng thưởng :
Chỉ kích hoạt API HTML có thể duyệt trong dev:
DEFAULT_RENDERER_CLASSES = (
'rest_framework.renderers.JSONRenderer',
)
if DEBUG:
DEFAULT_RENDERER_CLASSES = DEFAULT_RENDERER_CLASSES + (
'rest_framework.renderers.BrowsableAPIRenderer',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
'DEFAULT_RENDERER_CLASSES': DEFAULT_RENDERER_CLASSES
}