Django ninja — это оболочка, созданная на основе fastAPI и во многом вдохновленная FastAPI. Он объединяет в себе хорошие вещи из обоих миров: производительность выше, чем у Django, и возможности django (например, администратор).

Django Ninja: простое введение

Созданный Виталиком, Django Ninja представляет собой более производительный и минималистичный подход к разработке API по сравнению с традиционным Django.

С Django Ninja вы можете быстро создавать API без сложностей традиционных приложений Django. В этой статье мы предоставим краткий обзор основных функций Django Ninja и покажем, как настроить API. Являетесь ли вы опытным разработчиком Django, ищущим более простой способ создания API, или новичком в мире веб-разработки, Django Ninja может стать ценным дополнением к вашему набору инструментов.

Вы усвоите это лучше, если уже знаете django, но да, я все равно объясню большинство вещей (это означает, что вы можете начать, даже если вы новичок).

давайте сначала установим Джанго

Команда:pip install django

Затем откройте терминал в нужной папке и создайте проект django, используя команду в терминале:

dango-admin startproject <project name>

Структура Джанго

В Django проект Django и приложения Django — это фундаментальные концепции, которые помогают организовать и структурировать ваше веб-приложение.

Проект Django:

  • Проект Django — это контейнер верхнего уровня для всего вашего веб-приложения. Он представляет собой весь веб-сайт или веб-сервис.
  • Проект состоит из инструментов настройки, конфигурации и управления вашим веб-приложением.
  • Обычно он включает настройки подключений к базе данных, маршрутизации URL-адресов, промежуточного программного обеспечения и т. д.
  • Вы создаете проект при первом запуске приложения Django, используя такие команды, как django-admin startproject projectname.

Приложения Django:

  • Приложения Django — это небольшие повторно используемые компоненты проекта Django.
  • Приложение — это автономный модуль, выполняющий определенные функции в рамках вашего проекта.
  • Приложения могут включать модели, представления, шаблоны и другой код, связанный с определенной функцией или компонентом вашего приложения.
  • Проекты Django часто состоят из нескольких приложений, которые работают вместе для создания полноценного веб-приложения.
  • Вы создаете приложение внутри проекта, используя такие команды, как python manage.py startapp appname.

Вот простая аналогия, которая поможет понять взаимосвязь между проектами и приложениями:

  • Думайте о проекте Django как о доме, который вы строите. В нем есть все — комнаты, кухня, санузлы и так далее.
  • Думайте о приложениях Django как об отдельных комнатах в доме. Каждая комната (приложение) имеет определенное назначение и содержит компоненты, связанные с этим назначением, например мебель и бытовую технику.

Проекты помогают вам управлять глобальными настройками и структурой вашего веб-приложения, а приложения обеспечивают модульность и организацию, позволяя разбить ваше приложение на управляемые и повторно используемые компоненты. Такое разделение задач упрощает разработку, поддержку и масштабирование приложений Django.

Одним из примеров многократно используемого приложения Django может быть модуль аутентификации (продвинутый, конечно, здесь не описан).

Создание среды и установка зависимостей

Затем создайте и активируйте виртуальную среду Python с помощью venv.

# env is the virtual environment name
#command to create virtual environment
python3 -m venv env
# command to activate virtual environment
source env/bin/activate

Затем установите зависимости, включая django и django-ninja.

pip install django
pip install django-ninja

Создайте проект Django и приложение Django.

Давайте сначала создадим проект django и приложение, используя команду в терминале:

django-admin startproject <projectname>
manage.py startapp <appname>

Совет. Вам не нужно переходить в созданную папку проекта, чтобы использовать startapp для создания нового приложения в проекте. Вместо этого запустите обе команды в каталоге smae.

Время кодировать

В папке вашего проекта будет файл settings.py.

В файле settings.py вы найдете INSTALLED_APPS = […]

добавьте название приложения маленькими буквами в качестве последнего элемента в списке, как показано ниже.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app_name',
]

теперь, когда django распознает новое приложение, которое мы создали.

Давайте перейдем в папку приложения и создадим новый файл api.py.

api.py будет местом, где мы создадим конечные точки API:

добавьте следующий код в api.py:

from ninja import NinjaAPI

api = NinjaAPI()

@api.get("/hello")
def hello(request):
    return "Hello world"

здесь так же, как и в fastAPI, мы импортируем ниндзя из NinjaAPI и

создание конечной точки /hello, которая возвращает Hello world в качестве вывода

Теперь подключим api.py к файлу urls.py (файл urls.py находится в папке проекта).

Перейдите в urls.py и измените строки следующим образом:

from django.contrib import admin
from django.urls import path
from tester.api import api

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', api.urls)
]

Линия :

из API импорта tester.api

tester — это имя моего приложения, мы импортируем api.py из приложения в urls.py

путь('api/', api.urls)

подключение конечных точек в api.urls к urls.py проекта, чтобы предоставить их в качестве URL-адресов.

Далее запустим сервер и проверим, работает ли он:

в терминале выполните команду:

python manage.py runserver

если сервер запускается успешно

вы увидите что-то вроде

Запуск сервера разработки по адресу http://127.0.0.1:8000/

перейдите по этому URL-адресу с частью /hello, например: http://127.0.0.1:8000/привет

Если все пойдет хорошо, вы сможете увидеть:

вы можете остановить сервер, нажав Ctrl + C на терминале сервера.

Возможно, вы заметили сообщение 18 миграций неприменено при запуске сервера ранее. Миграции по сути означают запись схемы таблицы в базу данных. (проще говоря, это означает запись имен столбцов для хранения элементов в базе данных, я знаю, что мы не создали ни одного столбца базы данных, мы видим сообщение о создании автоматических столбцов django)

Базой данных django по умолчанию является sqlite3, ее можно изменить на postgres или любую другую реляционную базу данных (изменяя конфигурацию в файле settings.py проекта), но для простоты продолжим с sqlite3.

Теперь давайте применим миграции к базе данных с помощью команды:

python manage.py migrate

Далее давайте создадим новую модель базы данных в файле models.py в папке приложения следующим образом:

from django.db import models

# Create your models here.

class Book(models.Model):
    title = models.CharField(max_length=250, default="Untitled")
    author = models.CharField(max_length=250, default="Unknown Author")
    price = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

Теперь, когда мы добавили новую модель для создания таблицы в базе данных, давайте заставим django создать файл миграции с помощью команды:

python manage.py makemigrations

и примените миграцию к базе данных, используя:

python manage.py migrate

Вы увидите, как применяется миграция книг.

Теперь, чтобы создать несколько книг в соответствии с моделью БД, давайте воспользуемся удобным встроенным администратором Django. Но перед этим вам нужно будет создать suepruser на терминале, чтобы войти в систему администратора Django с помощью команды:

python manage.py createsuperuser

И как только вы последуете инструкциям, которые следуют за командой, и создадите нового суперпользователя с паролем, давайте перезапустим сервер с помощью команды python Manage.py runserver и перейдем по URL-адресу:

вы можете получить доступ к администратору Django по адресу: http://127.0.0.1:8000/admin

а затем войдите в систему.

Но вы по-прежнему не увидите объект «Книги» для добавления новых книг, вы увидите только группы и пользователей.

Нам нужно зарегистрировать модель Book в файле admin.py в папке приложения и изменить там код следующим образом:

from django.contrib import admin
#tester is my app name, use yours
from tester.models import Book
# Register your models here.

admin.site.register(Book)

теперь сохраните admin.py и обновите страницу администрирования django в браузере, теперь вы увидите книги.

Совет. При создании нового объекта модели, такого как «Книга», в файле models.py имя объекта должно начинаться с заглавной буквы, а слово должно быть в единственном числе без завершающей буквы «s», поскольку администратор автоматически добавляет букву «s», что может привести к образованию «bookss». если мы уже используем Книги в качестве названия модели.

создайте несколько книг в администраторе, используя графический интерфейс.

Затем добавьте новую конечную точку в api.py (чуть ниже блока кода конечной точки /hello), чтобы вывести список книг:

@api.get("/list_books")
def list_books(request):
    books = Book.objects.all()
    
    # Serialize each book into a dictionary and collect them in a list
    serialized_books = [
        {
            'title': book.title,
            'author': book.author,
            'price': float(book.price)  # Convert Decimal to float if needed
        }
        for book in books
    ]
    
    print("---------", serialized_books)

    return serialized_books

объяснение:

Определение декоратора и конечной точки:

  • @api.get("/list_books") — это декоратор, который определяет конечную точку GET по URL-адресу «/list_books» в вашем API Django Ninja. Когда к этому URL-адресу будет отправлен запрос GET, будет выполнена соответствующая функция (list_books).

Получение объектов книги:

  • books = Book.objects.all() извлекает все записи (объекты) из модели Book в базе данных вашего проекта Django. Это делается с помощью объектно-реляционного сопоставления (ORM) Django для взаимодействия с базой данных.

Сериализация:

  • Затем код сериализует каждый объект книги в словарь и собирает эти словари в список (serialized_books).
  • Для каждой книги в наборе запросов books создается словарь с тремя парами ключ-значение:
  • 'title': Название книги.
  • 'author': Автор книги.
  • 'price': цена книги, преобразованная в число с плавающей запятой (float). Это делается с помощью float(book.price).

Журналирование:

  • print("---------", serialized_books) — это оператор регистрации, который выводит сериализованные данные книги на консоль. Это помогает разработчикам видеть обрабатываемые данные, но обычно не используется в рабочем коде.

Ответ:

  • Наконец, список serialized_books, который теперь содержит словари, представляющие данные каждой книги, возвращается в качестве ответа от конечной точки API.

теперь сохраните api.py и перейдите к конечной точке:

http://localhost:8000/api/docs

он покажет все конечные точки API, которые мы создаем для опробования.

попробуйте конечную точку list_books, и вы увидите книги, которые вы создали, в администраторе.

На этом я заканчиваю первую часть урока.

Мы настроили django ninja, добавили в него администратора django, функцию документации fastapi, создали и протестировали конечную точку API.

Спасибо, что дочитали до сих пор, я Сангит Джозеф, независимый Fullstack-разработчик. Следуйте за мной, чтобы увидеть часть 2 и другие статьи, связанные с Python и AI.
Свяжитесь со мной по вопросам проектов и работ!

Вывод: Django ninja не так популярен и не пользуется такой поддержкой сообщества, как в случае с FastAPI или традиционным Django. Но стоит ли вам заняться программированием?