Django Doctor проверяет кодовые базы, чтобы найти и автоматически исправить Django Anti-Patterns. Мы проверили саму базу кодовой базы Django для анти-паттернов, которую Django документация предполагает, мы избегаем. Короче говоря, они сделали очень хорошо, но есть небольшая комната для улучшения.
Прочитайте аудит
1. Твердо кодированный статический URL-адрес в шаблоне
Лучшая практика Django предлагает избежать жестких статических активов и вместо этого использовать {% Статический ...
. Тем не менее, кодовая база Django жестко кодирует файл шрифта для Этот шаблон администратора Анкет Этот файл используется в Технический 404 Ответ Анкет Воздействие низкое: шрифт может не загружаться.
Если вы незнакомы: {% Статический ...
Возвращает путь, который браузер может использовать для запроса файла. В самых простых, это вернет путь, который исследует файл в вашей локальной файловой системе. Это хорошо для локального разработчика, но в Prod мы, скорее всего, будем использовать Сторонние библиотеки такие как отбелить или Django Storages Чтобы повысить производительность производственного веб -сервера.
Есть причины, кроме «потому что S3», почему мы используем {% Статический ...
:
Файл Reving
У Phitenoise есть бэкэнд хранения Staticfiles_storage
это работает Файл Reving для разрыва в кеша. В результате путь файла, проведенный в шаблоне, переименован: script.js
может быть переименован в Script-23ewd.js
. Staticfiles_storage
генерирует хэш из содержимого файла, переименование файла и генерирует манифестный файл, который выглядит так:
{‘scripts.js’: ‘scripts-23ewd.js’}
Это называется reving Анкет {% static 'script.js' ...
рендеры 'Script-23ewd.js'
в шаблоне, потому что 'script.js'
в манифесте смотрит вверх, что привело к 'Script-23ewd.js'
решен.
Это для разрыва кэша: когда содержимое файла изменяет имя файла тоже изменяется, поэтому в файле Revv может быть навсегда установлен заголовки кэша в CDN или браузер. При следующем развертывании, если содержимое файла изменяется, так же имен файла запрашивается, и, следовательно, наиболее актуальный файл извлекается браузером.
Так {% Статический ...
Обрабатывает абстрагирующие механизмы, нарушающие кеш, чтобы вместо этого мы могли сосредоточиться на шаблонах в шаблоне.
Как бы вы решили эти анти-паттерны? Пытаться Наша задача рефакторов Django Refactor .
Веб -сайты могут двигаться домой
Дано достаточно времени, веб -сайт может измениться, где он обслуживается:
- От субдомена к пути: abc.example.com на example.com/abc/и xyz.example.com на example.com/xyz/. Это произошло в проекте, в котором я был по причинам SEO.
- Объединение нескольких репозиториев в один. Это случилось с несколькими проектами, с которыми я был связан, чтобы сделать разработку более эффективным.
На этом этапе было бы неясно, какие файлы приложения обслуживаются/статичны/. Да, разработчик может найти заменить все/static/with/abc/static/and/abc/static/. Но если {% Статический ...
Использовался им не нужно.
Так {% Статический ...
Предотвращает нарушение JavaScript и CSS, потому что где веб -сайт обслуживается измененный.
Подавая от S3
Джанго предложил Не обслуживание статических файлов с веб -сервера в производстве . Один из способов сделать это – обслуживать файлы от S3. Если Staticfiles_storage
Служает от S3, тогда статический домен, вероятно, будет отличаться от домена WebServer, если какая -то конфигурация в CloudFront не обеспечит обратное.
Итак, в этом случае используя {% static 'script.js' ...
в конечном итоге рендерирует https://s3-example-url.com/script.js
вместо /static/script.js
Анкет
Читать дальше Анкет
2. Django Code Style: Модельный метод порядка
Увеличение стандартизации и предсказуемости вашего стиля кода помогает другим разработчикам прочитать ваш код и, в конечном счете, облегчают и дешевле работать по мере его роста.
Django Coding Style предлагает следующий порядок внутренних классов, методов и атрибутов:
- Полевые кортежи
- Поля базы данных
- Пользовательские атрибуты менеджера
- класс мета
def __str __ ()
def save ()
DEF DELETE
def get_absolute_url ()
- Любые пользовательские методы
Однако Джанго разорвал этот совет дважды. Как ни странно, оба в одном файле.:
Опять же, удар низкий, поэтому 👏 django Core Devs.
Читать далее
Ваш код следит за лучшей практикой Django?
Со временем для технического долга легко проникнуть в вашу кодовую базу. Я могу проверить это для вас в django.doctor , или может Просмотрите свой GitHub PRS :
Или попробуйте Django Refactor Challenges Анкет
Оригинал: “https://dev.to/djangodoctor/what-django-best-practices-is-django-breaking-4e2p”