Django Rest 和 Axios

Posted

技术标签:

【中文标题】Django Rest 和 Axios【英文标题】:Django Rest and Axios 【发布时间】:2018-06-04 17:53:30 【问题描述】:

我正在尝试使用 DRF 和 Axios 发布数据。到目前为止,我已经尝试了几个不同的选项,结果相同,403(禁止)。我可以使用 axios.get 获取数据,但无法发布数据。我是休息和使用 ajax 的新手,所以如果这很明显,我深表歉意。

axios 调用

return axios(
                method: 'post',
                url: "/schedules/",
                data: 
                    "emp": this.emp.emp,
                    'start_time': this.startTime,
                    "end_time": this.endTime,
                    "date": this.today,
                    "location": this.location
                ,
                xsrfHeaderName: "X-CSRFToken",
                responseType: 'json'
              )

Settings.py

CSRF_COOKIE_NAME = "XSRF-TOKEN"

序列化器

class SchedSerializer(serializers.ModelSerializer):

    class Meta:
        model = Schedule
        fields = (
            'location',
            'emp',
            'date',
            'start_time',
            'end_time'
        )

查看

class SchedViewSet(viewsets.ModelViewSet):
    queryset = Schedule.objects.all()
    serializer_class = serializers.SchedSerializer

【问题讨论】:

【参考方案1】:

这是我正在使用的有效设置。有两件事,您需要确保您的标头被正确发送。

HTTP.defaults.headers.post['x-csrftoken'] = csrf_token;
HTTP.post('django-url/', "id":id,"value":resp)

我可以通过https://github.com/ottoyiu/django-cors-headers 解决这个问题。 确保您的 csrf_token 填充正确,然后确保您允许在 settings.py 中将正确的标头传递给 django 应用程序:

CORS_ALLOW_HEADERS = (
...
    'x-csrftoken',
...

【讨论】:

以上是关于Django Rest 和 Axios的主要内容,如果未能解决你的问题,请参考以下文章

Django + AngularJS:没有使用普通 URL 和视图的 Django REST 框架的类 REST 端点?

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers

Django、REST 和 Angular 路由

django-rest-framework-datatables 和 Django Parler 的翻译字段

使用 django-allauth 和 django-rest 框架