На старте разработки неплохо настроить MEDIA и STATIC отображения. Для этого немного изменяем конфиги проекта.
В файл urls.py в конец добавляем строки:
1 |
if settings.DEBUG:<br> urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)<br> urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) |
В файл settings.py
1 |
STATIC_URL = '/static/'<br>STATICFILES_DIRS = [<br> os.path.join(BASE_DIR, 'static'),<br>]<br><br>MEDIA_URL = '/media/'<br>MEDIA_ROOT = os.path.join(BASE_DIR, 'media') |
Еще один момент если есть желание вынести шаблоны за пределы отдельных приложений, а сделать каталог на весь проект, то тогда следующая конфигурация (она же может быть решением проблемы: “шаблон не найден”):
1 |
TEMPLATES_DIR = os.path.join(BASE_DIR, 'templates')<br><br>TEMPLATES = [<br> {<br> 'BACKEND': 'django.template.backends.django.DjangoTemplates',<br> 'DIRS': [TEMPLATES_DIR,],<br> 'APP_DIRS': True,<br> 'OPTIONS': {<br> 'context_processors': [<br> 'django.template.context_processors.debug',<br> 'django.template.context_processors.request',<br> 'django.template.context_processors.media',<br> 'django.contrib.auth.context_processors.auth',<br> 'django.contrib.messages.context_processors.messages',<br> ],<br> },<br> },<br>] |
Множество документов говорит о необходимости создание отдельного SECRET_KEY для продакшен версии. Удобно вынести настройки связанные с тестовой средой в отдельный файл. Для вынесения критичных параметров сайта из конфига можно использовать библиотеку django-environ
1 |
pip install django-environ |
Тогда в начале файла settings.py размещаем такие строки:
1 |
from environ import environ |
1 |
root = environ.Path(__file__)<br>env = environ.Env()<br>environ.Env.read_env() # reading .env file<br><br># False if not in os.environ<br>DEBUG = env.bool('DEBUG')<br>SECRET_KEY = env.str('SECRET_KEY') |
А содержимое файла .env:
1 |
SECRET_KEY=_$w9y*w7un25*-^453арпаkhy9gy_a(=_yogl&праy$mqt96<br>DEBUG=True |
Важна запись именно без лишних пробелов и кавычек
Еще один хороший момент сразу же создать файл .gitignore
В который поместить строки (для игнорирование гитом, файлов связанных со средой разработки и тех, что содержат конфиденциальную информацию, например пароли в БД):
.idea/
/venv/
/<Каталог проекта>/.env
__pycache__
*.pyc
После чего добавляем необходимые расширения например:
Дополнительные пакеты
Не плохой пакет это django-ckeditor (редактор текста), Pillow, num2words, django–mptt (упрощает разработку иерархических структур)
1 |
<span class="n">pip</span> <span class="n">install</span> <span class="n">django</span><span class="o">-</span><span class="n">mptt, django-ckeditor, Pillow, num2words</span> |
1 2 |
INSTALLED_APPS = [<br /> 'django.contrib.admin',<br /> 'django.contrib.auth',<br /> 'django.contrib.contenttypes',<br /> 'django.contrib.sessions',<br /> 'django.contrib.messages',<br /> 'django.contrib.staticfiles',<br /> 'ckeditor',<br /> 'ckeditor_uploader', 'mptt',<br />] |
Работа из внешних скриптов
Запуск внешнего скрипта с доступом к ORM
1 2 3 4 |
<span class="hljs-keyword">import</span> os os.environ.setdefault(<span class="hljs-string">"DJANGO_SETTINGS_MODULE"</span>, <span class="hljs-string">"my_project.settings"</span>) <span class="hljs-keyword">import</span> django django.setup() |
Еще один вариант создать в каталоге проекта файл __init__.py (то есть превратить его в пакет), а в него добавить строки:
1 2 3 4 5 6 7 8 |
<span class="hljs-keyword">import</span> os <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setup</span>():</span> module = os.path.split(os.path.dirname(__file__))[-<span class="hljs-number">1</span>] os.environ.setdefault(<span class="hljs-string">"DJANGO_SETTINGS_MODULE"</span>, <span class="hljs-string">"{}.settings"</span>.<span class="hljs-built_in">format</span>(module)) <span class="hljs-keyword">import</span> django django.setup() |
Тогда для использования ORM необходимо:
1 2 |
<span class="hljs-keyword">from</span> <app> <span class="hljs-keyword">import</span> setup setup() |
Библиотека полезных расширений
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
Авторизация\Регистрация https://github.com/jazzband/django-oauth-toolkit https://github.com/pennersr/django-allauth https://github.com/sunscrapers/djoser https://github.com/django-guardian/django-guardian https://github.com/flavors/django-graphql-jwt <strong>Защита входа (от подбора паролей)</strong> https://github.com/jazzband/django-axes https://github.com/jazzband/django-defender <strong>Debug (чт загружалось, сколько времени ушло)</strong> https://github.com/jazzband/django-debug-toolbar https://github.com/jazzband/django-silk Модели https://github.com/jazzband/django-model-utils https://github.com/jazzband/django-authority https://github.com/jazzband/django-sortedm2m <em><strong>https://github.com/django-mptt/django-mptt/</strong></em> Утилиты https://github.com/jazzband/django-constance https://github.com/jazzband/django-analytical https://github.com/jazzband/django-redis https://github.com/jazzband/django-robots/ Формы https://github.com/jazzband/django-floppyforms https://github.com/jazzband/django-smart-selects https://github.com/jazzband/django-widget-tweaks https://github.com/jazzband/django-formtools <em><strong>https://github.com/django-crispy-forms/django-crispy-forms</strong></em> Views https://github.com/jazzband/django-sorter https://github.com/brack3t/django-braces https://github.com/carltongibson/django-filter https://github.com/encode/django-rest-framework https://github.com/django-cms/django-cms https://github.com/feincms/feincms <a href="https://github.com/jieter/django-tables2">https://github.com/jieter/django-tables2</a> Админка https://github.com/sehmaschine/django-grappelli https://github.com/darklow/django-suit https://github.com/sehmaschine/django-filebrowser https://github.com/geex-arts/django-jet Изображения https://github.com/jazzband/sorl-thumbnail https://github.com/richardbarran/django-photologue https://github.com/matthewwithanm/django-imagekit https://github.com/fmalina/upload Видео https://github.com/jazzband/django-embed-video Редакторы https://github.com/aljosa/django-tinymce <em><strong>https://github.com/django-ckeditor/django-ckeditor</strong></em> Стили https://github.com/jazzband/django-pipeline https://github.com/django-compressor/django-compressor <em><strong>https://github.com/zostera/django-bootstrap4</strong></em> Тесты https://github.com/jazzband/django-nose Иное https://github.com/jazzband/django-push-notifications https://github.com/kmike/pymorphy2 - склонение слов https://github.com/getsentry/sentry Гео https://github.com/jazzband/geojson https://github.com/jazzband/django-cities-light E-commerce https://github.com/mirumee/saleor https://github.com/django-oscar/django-oscar https://github.com/awesto/django-shop Virtualenv https://github.com/pypa/pipenv https://github.com/python-poetry/poetry |