Для нескольких платформ, работающих с LANG
до C.UTF-8
(или en_US.UTF-8
и т. д.), будет работать:
$ echo '人' >test1.txt && echo '丁' >test2.txt
$ LANG=C.UTF-8 git diff --no-index --word-diff=plain --word-diff-regex=. -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
[-人-]{+丁+}
Однако LANG
, похоже, не соблюдается на некоторых платформ (например, Git для Windows ):
$ echo '人' >test1.txt && echo '丁' >test2.txt
$ LANG=C.UTF-8 git diff --no-index --word-diff=plain --word-diff-regex=. -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
[--]{+<81>+}
Обходной путь на этих платформах заключается в предоставлении необработанных байтов для символов UTF-8 (например, $'[^\x80-\xBF][\x80-\xBF]*'
для '.'
) для git diff:
$ echo '人' >test1.txt && echo '丁' >test2.txt
$ git diff --no-index --word-diff=plain --word-diff-regex=$'[^\x80-\xBF][\x80-\xBF]*' -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
[-人-]{+丁+}
Это может помочь. Вы можете редактировать yourapp / apps.py
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
# update my database here
pass
Вы можете выполнить код на верхнем уровне urls.py
. Этот модуль импортируется и выполняется один раз.
urls.py
from django.confs.urls.defaults import *
from your_script import one_time_startup_function
urlpatterns = ...
one_time_startup_function()
Я бы порекомендовал использовать что-то вроде этого, допустим, у вас есть такой скрипт:
# abc.py
from your_app.models import do_something
do_something()
Теперь вы можете запустить этот скрипт сразу после runserver (или любым другим способом, которым вы запускаете приложение django). ) вот так:
python manage.py runserver & python manage.py shell < abc.py
К вашему сведению, это будет работать, только если у вас есть bash в вашем терминале (например, в Linux, MacOs).
После внимательного прочтения вашей проблемы, я думаю, что запуск сценария после runserver
может оказаться не лучшим решением. Как вы сказали:
Эта внешняя база данных периодически обновляет свои значения.
blockquote>Итак, я думаю, вам нужно какое-то перодическое задание, чтобы выполнить это обновление. Вы можете использовать cronjob или вы можете использовать Сельдерей для этого.
Запуск сценария после runserver не очень хорошая идея, основная причина в том, что у вас будет окно, так как сервер работает (и доступен для пользователей), пока вы не закончите синхронизацию своих данных. Также, если вы синхронизируете с использованием скрипта после runserver
, вы не будете получать обновления от внешней базы данных после этого.
Лучшее решение для этого - настроить несколько баз данных, вы можете использовать внешнюю базу данных только с доступом для чтения. Таким образом, ваши представления предоставят действительно обновленные данные.
С другой стороны ...
Если вы хотите использовать что-то вроде скрипта, лучше написать пользовательскую команду Django (таким образом, вам не нужно иметь дело с инициализацией настроек django и другими проблемами) и выполнить ее, используя cron или celery как @ruddra заявляет в своем ответе.
Сказав это, вы должны увидеть это: https://docs.djangoproject.com/en/2.1/topics/db/multi-db/