Как сделать файл run bat для быстрого запуска django сервера

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Я хочу, чтобы пользователь нажал один значок (ссылку на файл BAT) на DESKTOP, и он запускает два процесса.

первый - запустить сервер django

где моя ошибка? BAT файл просто запустите cmd.exe и перейдите в каталог D:\D1 и ничего больше. Правильный синтакс второй строки.

Да, я пытаюсь, но без изменений. CMD запускается, перейдите в папку D: \ D1 \, и последняя команда "python manage.py runserver" не обрабатывается

Если вы используете Start лучше посоветовать использовать параметр /D для установки рабочего / текущего каталога . Start "" /D "D:\D1" " " . @Mircea, я также показал вам, как структурировать хромированную линию в ответе на днях, когда вы оскорбили меня, вы, похоже, проигнорировали этот совет .

и в моем файле настроек Django у меня есть класс, включенный в MIDDLEWARE_CLASSES список.

Но когда я запускаю Django с помощью runserver и запрашиваю страницу, я попадаю в терминал

@Mutant выполняется только дважды под runserver . потому что runserver сначала загружает приложения для их проверки, а затем фактически запускает сервер. Даже при автоматической перезагрузке runserver код выполняется только один раз.

Обновление от ответа Пиклера ниже: Django 1.7 теперь имеет крючок для этого

Вы хотите выполнить код на верхнем уровне urls.py . Этот модуль импортируется и выполняется один раз.

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

Код urls.py выполняется только при первом запросе (думаю, он отвечает на вопрос @SteveK) (django 1.5)

Это выполняется один раз для каждого работника, в моем случае это выполняется в общей сложности 3 раза.

Обновление: Django 1.7 теперь имеет крючок для этого

Для Джанго myapp/__init__.py

При использовании ./manage.py runserver . это выполняется дважды, но это потому, что у runserver есть некоторые хитрости для проверки моделей в первую очередь и т. Д. . при нормальном развертывании или даже при автоматической перезагрузке runserver это выполняется только один раз.

Я думаю, что это выполняется для каждого процесса, который загружает проект. Поэтому я не могу понять, почему это не будет работать идеально при любом сценарии развертывания. Это работает для команд управления. +1

Я понимаю, что это решение можно использовать для выполнения произвольного кода при запуске сервера, но возможно ли поделиться некоторыми данными, которые будут загружены? Например, я хочу загрузить объект, который содержит огромную матрицу, поместить эту матрицу в переменную и использовать ее через веб-API в каждом запросе, который может выполнить пользователь. Это возможно?

В документации говорится, что это не место для взаимодействия с базой данных. Это делает его непригодным для большого количества кода. Куда может пойти этот код?

РЕДАКТИРОВАТЬ: Возможный взлом, чтобы проверить аргументы командной строки any (x в sys.argv для x в ['makemigrations', 'migrate'])

По сути, вы можете использовать

/wsgi.py это, и он будет запущен только один раз, при запуске сервера, но не при запуске команд или импорте определенного модуля.

Снова добавив комментарий, чтобы подтвердить, что этот метод выполнит код только один раз. Нет необходимости в каких-либо механизмах блокировки.

Но эта команда не будет перезагружать runserver после других изменений кода.

Да, этот плюс плюс ответ Пиклера сработал и для меня, так как он предотвращал множественные ready(self) вызовы, но при этом мог запускать их только один раз. Ура!

runserver По умолчанию Django запускает два процесса с разными номерами pid. --noreload заставляет это начать один процесс.

Как предлагает @Pykler, в Django 1.7+ вы должны использовать ловушку, объясненную в его ответе, но если вы хотите, чтобы ваша функция вызывалась только при вызове run server (а не при вызове миграций, миграции, оболочки и т. Д. ), и вы хотите избежать исключений AppRegistryNotReady, которые вы должны сделать следующим образом:

Спасибо за это! В моем приложении есть расширенный планировщик Python, и я не хотел запускать планировщик при выполнении команд manage.py.

Обратите внимание, что вы не можете надежно подключиться к базе данных или взаимодействовать с моделями внутри AppConfig.ready функции (см. Предупреждение в документации).

Если вам нужно взаимодействовать с базой данных в вашем коде запуска, одна из возможностей - использовать connection_created сигнал для выполнения кода инициализации при подключении к базе данных.

Очевидно, что это решение предназначено для запуска кода один раз для подключения к базе данных, а не один раз для начала проекта. Поэтому вам нужно разумное значение CONN_MAX_AGE параметра, чтобы не повторять код инициализации при каждом запросе. Также обратите внимание, что сервер разработки игнорирует CONN_MAX_AGE , поэтому вы будете запускать код один раз для каждого запроса в разработке.

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

Это хорошее решение, если вам нужен доступ к базе данных в вашем коде запуска. Простой способ , чтобы заставить его работать только один раз , чтобы иметь my_receiver функцию отключиться от connection_created сигнала, в частности, добавить следующее к my_receiver функции: connection_created.disconnect(my_receiver) .

Привет, Оскар! На SO мы предпочитаем, чтобы ответы содержали пояснения на английском языке, а не только код. Не могли бы вы дать краткое объяснение того, как / почему ваш код решает проблему?

Django - NGINX - это популярная и хорошо протестированная комбинация, используемая для развертывания веб-приложений в продакшене. В этом посте я объясню шаги, необходимые для развертывания вашего проекта Django на сервере с использованием Ubuntu 18.04.

Чтобы развернуть Django - NGINX на вашем сервере, выполните следующие простые шаги.

1. Установите необходимые пакеты, используя apt

2. Создайте каталоги для ваших статических и медиа файлов

Прежде всего, вы должны создать каталоги. Здесь я предполагаю, что вы в настоящее время используете пользователя Ubuntu с домашним каталогом по умолчанию /home/ubuntu:

Вторая команда сделает пользователя с именем www-data владельцем каталога /home/ubuntu/media. www-data будет пользователем, выполняющим ваш процесс Python в uWSGI, и этот пользователь должен иметь возможность писать в каталог мультимедиа, чтобы правильно сохранять загруженные пользователем файлы.

3. Настройте свой проект Django и установите требования

Этот шаг действительно зависит от вашего конкретного приложения Django, для целей данного руководства я буду предполагать, что ваш проект Django установлен в каталоге / home/ubuntu/django_project/ со следующей структурой:

Также я предполагаю, что вы установили все свои зависимости Python, например, используя apt или pip.

Я всегда следую рекомендациям при запуске нового проекта Django, разбивая монолитный файл settings.py на разные файлы, по одному для каждой среды развертывания (local, test, production и т.д.).

В нашем случае Django будет использовать модуль project/settings/production.py для своих настроек. Здесь мы устанавливаем переменные STATIC_ROOT и MEDIA_ROOT для каталогов, которые мы создали на шаге 2:

4. Соберите статические файлы

Запустите следующую команду, чтобы собрать все статические файлы для вашего проекта Django:

Эта команда скопирует все статические файлы (Javascript, CSS, изображения) для всех ваших приложений Django в каталог STATIC_ROOT, настроенный в production.py . Например, /home/ubuntu/static .

5. Настройте uWSGI для размещения вашего проекта Django.

Создайте файл с именем django.ini в каталоге /etc/uwsgi/apps-enabled/. Содержимое файла должно быть примерно таким:

Перезапустите uWSGI с помощью:

Вы должны найти логи uWSGI в /var/log/uwsgi/apps/django.log. Поэтому вы можете проверить их, чтобы увидеть, правильно ли запущен процесс Python или есть проблемы.

6. Настройте NGINX для обслуживания вашего приложения

Создайте файл с именем django в каталоге /etc/nginx/sites-enabled/. Содержимое файла должно быть примерно таким:

Перезапустите NGINX с помощью:

7. Наслаждайтесь своим приложением Django

Направьте браузер на свой домен, и вы увидите приложение Django во всей его красе!

Создайте на жестком диске папку, в которой будут хранится файлы вашего проекта.

Откройте консоль командной строки и перейди в созданную вами папку.

Далее выполните введите следующую команду и нажмите Enter.

django-admin.py startproject mysite

Это создаст папку "mysite" в текущем выбранной папке.

Вы не должны использовать в качестве названия проекта названия компонентов Python или Django.

Это означает, что проект не может называться django (что конфликтует с Django) или test (конфликтует со стандартным пакетом Python).

Давайте посмотрим что создала команда startproject:

mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py

Структура проекта по-умолчанию была недавно изменена. Если вы видите "простую" структуру (без внутреннего каталога mysite/), возможно вы используете версию Django которая не соответствует этому описанию. Вам следует читать старую версию учебника или обновить Django.

Рассмотрим эти файлы:

Внешний каталог mysite/ – просто контейнер для вашего проекта. Его название никак не используется Django и вы можете назвать его как угодно.

manage.py - скрипт, который позволяет вам взаимодействовать с проектом Django.

Внутренний каталог mysite/ - это пакет Python вашего проекта. Его название – это название пакета Python, которое вы будете использовать для импорта чего-либо из проекта (например, import mysite.settings).

mysite/__init__.py - пустой файл, который указывает Python, что текущий каталог является пакетом Python.

mysite/settings.py - настройки/конфигурация проекта.

mysite/urls.py - конфигурация URL-ов для вашего проекта Django.

mysite/wsgi.py - точки входа для WSGI-совместимый веб-серверов.

Давайте проверим как работает этот проект. Перейдите во внешний каталог mysite, если вы этого еще не сделали, и выполните команду python manage.py runserver. Вы увидите следующий вывод:

Validating models.
0 errors found.


Только что вы запустили сервер для разработки Djang - простой Web-сервер написанный на Python.


Теперь, когда сервер работает, перейдите на страницу http://127.0.0.1:8000/ в браузере. Вы увидите страницу с "Welcome to Django". Работает!

По-умолчанию, команда runserver запускает сервер для разработки на локальном IP используя порт 8000.

Если вы хотите изменить порт, укажите его через аргумент. Например, эта команда запускает сервер используя порт 8080:

python manage.py runserver 8080

Если вы хотите изменить IP, передайте его вместо со значением порта. Что бы прослушивать все публичные IP (полезно, если вы хотите показать свою работу на других компьютерах), используйте:

Читайте также: