Django Загрузка файлов из формы получает CSRF Forbidden на производстве

У меня есть простая Django FileForm для загрузки нескольких файлов (в основном txts с координатами полигонов). Я не хочу сохранять загруженные файлы где-либо, а только обрабатывать их на лету (память?) и возвращать карту с полигонами и новый мой файл (который преобразует и экспортирует все txts в файл формата .dxf (совместимый с CAD)).

Я сделал всю логику и моя программа, кажется, работает нормально на разработке, но на производстве (Heroku) когда я нажимаю кнопку submit на моей форме, я продолжаю получать сообщение CSRF Forbidden 403. Я очень расстроен. Я использовал декораторы csfr (csrf_exempt, requires_csrf_token, ensure_csrf_cookie) в моих представлениях, но ни один из них не работает. Я включил enctype="multipart/form-data"> и {% csrf_token %} в шаблоне формы.

В чем проблема? Мне трудно тестировать и пробовать, потому что на этапе разработки все в порядке, и мне приходится каждый раз разворачивать систему, только чтобы посмотреть, работает ли другой подход.

Это потому, что я не сохраняю файлы на модели и на диске (какова логика здесь?), или потому, что я что-то упускаю в части CSRF в моих настройках?

settings.py (при развертывании)

forms.py

class UploadFileForm(forms.Form):
    files = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

html

<div class="row justify-content-center align-items-center text-center" style="padding-top: 30px; width: 500px; margin: auto;">
    <fieldset name="Multiple Files Upload">
        
    <form method="post" action="/draw-polygons/" enctype="multipart/form-data">{% csrf_token %}

      <dl><input class="form-control" type="file" id="formFileMultiple" name="files" required multiple></dl>

      <button type="submit" class="btn btn-outline-dark" style="margin-top: 10px;">Φόρτωση</button>

    </form>
    
    </fieldset>
</div>

view.py

def upload_multiple_files(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        files_list = request.FILES.getlist('files')
        
        if form.is_valid():
            for f in files_list:
                try:
                    '''my code here'''
                except:
                    '''my code here'''

            '''my code here'''

            return render(request, "multiple/success.html", context)
    else:
        form = UploadFileForm()
    return render(request, 'multiple/multiple.html', {'title': 'myKAEK.gr | Draw Polygons', 'form': form})

def txt_dxf(request):
    topos = cache.get('topos')
    doc = ezdxf.new("R2000")
    msp = doc.modelspace()
    doc.layers.add('POLYS_FROM_TXTS')
    
    for i in topos:
        msp.add_lwpolyline(i, dxfattribs={"layer": "POLYS_FROM_TXTS"})

    out = io.BytesIO()
    doc.write(out, fmt='bin')
    out.seek(0)

    return FileResponse(out, as_attachment=True, filename='polygons_from_txt.dxf')

urlpatterns = [
    path('draw-polygons/', views.upload_multiple_files, name='upload_multiple_files'),
    path('draw-polygons/export_dxf/', views.txt_dxf, name='txt_dxf'),
]

Попробуйте сделать это с помощью Django Forms, это избавит вас от написания лишнего кода и будет обрабатывать такие крайние случаи.

https://docs.djangoproject.com/en/4.1/topics/http/file-uploads/#uploading-multiple-files

Вернуться на верх