通过React html表单将CSV或Excel文件以及json数据上传到Django

时间:2019-08-15 14:33:49

标签: django reactjs django-rest-framework axios

我想提交一个表单以上传一个csv文件或一个excel文件,并提供表单中提供的其他信息,例如文字。

为了定义表单并发送请求,我将React Bootstrap与axios结合使用,对于api,我将Django 2.2与其他框架结合使用。

request.FILES始终是空字典,即使我尝试将Content-Type标头设置为multipart/form-data,然后在请求和打印request.data的发布数据中也找不到任何内容下面的.get('information')在Django日志中显示None。请帮忙,任何支持将不胜感激。

有关代码段,请参见下文。

render()中的表单定义:

<form onSubmit={this.handleSubmit}>
    <FormGroup>
    <Form.Label>Upload file</Form.Label>
    <Form.Control type="file" onChange={this.handleFile}></Form.Control>
    </FormGroup>

    <Button block bssize="large" disabled={!this.validateForm()} type="submit">
    Submit
    </Button>
</form>

处理文件更改:

handleFile = event => {
  event.preventDefault();

  const fileToUpload = event.target.files[0]
  this.setState({
    fileToUpload: fileToUpload
  })
}

发送请求:

const payload = {
    file: this.state.fileToUpload,
    information: "somedata"
}

const contentType = "multipart/form-data"
let accessToken = token
var headers = {"Authorization" : `Bearer ${accessToken}`}
headers['Content-Type'] = contentType
const response = await axios({
    method: "post",
    data: payload,
    url: url,
    headers: headers
});

Django端点定义:

class RegisterData(views.APIView):
    parser_classes = (parsers.JSONParser, parsers.MultiPartParser)

    def post(self, request):
        for file in request.FILES.values():
            print(file)

        info = request.data.get('information')
        print(info)
        return Response({"success": "Good job, buddy"})

1 个答案:

答案 0 :(得分:0)

答案在评论中,但我将其放在此处,以便这些问题的用户更容易看到:

检查axios是否使用了正确的数据类型和参数:

How to post a file from a form with Axios

相关问题