34๐
You can write a custom Permission class IsPostOrIsAuthenticated
which will allow unrestricted access to POST
requests but will allow only authenticated GET
requests.
To implement the custom permission IsPostOrIsAuthenticated
, override the BasePermission
class and implement .has_permission(self, request, view)
method. The method should return True
if the request should be granted access, and False
otherwise.
from rest_framework import permissions
class IsPostOrIsAuthenticated(permissions.BasePermission):
def has_permission(self, request, view):
# allow all POST requests
if request.method == 'POST':
return True
# Otherwise, only allow authenticated requests
# Post Django 1.10, 'is_authenticated' is a read-only attribute
return request.user and request.user.is_authenticated
So, all POST
requests will be granted unrestricted access. For other requests, authentication will be required.
Now, you need to include this custom permission class in your global settings.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'my_app.permissions.IsPostOrIsAuthenticated',
)
}
3๐
http://www.django-rest-framework.org/api-guide/permissions/
as per above URL you have to write one custom permission class
class ExampleView(APIView):
permission_classes = (MyCustomAuthenticated,)
Write your own logic using AllowAny or IsAuthenticated inside MyCUstomAuthenticated based on POST and GET
- How to get object from PK inside Django template?
- What is the proper way of testing throttling in DRF?