从Angular 5前端发布到Django Rest Framework后端

时间:2018-04-24 18:39:43

标签: django-rest-framework angular5

我正在尝试从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 :(得分:0)

当我想将个人资料图片上传到我的Django REST后端时,会遇到完全相同的问题。

基本上你有两个选择。

第一个是禁用CSRF检查,默认情况下由DRF强制执行。阅读here。您可以这样做以进行测试。

第二个选项是在请求标头内传递CSRF令牌。为此,请查看$cookies API。 这样,您就可以从Cookie中获取令牌并将其粘贴到标题中,如下所示:'X-CSRFToken': your-csrf-token-here

您可以通过在浏览器中打开开发工具并导航到您网站的Cookie来验证这一点。你应该看到一个叫csrftoken的那个。

我希望这会让你走上正轨。