Django Ninja Extra 使用教程

Django Ninja Extra 使用教程

django-ninja-extraDjango Ninja Extra - Class-Based Utility and more for Django Ninja(Fast Django REST framework)项目地址:https://gitcode.com/gh_mirrors/dj/django-ninja-extra

1. 项目介绍

Django Ninja Extra 是一个基于 Django 的扩展库,旨在通过类基础的方法和额外的功能来加速 RESTful API 的开发。它结合了 Django 的强大功能和 Ninja 的简洁性,提供了诸如权限控制、依赖注入、路由管理等高级功能。

主要特性

  • 类基础设计:使用类来定义 API,使代码结构更清晰。
  • 权限管理:在路由或控制器级别轻松定义权限。
  • 依赖注入:支持 Python Injector 或 django_injector 进行依赖注入。
  • 高性能:得益于 Pydantic 和异步支持,执行速度非常快。
  • 自动文档:基于 OpenAPI 和 JSON Schema 生成自动化的 API 文档。

2. 项目快速启动

安装

首先,使用 pip 安装 Django Ninja Extra:

pip install django-ninja-extra

配置

在 Django 项目的 settings.py 文件中,将 ninja_extra 添加到 INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'ninja_extra',
    ...
]

创建 API

在你的 Django 项目中,创建一个新的 api.py 文件,并定义你的 API:

from ninja_extra import NinjaExtraAPI, api_controller, http_get

api = NinjaExtraAPI()

# 函数基础定义
@api.get("/add", tags=['Math'])
def add(request, a: int, b: int):
    return {"result": a + b}

# 类基础定义
@api_controller('/', tags=['Math'], permissions=[])
class MathAPI:
    @http_get('/subtract')
    def subtract(self, a: int, b: int):
        """Subtracts a from b"""
        return {"result": a - b}

    @http_get('/divide')
    def divide(self, a: int, b: int):
        """Divides a by b"""
        return {"result": a / b}

    @http_get('/multiply')
    def multiply(self, a: int, b: int):
        """Multiplies a with b"""
        return {"result": a * b}

api.register_controllers(MathAPI)

配置 URL

urls.py 中添加 API 的路由:

from django.urls import path
from .api import api

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

启动项目

运行 Django 开发服务器:

python manage.py runserver

访问 http://127.0.0.1:8000/api/docs 查看自动生成的 API 文档。

3. 应用案例和最佳实践

权限控制

Django Ninja Extra 允许你在控制器或路由级别定义权限。例如,你可以为特定的 API 端点设置权限:

from ninja_extra import permissions

@api_controller('/', tags=['Protected'], permissions=[permissions.IsAuthenticated])
class ProtectedAPI:
    @http_get('/secret')
    def secret(self, request):
        return {"message": "This is a secret message"}

依赖注入

使用依赖注入可以简化代码并提高可测试性。Django Ninja Extra 支持 Python Injector 或 django_injector:

from injector import Injector, inject

injector = Injector()

class MyService:
    def get_data(self):
        return {"data": "some data"}

@api_controller('/', tags=['Injected'])
class InjectedAPI:
    @inject
    def __init__(self, service: MyService):
        self.service = service

    @http_get('/data')
    def get_data(self):
        return self.service.get_data()

4. 典型生态项目

Django Ninja JWT

Django Ninja JWT 是一个与 Django Ninja Extra 配合使用的 JWT 认证库,提供了简单易用的 JWT 认证功能。

Django Ninja Schema

Django Ninja Schema 是一个用于定义 API 输入输出的库,支持 Pydantic 模型,使得数据验证和序列化更加简单。

Django Ninja Throttling

Django Ninja Throttling 提供了 API 请求的限流功能,可以防止 API 被滥用。

通过这些生态项目,Django Ninja Extra 可以构建出功能强大且易于维护的 RESTful API 系统。

django-ninja-extraDjango Ninja Extra - Class-Based Utility and more for Django Ninja(Fast Django REST framework)项目地址:https://gitcode.com/gh_mirrors/dj/django-ninja-extra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌昱有Melanie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值