Публикация из внешнего интерфейса Angular 5 в серверную часть Django Rest Framework - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь создать почтовый запрос из Angular 5 в DRF. Поле представляет собой форму, которую отправляет пользователь. Я создал сериализатор и могу выложить что-то из интерфейса DRF

models.py

class UserForm(models.Model): id_user_form = models.AutoField(primary_key=True) user = models.ForeignKey(User, on_delete=models.CASCADE, db_column='idUser', unique=False) name = models.CharField(max_length=50) type = models.CharField(max_length=25) location = models.CharField(max_length=200)

serilizers.py `class UserFormSerializer (serializers.ModelSerializer):

class Meta:
    model = UserForm
    fields = ('user', 'name', 'type', 'location')

def create(self, validated_data):
    user_data = validated_data.pop('user')
    user_form = UserForm.objects.create(user_id=user_data, **validated_data)

    return user_form

views.py

class FormSubmit(generics.ListCreateAPIView): queryset = UserForm.objects.all() serializer_class = UserFormSerializer

Когда я пытаюсь опубликовать его через Angular, я получаю эту ошибку: Forbidden (CSRF token missing or incorrect.): /api/form/

Я что-то не так делаю?

1 Ответ

0 голосов
/ 25 апреля 2018

У меня возникла та же проблема, когда я хотел загрузить фотографию профиля в мой бэкэнд REST Django.

У вас есть 2 варианта, в основном.

Первый - отключение проверок CSRF, которые по умолчанию применяются DRF.Прочитайте здесь .Вы можете сделать это для целей тестирования.

Второй вариант - передать токен CSRF в заголовок вашего запроса.Для этого взгляните на API $ cookies .При этом вы можете извлечь токен из cookie и вставить его в свой заголовок следующим образом: 'X-CSRFToken': your-csrf-token-here.

Вы можете убедиться в этом, открыв инструменты разработчика в браузере и перейдя к файлам cookie вашего сайта.Вы должны увидеть там одного по имени csrftoken.

Надеюсь, это отправило вас на правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...