django REST框架- Django-ninja
2022/4/1 6:21:23
本文主要是介绍django REST框架- Django-ninja,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Django 是我学习的最早的web框架,大概在2014年,当时选他原因也很简单就是网上资料比较丰富,自然是遇到问题更容易找答案,直到 2018年真正开始拿django做项目,才对他有了更全面的了解。他是一个入门有门槛,学会了做项目非常方便的Web框架。
《2020 Python 开发者调查结果》
https://www.jetbrains.com/zh-cn/lp/python-developers-survey-2020/
从上图中可以看出django仍然被很多开发者使用。极客时间去年也有出过《Django 快速开发实战》的课程。虽然,我网上看到挺多开发吐槽django,学习成本高,性能差。直到现在,当我要看开始一个正式项目的时候,仍然会考虑Django。
优点
通过脚手架创建项目/应用
:不用考虑项目架构怎么设计。自带Admin后台
:在没有前端的情况下,可以比较方便通过Admin对数据进行操作。自带常用模块
:一个命令就能生成 group、user、session ...表,一般个系统都需要user表吧!你还在考虑user表设计,我已经把登录/注册功能写完了。自带ORM
:对于建表和操作数据库可太方便了。自带单元测试模块
:虽然不是必用,但写单元测试很方便的,尤其是运行测试数据隔离,不依赖数据库去构造测试数据。
缺点
模板语言
:在前后端分离的架构下,不用Django做页面了,这个东西可以抛弃了。Form 组件
:以后端的方式渲染页面上的表单, 这个东西也可以抛弃了。只有get/post方法
:这就很不符合 RESTful 风格了。没有参数校验
:这就会导致开发接口效率不高,要写不少代码来判断是否为空,类型对不对。性能差
:反正各种性能对比中都是被吊打的那位。异步支持的不好
:如果你很在意异步,还是不要用django了。
以上算是我对django的浅薄的见解吧!现在的当红web框架,那当然是fastapi了,我之前的文章也有做介绍。django的大部分缺点,刚好是fastapi的优势,有没有二者相结合的产物?
django-ninja: https://django-ninja.rest-framework.com/
Django Ninja is a web framework for building APIs with Django and Python 3.6+ type hints.
django-ninja不像django-rest-framework学习成本那么高,有着和fastapi非常类似的用法。
django-ninja 体验
- 安装
> pip install django > pip install django-ninja
- 创建项目
> django-admin startproject apidemo
- 修改
urls.py
from django.contrib import admin from django.urls import path from ninja import NinjaAPI api = NinjaAPI() @api.get("/add") def add(request, a: int, b: int): return {"result": a + b} urlpatterns = [ path("admin/", admin.site.urls), path("api/", api.urls), ]
- 启动项目
> python manage.py runserver
- 自动带api文档
实现登录接口
当然,只是对比实现一个简单的接口,django-ninja 确实没有比fastapi简单。我们就做一个实际的功能,实现用户登录接口。
一般框架实现过程:
- 需要准备一个数据库。
- 创建一个库和一张用户表。
- 框架需要与数据库连接。
- 通过接口实现用户登录。
django-ninja 有django加持,会把这个过程变得极其简单。
- 执行数据库迁移
> python manage.py migrate
这一个命令相关表已经建好了,django默认使用sqlite3,不需要考虑数据库连接。
- 创建一个管理员账号
> python manage.py createsuperuser Username (leave blank to use 'user'): admin # 用户名 Email address: admin@mail.com # 邮箱 Password: # 密码 Password (again): # 确认密码 Superuser created successfully.
我们需要一个可以登录成功的账号。
- 实现登录接口
修改ursl.py
文件
from django.contrib import admin from django.urls import path from django.contrib import auth from ninja import NinjaAPI from ninja import Schema api = NinjaAPI() class LoginIn(Schema): # 登录参数类型校验 username: str password: str @api.post("/login") def user_login(request, payload: LoginIn): """ 用户登录 """ user = auth.authenticate(username=payload.username, password=payload.password) if user is not None: return {"success": True, "msg": "login success"} else: return {"success": False, "msg": "login fail"} urlpatterns = [ path('admin/', admin.site.urls), path("api/", api.urls), ]
注意:这是个真实可用的登录接口,有参数类型校验,有查询数据库校验。只有传入的是第2步创建的帐号才可以返回login success
。
总结
-
fastapi的示例虽然非常简单,真的拿来做项目仍需要补充额外一些东西,反观django似乎更简单。
-
本文应该适合有django使用经验的同学,如果你没有,这绝对不是一篇安利你学习django的文章。
-
djano-ninja几月前就注意到这个项目了,虽然,每周都在分享测试技术,但其实我的大部分工作是web前后端开发,所以,也会更关注这方面技术。
-
flask也有类似的REST框架哦~!apiflask。
这篇关于django REST框架- Django-ninja的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享