2 / 2 / 0
Регистрация: 07.05.2014
Сообщений: 32

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

19.05.2018, 23:27. Показов 9623. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru