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. Но стоит ли вам заняться программированием?