Django Rest framework как наложить ограничение на публичный api для неаутентифицированных пользователей?

У меня есть contact forms api для неаутентифицированного пользователя. Так что любой может посетить мой сайт и отправить формы. Я интегрировал свой api в reactjs. Но любой может просмотреть json данные, если он напрямую посетит api url. Любой может также отправить пост-запрос с помощью POSTMAN, используя api url. Как ограничить просмотр страницы api любым человеком, а также предотвратить несанкционированный запрос на пост.

вот мой код:

settings.py:

REST_FRAMEWORK = {
    # Only enable JSON renderer by default.
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
    ],
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',

    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '10/minute',

    }
}  

views.py

api_view(['POST', 'GET'])
def farhyn_api(request):
    if request.method == 'POST':
        data = request.data
        serializer = ContactSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            print(serializer.data)
            return Response({
                'status': True,
                'message': 'sucess'
            })

        return Response({
            'status': False,
            'message': serializer.errors

        })
    if request.method == "GET":
        contact = Contact.objects.all()
        serializer = ContactSerializer(contact, many=True)
        return Response(serializer.data)

Я использовал AnonRateThrottle, но все равно теперь любой может отправить POST запрос, используя api url. Как это предотвратить? В принципе, я хочу разрешить запрос, если он действительно пришел с моего сайта, а также как ограничить доступ к странице api?

У вас есть permission_classes и IsAuthenticated.

Просто сделайте следующее?

from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import permission_classes

api_view(['POST', 'GET'])
@permission_classes((IsAuthenticated, )) # < --------
def farhyn_api(request):
    if request.method == 'POST':
        data = request.data
        serializer = ContactSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            print(serializer.data)
            return Response({
                'status': True,
                'message': 'sucess'
            })

        return Response({
            'status': False,
            'message': serializer.errors

        })
    if request.method == "GET":
        contact = Contact.objects.all()
        serializer = ContactSerializer(contact, many=True)
        return Response(serializer.data)
Вернуться на верх