Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 29, 2019 00:43:29

dvadim
От: Москва
Зарегистрирован: 2016-07-05
Сообщения: 5
Репутация: +  1  -
Профиль   Отправить e-mail  

Как вызвать скрипт Питона из Джанго

Есть интернет-магазин на Django у которого имеется файл create_yml.py , который генерит прайс для Яндекс маркета market.xml и кладет его в папку /yml/.
Скрипт взывается из консоли командой: “MySite/manage.py create_yml > /yml/market.xml”.

Как сделать в админке ( admin/index.html ) гиперссылку, по нажатии которой будет выполняться вышеуказанная команда ( create_yml > /yml/market.xml ).

Да простят ветераны форума мой нубский вопрос Что такое urls.py и views.py я знаю, но, увы , моих знаний недостаточно, чтобы решить эту проблему. Заранее спасибо за помощь.

Офлайн

#2 Сен. 30, 2019 09:06:58

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Как вызвать скрипт Питона из Джанго

Вызов внешней программы из питона:

 import subprocess
proc = subprocess.run("python MySite/manage.py create_yml > /yml/market.xml", shell=True)
Если надо получить результат её действия, придётся дополнительно с PIPE заморочиться, почитай про модуль subprocess.

Как сделать в админке ( admin/index.html ) гиперссылку
Если имеется ввиду встроенная джанговская админка, то не знаю, я её менять никогда не пытался. Если же это некая ваша собственная админка, то всё так же, как и для обычных ссылок: добавляем урл в urls.py, создаём отдельную view-функцию с вызовом скрипта, добавляем ссылку в шаблон.

И это… Для вопросов по Джанге тут на форуме отдельная тема есть.



Отредактировано Striver (Сен. 30, 2019 09:08:12)

Офлайн

#3 Сен. 30, 2019 15:55:19

dvadim
От: Москва
Зарегистрирован: 2016-07-05
Сообщения: 5
Репутация: +  1  -
Профиль   Отправить e-mail  

Как вызвать скрипт Питона из Джанго

Striver, спасибо за помощь, хотя вопрос был немного в другом, навели на мысль как сделать “в лоб”. Оставляю это тут это для будущих нубов: “Как запустить питоновский скрипт, который не рендерит страницу, а просто выполняет определенную функцию (на примере гиперссылки из админки)”.


Добавляем в файл /admin/index.html:

 <a style="display: block;" href="/admin/generate_yml/">Обновить Yandex.xml</a>

Добавляем в файл /app/viewes.py:
 url(r'^admin/generate_yml/', views.generate_yml, name='generate_yml'),

Добавляем в файл /app/views.py:
 def generate_yml(self):
    from app.management.commands.create_yml_helper import generate_yml
    from django.http import HttpResponse
    generate_yml()
    return HttpResponse("Yandex price created Successfully!")


Создаем запускаемый файл create_yml_helper ( в моем случае путь app/management/commands) такого содержания:

 import os
# Файл на Python запускает команду оболочки Linux 
def generate_yml(self):
  try:
      command = 'YOUR_OWN_PATH/venv/bin/python YOUR_OWN_PATH/manage.py create_yml > your_own_path/yml/market.xml' # Тут м.б. любая команда 
      os.system(command)
  except:
      print('Ошибка генерации Ya Xml')

Да, сделано сильно через одно место, но работает

Офлайн

#4 Июнь 8, 2020 17:34:40

kalkerre
Зарегистрирован: 2020-06-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как вызвать скрипт Питона из Джанго

Уважаемый dvadim!

dvadim
интернет-магазин на Django у которого имеется файл create_yml.py
А поделитесь, по-братски, вот этим самым create_yml.py! Буду премного вам благодарен!

Отредактировано kalkerre (Июнь 8, 2020 17:34:56)

Офлайн

#5 Июнь 10, 2020 00:31:17

dvadim
От: Москва
Зарегистрирован: 2016-07-05
Сообщения: 5
Репутация: +  1  -
Профиль   Отправить e-mail  

Как вызвать скрипт Питона из Джанго

kalkerre
Уважаемый dvadim!
Держите (файл прикрепляю).

Прикреплённый файлы:
attachment create_yml.py (3,6 KБ)

Офлайн

#6 Июнь 12, 2020 09:30:00

kalkerre
Зарегистрирован: 2020-06-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как вызвать скрипт Питона из Джанго

dvadim
Благодарю!
Кстати, по вашему вопросу - не проще ли сделать на сервере cron-задачу с запуском скрипта, который генерит этот хмл? У меня так и сделано, например. Автоматически каждые 10 минут - новый файлик (старый перезаписывается)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version