Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32

Django. Загрузка файлов на сервер

19.05.2018, 23:27. Показов 9591. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, уважаемые форумчане.

Возник вопрос с загрузкой файла на сайт. У меня по форме формируется файл(word) и мне его нужно загрузить на сервер. В документации там 3 варианта рассмотрено, мне вроде как 3-ий подходит, но я не понимаю почему они не сохраняют форму, а сохраняют экземпляр (instance = ModelWithFileField(file_field=request.FI LES['file']) / instance.save() )

Конкретно по моему вопросу:
в models.py
Python
1
2
....
file = models.FileField(upload_to='prop/', blank=True)
в forms.py
Python
1
2
....
file = forms.FileField(widget=HiddenInput, required=False)
в views.py
Python
1
2
3
4
5
6
7
8
9
10
11
    if request.method == 'POST':
        form = VisitorsForm(request.POST, request.FILES)
        if form.is_valid():
 
        ...обработка в word...
 
        # Сохраняем в word
        document_1.write('D:\DjangoProjects\work_pass\propuska\media\prop\\' + str(form.name) + '.docx')
 
        
        form.save()
То есть файл создался, а как загрузить-то как?
Заранее спасибо
p.s. путь потом надо поменять, знаю)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2018, 23:27
Ответы с готовыми решениями:

Загрузка файлов на сервер
Вот я сделал форму загрузки файлов, как сделать так чтоб все загруженные файлы загружались на мой сервер или файлообменник ? Сама форма...

Загрузка файлов на сервер
Подскажите пожалста, есть код: <div id = "buttn"> <div id = "btn_open"> <input type='file' id="files" name="files"...

C# загрузка файлов на сервер
Здраствуйте! Помогите реализовать загрузку файлов на сервер data.cod.ru в C#. Или может есть у кого примерный код. Читал что надо делать...

18
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
20.05.2018, 04:41
Цитата Сообщение от zllo Посмотреть сообщение
То есть файл создался, а как загрузить-то как?
Где файл создался и куда он должен загрузиться?

Не совсем вполне понимаю, что Вы хотите сделать. У вас файл создается из формы или загружается пользователем?..
0
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
20.05.2018, 10:15  [ТС]
Jabbson, файл создаётся локально, не загружается пользователем, то есть в папке \media\prop появляется файл после отправки формы, физически.
Мне нужно, чтобы при открытии панели администратора, там была ссылка на созданный файл.
Правда чтобы его открыть там ещё много чего написать надо.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
20.05.2018, 22:10
Лучший ответ Сообщение было отмечено zllo как решение

Решение

На скорую руку вот так получилось (сделал без доков, а с txt, c доками сами разбирайтесь или новый вопрос создавайте):

models.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from django.db import models
from django.conf import settings
from django.utils.html import format_html
 
 
class PersonModel(models.Model):
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=25)
    date_of_birth = models.DateField()
 
    def file_location(self):
        return format_html('<a href="{}">{}</a>'.format(
            settings.MEDIA_URL+'{}-{}-{}.txt'.format(self.first_name, self.last_name, self.date_of_birth),
            'link')
        )
forms.py
Python
1
2
3
4
5
6
7
8
from django import forms
from .models import PersonModel
 
 
class PersonForm(forms.ModelForm):
    class Meta:
        model = PersonModel
        fields = '__all__'
admin.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
from django.contrib import admin
from .models import PersonModel
 
 
@admin.register(PersonModel)
class PersonAdmin(admin.ModelAdmin):
    readonly_fields = ('person_file_location',)
    fields = ('first_name', 'last_name', 'date_of_birth', 'person_file_location')
    list_display = ('first_name', 'last_name', 'date_of_birth', 'file_location')
 
    def person_file_location(self, obj):
        return obj.file_location()
views.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from django.shortcuts import render
from django.conf import settings
from .forms import PersonForm
from .models import PersonModel
 
 
def index(request):
    if request.method == 'POST':
        p = request.POST
        fn = p['first_name']
        ln = p['last_name']
        dob = p['date_of_birth']
 
        file_name = settings.MEDIA_ROOT+'{}-{}-{}.txt'.format(fn, ln, dob)
 
        with open(file_name, 'w') as f_in:
            f_in.write('{}\n{}\n{}'.format(fn, ln, dob))
 
        PersonModel(first_name=fn, last_name=ln, date_of_birth=dob).save()
        context = {'form': PersonForm(request.POST), 'msg': 'data saved'}
    else:
        context = {'form': PersonForm()}
 
    return render(request, 'generate_file/index.html', context)


После этого в админке есть ссылки на эти файлы.


Это то, что Вы хотели?
1
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
21.05.2018, 11:24  [ТС]
Jabbson, да, это то. Спасибо.
И ещё вопрос. Как скачать-то его теперь (ибо понимаю, что просмотреть его невозможно)? Из перерытого нашёл лишь тему 3-х летней давности на этом форуме. И, собственно, вопрос упирается в "обработчик запроса". Я всё никак не пойму, если он в представлении, то как это передаётся-то?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 14:43
а по щелчку по link что происходит? Должно именно скачиваться.
0
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
21.05.2018, 14:52  [ТС]
Jabbson, страницы нет. Ошибка 404. Но она ведь и не создана, насколько я понимаю.
Миниатюры
Django. Загрузка файлов на сервер  
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 15:34
Нет, тут проблема в доступе к MEDIA_URL. Как это настроено в settings и urls.py?

Добавлено через 1 минуту
Проверил, у меня DOCX просто скачивается.
0
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
21.05.2018, 16:02  [ТС]
Jabbson, мне кажется, что как раз проблема в url. Но вроде в доках этого хватает

urls.py
Python
1
2
3
urlpatterns = [
    url(r'^admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_DIR)

settings.py
Python
1
2
3
4
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_DIR = os.path.join(BASE_DIR, 'media')
...
MEDIA_URL = '/media/'
Миниатюры
Django. Загрузка файлов на сервер  
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 16:07
А где находится по отношению к проекту папка media?

Добавлено через 1 минуту
И файл - он по этому пути есть? Попробуйте вывести MEDIA_DIR в консоль или посмотреть в дебаговой информации.
0
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
21.05.2018, 16:07  [ТС]
Jabbson, в корне приложения. Где настройки и url приложения
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 16:09
Ну или скидывайте, если сейчас не успею - вечером гляну (но сейчас 10 утра).
0
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
21.05.2018, 16:19  [ТС]
Исходник прилагаю. Файл физически создаётся. Ссылка тоже. Не успеете - ничего страшного.
Вложения
Тип файла: zip work_pass.zip (229.9 Кб, 20 просмотров)
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 16:28
А так - интереса ради - чего не второй джанг?
0
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
21.05.2018, 16:31  [ТС]
Jabbson, учусь. Купил tango with django. У них ещё 1.9 в последней книге. А корячиться с подгонами версий - та ещё песня.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 16:36
Цитата Сообщение от zllo Посмотреть сообщение
Купил tango with django. У них ещё 1.9 в последней книге. А корячиться с подгонами версий - та ещё песня.
резонно. но вторую советую.

Пока я попробовал вывести MEDIA_DIR и посмотрел этот путь. У меня он вот такой

/Users/jabbson/PycharmProjects/work_pass/media
то есть папка медиа в основной (самой верхней) папке проекта и там её нет.

1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 16:38
и если её туда скопировать из папки приложения - она тут же отдает файлы.
1
2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32
21.05.2018, 16:44  [ТС]
Jabbson, Да, всё отдаёт. Спасибо большое) На вторую обязательно перейду, но чуть позже
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.05.2018, 16:45
Без проблем, удачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2018, 16:45
Помогаю со студенческими работами здесь

Загрузка файлов на сервер
Всем добрый день, подскажите пожалуйста, как проверить что файл имеет расширение .xlsx при загрузке. И второй момент как при загрузке...

Загрузка файлов на сервер
Почему так работает как надо move_uploaded_file ( $_FILES, '/var/www/www-root/data/www/сайт/vsejpg/555/'.$_POST); а так работает не...

Загрузка файлов на сервер
Здравствуйте! Пишу загрузку файлов на сервер, но что-то идет не так в 16 строке хотя немного пробовал менять код, но все мои методы не...

Загрузка файлов на сервер
Здравствуйте. Поделитесь, пожалуйста, как сделать с помощью ajax загрузку файлов на сервер, но обязательно нужно показывать прогресс...

Загрузка файлов на сервер
Как осуществить загрузку нескольких файлов на сервер?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru