Почему "Проверка CSRF не удалась. Запрос прерван." в CreateModelMixin в django rest framework?
Я новичок в django rest framework, и пытаюсь написать представление для регистрации пользователей, но всякий раз, когда я запускаю представление, нажимая на нужный url, я получаю следующую ошибку.
Ошибка:-
Forbidden (403)
CSRF verification failed. Request aborted.
You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.
If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for “same-origin” requests.
Вид:-
class UserRegistration(mixins.CreateModelMixin, generics.GenericAPIView):
serializer_class = RegistrationSerializer
def post(self, request, *args, **kwargs):
return super().create(request, *args, **kwargs)
Сериализатор:-
class RegistrationSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = User
fields = ['username', 'email', 'password', 'password2']
extra_kwargs = {
'password': {'write_only': True}
}
def save(self):
password = self.validated_data['password']
password2 = self.validated_data['password2']
if password != password2:
raise serializers.ValidationError({'error': 'p1 and p2 must be same'})
if User.objects.filter(email=self.validated_data['email']).exists():
raise serializers.ValidationError({'error': 'email already exists'})
account = User(email=self.validated_data['email'], username=self.validated_data['username'])
account.set_password(password)
account.save()
return account
Примечание:- Я использую postman для тестированияAPI. Я знаю, что есть несколько отличных способов сделать то же самое, но для данного момента я хотел бы сделать этот код работоспособным.
Заранее спасибо... Надеюсь получить от вас ответ в ближайшее время.
Вы можете заставить свой код работать, не проверяя csrf. Таким образом, вы можете использовать csrf_exempt
:
from django.utils.decorators import method_decorator
@method_decorator(csrf_exempt, name='dispatch')
class UserRegistration(mixins.CreateModelMixin, generics.GenericAPIView):
serializer_class = RegistrationSerializer
def post(self, request, *args, **kwargs):
return super().create(request, *args, **kwargs)
Refs: method_decorator