Проблема создания папки и файла после загрузки в Django

Я создаю платформу для оценки исходного кода, используя React и Django. В основном пользователь загружает выбранный им исходный файл, мой фронтенд отправляет файл в бэкенд, который работает нормально, и мой бэкенд должен создать копию файла в определенной структуре папок, потому что приложение code evaluater (другое приложение) должно обращаться к этой структуре в поисках новых файлов.

Структура папок в основном выглядит следующим образом: У меня есть первая папка с именем Delivereds, внутри нее есть много папок, названных по идентификатору пользователя, внутри каждой из этих папок есть много папок, названных по идентификатору отправки.

Для упрощения решения проблемы, давайте разберемся с этим, игнорируя идентификатор пользователя, просто сосредоточимся на адресе папки, как это: "/Delivereds/Question1/code.c++".

Моя проблема в том, что когда я пытаюсь создать папку, она не работает. Я практически новичок в Django, поэтому я не знаю, нужно ли мне устанавливать какие-то конфигурации в главном файле настроек. Решения, которые я нашел в своих поисках, очень просты и не сработали в моем случае.

Мой текущий код выглядит следующим образом:

elif request.method == 'POST':
        if request.FILES.get('file'):
            file = request.FILES['file']
            parent_dir = '..\Delivereds\Question1'
             
            path = os.path.join(parent_dir, file.name)

            try:
                if not os.path.exists(path):
                    print('hit')
                    os.mkdir(path)
                else:
                    print('no hit')
                
            except Exception as error:
                print(error)
            
            try:
                with open(path, 'wb+') as destiny:
                    for chunk in file.chunks():
                        destiny.write(chunk)
                        print(chunk)
            except Exception as error:
                print(error)

Ниже print(chunk) находится сериализатор и возврат. Я уже пробовал разные варианты этого кода, например, создать только папку с os.mkdir(path) и использовать что-то вроде with open(path + file.name, 'wb+') as destiny.

Этот файл - view.py приложения под названием tasks_delivered. Идея заключается в том, чтобы создать папку Delivereds в корне приложения Django и хранить в ней все задания (предложения о том, как сделать это более эффективно, приветствуются).

Я использую "hit" и "no hit" для отладки.

Оба блока try возвращают ошибки, вывод такой:

hit
[WinError 3] [WinError 3] The system cannot find the path specified: '..\\Delivereds\\Question1\\test.cpp'
[Errno 2] No such file or directory: '..\\Delivereds\\Question1\\test.cpp'

Я думаю, что одна из важных частей информации заключается в том, что мое приложение также использует изображения, поэтому мне пришлось изменить некоторые настройки, связанные со статическими файлами в основных settings.py и urls.py.

settings.py:

STATIC_URL = 'static/'
MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

CKEDITOR_UPLOAD_PATH = "media/images"
CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': 'Custom',
        'toolbar_Custom': [
            ['Bold', 'Italic', 'Underline'],
            ['NumberedList', 'BulletedList'],
            ['Link', 'Unlink'],
            ['RemoveFormat'],
        ],
        'width': '100%',
    },
}

urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('token/', TokenObtainPairView.as_view()),
    path('token/refresh/', TokenRefreshView.as_view()),
    path('api-auth/', include('rest_framework.urls')),
    path('', include('user.urls')),
    path('', include('disciplines.urls')),
    path('', include('semesters.urls')),
    path('', include('tasks.urls')),
    path('', include('task_question.urls')),
    path('', include('tasks_delivered.urls')),
    path('', include('task_classgroups.urls')),
    path('', include('classgroup.urls')),
    path('', include('related_topic.urls')),
    path('', include('tags.urls')),
    path('', include('field_areas.urls')),
    path('', include('question_historic.urls')),
    path('', include('questions.urls')),
    path('', include('strategy_correction.urls')),
    path('', include('strategy_classgroup.urls')),
    path('', include('strategy_discipline.urls')),
    path('', include('strategy_question.urls')),
    path('', include('strategy_task.urls')),
    path('', include('help_tips.urls')),
    path('', include('tips.urls')),
    path('', include('admin_type.urls')),
    path('', include('summaries.urls')),
    path('ckeditor/', include('ckeditor_uploader.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Я не понимаю, почему у меня проблемы с указанными путями, я думал, что цель os.mkdir(path) заключается в создании папки по указанному пути, если она еще не существует. Может ли кто-нибудь помочь мне исправить мой код и понять проблему?

Вместо этого можно использовать os.mkdir(path)

try, os.makedirs(path) создаст родительский каталог, если он не существует. Если промежуточные каталоги в пути не существуют, он создаст их.

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