首页 > 解决方案 > Angular 和 Django 文件上传:禁止 (403) CSRF 验证失败。请求中止

问题描述

我遇到了以下问题:禁止(403)CSRF验证失败。请求中止。我正在使用 Angular 8 上传文件并将其发送到 django 进行一些操作而不保存文件,然后将 pandas DataFrame 作为 json 返回。这是角代码:

uploadDatasetFile(formData : FormData){
    this._http.post(`${this.baseUrl}upload_dataset`, formData).subscribe(
      (data) => {
        this.dataFrame = data;
        console.log(data);
      },
      (error) => {
        console.error(error);
      } 
    );
  } 

和 Django 代码:

def upload_local_dataset(request):
    if request.method == 'POST':
        print("Request FILES : ", request.FILES)
        dataset = pd.read_csv(request.FILES.get('datasetfilepath'), header=0, index_col=None)
        request.session['ts_dataset'] = dataset.to_json(orient='values')
        request.session['ts_dataset_copy'] = dataset.to_json(orient='values')

        return HttpResponse(dataset.to_json(orient='values'))

谢谢你的帮助。我是 Angular 和 Django 的新手,我正在做我的实习项目。

标签: djangoangularfile-upload

解决方案


您需要在表单请求中添加 {% csrf_token %}

<form>
    {% csrf_token %}
    <anything_else>
</form>

或者您可以添加

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def upload_local_dataset(request):
    #stuff

到 post 功能。 https://docs.djangoproject.com/en/2.2/ref/csrf/


推荐阅读