Загрузка, обработка и загрузка с использованием Django

2

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

  • В моем файле views.py сообщается, что существует проблема с возвратом кадра данных, который я пытаюсь преобразовать в .csv.

  • При попытке загрузить файл из HTML, он перенаправил меня на это: error. 403 Forbidden: CSRF verification failed. Request aborted error. 403 Forbidden: CSRF verification failed. Request aborted error. 403 Forbidden: CSRF verification failed. Request aborted.

views.py:

from django.shortcuts import render
from .config import UPLOAD_DIR 
import os
import pandas as pd


#File extension checker
def read_data(data_input, **kwargs):

    #dictionary of file formats
    read_map = {"xls": pd.read_excel, "xlsm": pd.read_excel, "xlsx": pd.read_excel,
                "csv": pd.read_csv}

    #getting the file extension
    extension = os.path.splitext(data_input)[1].lower()[1:]

    #check if file extension and document upload validation
    assert extension in read_map
    assert os.path.isfile(data_input)


def upload(request):

    if request.method == "POST" and request.FILES["data_file"]:

        if "data_file" not in request.FILES:
            return render(request, 'qwe/form.html')


        data = request.FILES["data_file"]

        if data == "":
            return render(request, 'qwe/form.html')

        #uploads the data in the specific directory
        os.path.join(UPLOAD_DIR, data)

        # TO-DO DATA PROCESSING HERE

        #Error: Assigning to function call which doesn't return
        df = read_data(data)

        return df.to_csv("asd.csv")

    else:

        return render(request, 'qwe/form.html')

form.html:

<!DOCTYPE html>
<html>
<body>
<h1>Place holder</h1>

<h4>
    Please upload your training data here.
</h4>

<h5>
    Note: Please wait for the algorithm to finish then a download should commence.
    If there is no downloaded CSV, refresh this page and try again.
</h5>

<form method="post" enctype="multipart/form-data">
    <input type="file" name="data_file"/>
    <input type="submit" value="upload"/>
</form>
</body>
</html>
Теги:
pandas

1 ответ

1
Лучший ответ

Вам необходимо добавить {% csrf_token %} в вашу форму:

<form method="post" enctype="multipart/form-data">
  {% csrf_token %}
  <input type="file" name="data_file"/>
  <input type="submit" value="upload"/>
</form>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню