Джанго. Как разобрать XML-файл во время загрузки

мои просмотры

class TestFilesView(FormView):
    form_class = TestFilesForm
    template_name = 'testy/xml_files_upload.html'

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        files = request.FILES.getlist('file_field')
        if form.is_valid():
            for f in files:
                instance = TestFiles(
                    id_test=TestHeader(self.kwargs['id']),
                    name='xx',
                    file_name=f.name,
                    file_field=f
                )
                instance.save()

            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def get_success_url(self):
        return reverse('tests_list')

Как я могу открыть загружаемый xml-файл, получить атрибут «name» из xml-файла и переслать его в мою переменную имени istance?

Вы можете помочь мне ?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
346
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам следует использовать библиотеку синтаксического анализа, например Красивый суп. Вы можете попробовать что-то вроде ниже:

if form.is_valid():
            for f in files:
                instance = TestFiles(
                    id_test=TestHeader(self.kwargs['id']),
                    name='xx',
                    file_name=f.name,
                    file_field=f
                )
                instance.save()
                with open(f.read(), 'r') as file:
                    soup = BeautifulSoup(file, 'xml.parser')
                    instance.name = soup.name
                    instance.save()

когда я использую вашу иллюзию, я получаю ошибку: ожидаемый объект str, bytes или os.PathLike, а не InMemoryUploadedFile

Dominik 18.04.2018 11:56

Пожалуйста, предоставьте полную обратную связь.

May.D 19.04.2018 10:28

Хорошо, моя ошибка, просто замените with open(f, 'r') as file: на with open(f.read(), 'r') as file:. Однако у вас могут быть проблемы с функцией открытия (не подходит для xml). Если да, удалите его и просто попробуйте soup = BeautifulSoup(f.read(), 'xml.parser')

May.D 20.04.2018 08:56

Однако из документации django позаботьтесь о размере вашего файла. UploadedFile.read () ¶ Прочитать все выгруженные данные из файла. Будьте осторожны с этим методом: если загруженный файл огромен, он может перегрузить вашу систему, если вы попытаетесь прочитать его в памяти. Вы, вероятно, захотите вместо этого использовать chunks (); см. ниже. UploadedFile.multiple_chunks (chunk_size = None) ¶ Возвращает True, если загруженный файл достаточно велик, чтобы требовать чтения несколькими фрагментами. По умолчанию это будет любой файл размером более 2,5 мегабайт, но его можно настроить; см. ниже.

May.D 20.04.2018 08:57

Другие вопросы по теме