当前位置:   article > 正文

django REST框架- Django-ninja_django ninja

django ninja

Django 是我学习的最早的web框架,大概在2014年,当时选他原因也很简单就是网上资料比较丰富,自然是遇到问题更容易找答案,直到 2018年真正开始拿django做项目,才对他有了更全面的了解。他是一个入门有门槛,学会了做项目非常方便的Web框架。

《2020 Python 开发者调查结果》
2020 Python 开发者调查结果 | JetBrains: Developer Tools for Professionals and Teams

从上图中可以看出django仍然被很多开发者使用。极客时间去年也有出过《Django 快速开发实战》的课程。虽然,我网上看到挺多开发吐槽django,学习成本高,性能差。直到现在,当我要看开始一个正式项目的时候,仍然会考虑Django。

优点

  1. 通过脚手架创建项目/应用:不用考虑项目架构怎么设计。
  2. 自带Admin后台:在没有前端的情况下,可以比较方便通过Admin对数据进行操作。
  3. 自带常用模块:一个命令就能生成 group、user、session ...表,一般个系统都需要user表吧!你还在考虑user表设计,我已经把登录/注册功能写完了。
  4. 自带ORM:对于建表和操作数据库可太方便了。
  5. 自带单元测试模块:虽然不是必用,但写单元测试很方便的,尤其是运行测试数据隔离,不依赖数据库去构造测试数据。

缺点

  1. 模板语言:在前后端分离的架构下,不用Django做页面了,这个东西可以抛弃了。
  2. Form 组件:以后端的方式渲染页面上的表单, 这个东西也可以抛弃了。
  3. 只有get/post方法:这就很不符合 RESTful 风格了。
  4. 没有参数校验:这就会导致开发接口效率不高,要写不少代码来判断是否为空,类型对不对。
  5. 性能差:反正各种性能对比中都是被吊打的那位。
  6. 异步支持的不好:如果你很在意异步,还是不要用django了。

以上算是我对django的浅薄的见解吧!现在的当红web框架,那当然是fastapi了,我之前的文章也有做介绍。django的大部分缺点,刚好是fastapi的优势,有没有二者相结合的产物?

django-ninja: Django Ninja

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 体验

  • 安装
  1. > pip install django
  2. > pip install django-ninja
  • 创建项目
> django-admin startproject apidemo
  • 修改urls.py
  1. from django.contrib import admin
  2. from django.urls import path
  3. from ninja import NinjaAPI
  4. api = NinjaAPI()
  5. @api.get("/add")
  6. def add(request, a: int, b: int):
  7. return {"result": a + b}
  8. urlpatterns = [
  9. path("admin/", admin.site.urls),
  10. path("api/", api.urls),
  11. ]
  • 启动项目
> python manage.py runserver
  • 自动带api文档

实现登录接口

当然,只是对比实现一个简单的接口,django-ninja 确实没有比fastapi简单。我们就做一个实际的功能,实现用户登录接口。

一般框架实现过程:

  1. 需要准备一个数据库。
  2. 创建一个库和一张用户表。
  3. 框架需要与数据库连接。
  4. 通过接口实现用户登录。

django-ninja 有django加持,会把这个过程变得极其简单。

  1. 执行数据库迁移
> python manage.py migrate

这一个命令相关表已经建好了,django默认使用sqlite3,不需要考虑数据库连接。

  1. 创建一个管理员账号
  1. > python manage.py createsuperuser
  2. Username (leave blank to use 'user'): admin # 用户名
  3. Email address: admin@mail.com # 邮箱
  4. Password: # 密码
  5. Password (again): # 确认密码
  6. Superuser created successfully.

我们需要一个可以登录成功的账号。

  1. 实现登录接口

修改ursl.py文件

  1. from django.contrib import admin
  2. from django.urls import path
  3. from django.contrib import auth
  4. from ninja import NinjaAPI
  5. from ninja import Schema
  6. api = NinjaAPI()
  7. class LoginIn(Schema):
  8. # 登录参数类型校验
  9. username: str
  10. password: str
  11. @api.post("/login")
  12. def user_login(request, payload: LoginIn):
  13. """
  14. 用户登录
  15. """
  16. user = auth.authenticate(username=payload.username, password=payload.password)
  17. if user is not None:
  18. return {"success": True, "msg": "login success"}
  19. else:
  20. return {"success": False, "msg": "login fail"}
  21. urlpatterns = [
  22. path('admin/', admin.site.urls),
  23. path("api/", api.urls),
  24. ]

注意:这是个真实可用的登录接口,有参数类型校验,有查询数据库校验。只有传入的是第2步创建的帐号才可以返回login success

总结

  1. fastapi的示例虽然非常简单,真的拿来做项目仍需要补充额外一些东西,反观django似乎更简单。

  2. 本文应该适合有django使用经验的同学,如果你没有,这绝对不是一篇安利你学习django的文章。

  3. djano-ninja几月前就注意到这个项目了,虽然,每周都在分享测试技术,但其实我的大部分工作是web前后端开发,所以,也会更关注这方面技术。

  4. flask也有类似的REST框架哦~!apiflask。

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

最后: 我给大家整理了一份完整的全套软件测试学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

全套资料获取方式:评论区给我留言。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/389222
推荐阅读
相关标签
  

闽ICP备14008679号