django

·

Один из web-фреймворков на python. Отличается тем, что внутри есть всё для типичного сайта: авторизация, админка, работа с путями и шаблонами. Дополнительно можно обвесить [[drf]] или [[celery]].

Основная документация лежит на сайте docs djangoproject.

ORM

Типичные CRUD операции можно выполнять с помощью встроенного ORMa, но переход на сырой SQL потом требует много вложений. Начиная где-то с версии 2.х, авторы решили переносить все возможность SQL в ORM: https://docs.djangoproject.com/en/4.1/ref/models/expressions/.

Из наиболее используемого, теперь можно фильтровать prefetch на уровне запроса, а не цикла:

from django.db.models import Prefetch
vegetarian_pizzas = Pizza.objects.filter(vegetarian=True)
Restaurant.objects.prefetch_related(
        Prefetch('pizzas', to_attr='menu'),
        Prefetch('pizzas', queryset=vegetarian_pizzas, to_attr='vegetarian_menu'))

Админка

Добавить новый url в админку

from django.contrib import admin
from django.template.response import TemplateResponse
from django.urls import path

class MyModelAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path('my_view/', self.admin_site.admin_view(self.my_view))
        ]
        return my_urls + urls

    def my_view(self, request):
        # ...
        context = dict(
           # Include common variables for rendering the admin template.
           self.admin_site.each_context(request),
           # Anything else you want in the context...
           key=value,
        )
        return TemplateResponse(request, "sometemplate.html", context)

Переводы

Переводы в django сделаны с помощью библиотеки gnu gettext. С помощью команд makemessages собираются все переводы в файл locale/{locale}/LC_MESSAGES/django.po. Компания compilemessages генерируют из .po файлы .mo.

Для редактирования переводов в случае монолита удобно использоваться django-rosetta. В случае компании и нескольких проектов себя зарекомендовал weblate. Основная засада в том, как переводить сущности в базе. Есть modeltranslations, но масштабируется на десяток языков так себе.

[!WARNING] При переезде дефолтного языка settings.LANGUAGE_CODE необходимо убедиться, что для старого языка есть файл переводов.

Обратные ссылки