предисловие
DjangoЭто веб-фреймворк, разработанный на языке Python, который популярен благодаря своим мощным функциям и быстрой разработке. Я получил 47K+ звезд на Github, и его сообщество и окружающие библиотеки также чрезвычайно активны. Позвольте мне поделиться некоторыми библиотеками, которые я часто использую в своей работе.Если вы используете их правильно, вы получите вдвое больший результат с половиной усилий, значительно повысить эффективность разработки, и работать по 3 часа в день., остальное время можно хорошо грести (учиться)!
В дополнение к листингу я также продемонстрирую фактическое использование, чтобы каждый мог фильтровать в соответствии со своими потребностями. Следующий контент длинный, рекомендуется собрать его перед прочтением.
Все библиотеки в этой статье были протестированы на Django 2.1 и выше, а некоторые библиотеки можно использовать на Django 1.11 и выше.
текст
Django Rest Framework
Django Rest Framework — моя самая рекомендуемая и обязательная библиотека для разработки сервисов Django. Может быть, его популярность настолько велика, что мне не нужно его представлять, я кратко представлю его использование (подробности не достаточно, чтобы написать 😂)
Django Rest Framework предоставляет Django набор стандартных API Restful и предоставляет ряд вспомогательных функций, таких как аутентификация, аутентификация, ограничение скорости и т. д., а также предоставляет тестовый интерфейс пользовательского интерфейса.
pip install djangorestframework
В сочетании с моделью Django для разработки Restful API требуется всего 3 шага.
1.1 Создайте класс сериализатора Serializer of Model
Сериализатор — это класс сериализации, используемый для преобразования между объектами модели и структурами API Json. Простейшая реализация показана ниже.
Базовое поле модели имеет соответствующее автоматическое сопоставление поля сериализатора, дополнительная запись не требуется. В то же время он также предоставляет некоторые специальные поля, такие как идентификатор внешнего ключа, который преобразуется в другие поля, и даже весь связанный объект может быть введен во время сериализации.
1.2 Создать представление
Представления делятся на три категории: представления методов, представления классов и наборы представлений на основе модели.
а) Представление метода
Представление метода — это метод, похожий на представление метода Django, просто добавляющий декоратор.
Параметры метода api_view могут ограничивать метод Http, по умолчанию — GET, и, наконец, возвращать объект Response.
б) представление класса
Представление класса заключается в сопоставлении методов Http с методами класса.
c) Представление ViewSet
Представление ViewSet проще и может напрямую связывать модель и представление.
1.3 Маршруты привязки
Наконец, можно получить доступ к маршруту привязки.
Либо используйте привязки пути Django, либо используйте объект маршрутизатора.
Есть и другие мощные функции, такие как аутентификация, аутентификация и ограничение скорости.Содержимого слишком много, поэтому я не буду их здесь раскрывать.
django-filter
Эта библиотека предоставляет функции фильтрации для API Django, а при использовании с Rest Framework мощный API фильтрации для моделей может быть предоставлен в одной строке кода.
pip install django-filter
Затем вы можете фильтровать по параметрам URL.
http://example.com/api/users/1/?name=huoyan&age=20
Django CORS Headers
Для архитектуры, разделенной интерфейсом и сервером, во внутренний API необходимо добавить заголовки CORS, чтобы обеспечить междоменный доступ. Вы можете добавить его в каждую соответствующую шапку самостоятельно.Конечно, есть готовые колеса, почему бы не сделать это?
pip install django-cors-headers
Он очень прост в использовании, просто добавьтеinstalled_appиmiddlewaresВот и все.
В то же время он предоставляет функцию пользовательской настройки, которую можно настроить непосредственно в настройках Django.
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)
Django Debug Toolbar
Панель инструментов отладки Django предоставляет мощную панель отладки для тестирования. Вы можете напрямую просматривать в браузере соответствующую конфигурацию, заголовок HTTP, SQL, журналы и т. д. Это очень практично и должно использоваться для разработки и отладки.
pip install django-debug-toolbar
Он также очень прост в использовании.
необходимо настроитьinstalled_app, пути к статическим ресурсам иMiddlewares.
Наконец, добавьте маршрут и включите его, когда Debug имеет значение True.
Затем мы добавим панель отладки сбоку при доступе к API или просмотру.
Django Environ
Для онлайн-сервисов необходимы разные конфигурации в нескольких средах, для чего требуется среда Django Environment. Django Environ упрощает включение переменных среды в конфигурацию настроек Django.
pip install django-environ
Обычно мы пишем это в settings.py
Затем получите значение параметра, который необходимо настроить динамически.
Мы можем загрузить конфигурацию через переменные среды или файлы переменных среды (единственный способ напрямую прочитать переменную среды ENV_FILE).
.env файл, подобный этому (включение/выключение автоматически преобразуется в логическое значение)
DEBUG=on
CORS=on
LOG_LEVEL=INFO
LOG_FILE=app.log
В то же время конфигурация базы данных и кеша может быть напрямую преобразована в переменную среды.
settings.pyнастроено так
Затем в переменной среды или в файле .env напишите так
DATABASE_URL=psql://postgres:123456@127.0.0.1:5432/postgres
CACHE_URL=rediscache://127.0.0.1:6379/1
Это лучше, чем использовать
os.environ.getЧто хорошего в загрузке переменных окружения?
- Обеспечивает загрузку файла переменных окружения, если это локальная отладка, то конечно удобнее всего записывать все переменные в файл.
- Предоставляет единое место для записи начального значения переменных среды (место инициализации) и может указывать тип данных переменной.
- Поддержка преобразования типов данных, поскольку все значения переменных среды являются строками, преобразование типов переменных помогает нам удобно решать проблемы преобразования.
- Поддерживаются многострочные переменные среды.
- Базы данных, Redis и т. д. поддерживают значение переменной среды URL, нет необходимости в куче переменных среды.
- Поддерживаются ссылки на переменные среды.
Django-Redis
Использование кэширования в Django очень распространено, а простым и удобным в использовании является Redis. Библиотека Django redis может напрямую настроить Redis в качестве кэша Django или серверной части сеанса, что очень просто.
pip install django-redis
Конфигурация в settings.py
Комбинировать вышеупомянутый django-environ еще проще, я обычно использую его в комбинации, и мне нужна только одна строка кода конфигурации и одна переменная среды.
CACHES = {
'default': env.cache(),
}
переменная среды
CACHE_URL=rediscache://127.0.0.1:6379/1
Использовать в качестве серверной части сеанса
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
django-rest-framework-simplejwt
Метод аутентификации по умолчанию в Django Rest Framework основан на Django (например, Session или Token).Если вам нужен метод JWT, также доступны готовые колеса.
pip install djangorestframework-simplejwt
Изменить конфигурацию аутентификации Rest Framework
Затем добавьте API получения и обновления токена.
Используйте следующий запрос, чтобы получить токен
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin"}' \
http://localhost:8000/api/token/
{
"access":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiY29sZF9zdHVmZiI6IuKYgyIsImV4cCI6MTIzNDU2LCJqdGkiOiJmZDJmOWQ1ZTFhN2M0MmU4OTQ5MzVlMzYyYmNhOGJjYSJ9.NHlztMGER7UADHZJlxNG0WSi22a2KaYSfd1S-AuT7lU",
"refresh":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImNvbGRfc3R1ZmYiOiLimIMiLCJleHAiOjIzNDU2NywianRpIjoiZGUxMmY0ZTY3MDY4NDI3ODg5ZjE1YWMyNzcwZGEwNTEifQ.aEoAYkSJjoWH1boshQAaTkf8G3yn0kapko6HFRt7Rh4"
}
Обновить токен после истечения срока действия временного токена
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"refresh":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImNvbGRfc3R1ZmYiOiLimIMiLCJleHAiOjIzNDU2NywianRpIjoiZGUxMmY0ZTY3MDY4NDI3ODg5ZjE1YWMyNzcwZGEwNTEifQ.aEoAYkSJjoWH1boshQAaTkf8G3yn0kapko6HFRt7Rh4"}' \
http://localhost:8000/api/token/refresh/
{"access":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiY29sZF9zdHVmZiI6IuKYgyIsImV4cCI6MTIzNTY3LCJqdGkiOiJjNzE4ZTVkNjgzZWQ0NTQyYTU0NWJkM2VmMGI0ZGQ0ZSJ9.ekxRxgb9OKmHkfy-zs1Ro_xs1eMLXiR17dIDBVxeT-w"}
В проекте, где фронт и бэкенд разделены, мы используем перехватчик axios для автоматического обновления фронтенда, бизнесу не нужно беспокоиться, а код очень простой.
Grappelli
Grappelli — это скин для административного интерфейса Django, обеспечивающий более удобный интерфейс.
pip install django-grappelli
Он также очень прост в использовании.
настроить егоinstalled_app
INSTALLED_APPS = (
'grappelli',
'django.contrib.admin',
)
добавить маршрут
urlpatterns = [
path('grappelli/', include('grappelli.urls')), # grappelli URLS
path('admin/', admin.site.urls), # admin site
]
Добавить обработчик контекста запроса
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',
...
],
},
},
]
Затем просто повторно обработайте статические файлы.
python manage.py collectstatic
django-celery-results/django-celery-beat
Если вашему сервису Django нужно использовать Celery для асинхронных задач, эти две библиотеки неплохие, поэтому они написаны вместе.
django-celery-resultsОн использует ORM Django в качестве результата хранения асинхронных задач Celery.Когда результаты асинхронных задач необходимо хранить и анализировать в течение длительного времени, его можно использовать для хранения в базе данных, настроенной Django.
pip install django-celery-results
Простая конфигурация
Выполнить создание базы данных
python manage.py migrate django_celery_results
иdjango-celery-beatЭто передача конфигурации временных задач Celery в базу данных Django для хранения.Это очень полезно, если фон управления нашим бизнесом требует настройки временных задач.
pip install django-celery-beat
Простая конфигурация
Выполнить создание базы данных
python manage.py migrate
Наконец, укажите планировщик при запуске Celery Beat
celery -A proj beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
постскриптум
Я так много написал сегодня. Это избранные библиотеки, накопленные разработкой Django за последние несколько лет. Если у вас есть какие-либо вопросы, пожалуйста, прокомментируйте и обсудите со мной. Если количество пользователей отдельных библиотек велико, вы можете написать подробное руководство по использованию и избеганию ям. Если вы найдете это полезным, не стесняйтесь, как это!
Я Хуояньцзюнь, пусть мое письмо рассеет одиночество души.