django REST框架- 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 体验

  • 安装
> 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 NinjaAPIapi = 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简单。我们就做一个实际的功能,实现用户登录接口。

一般框架实现过程:

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

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

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

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

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

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

  1. 实现登录接口

修改ursl.py文件

from django.contrib import admin
from django.urls import path
from django.contrib import auth
from ninja import NinjaAPI
from ninja import Schemaapi = NinjaAPI()class LoginIn(Schema):# 登录参数类型校验username: strpassword: 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

总结

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

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

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

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/162006.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【触想智能】工业显示器上市前的检测项目分享

工业显示器在上市前,需要做一项重要的工作,那就是工业显示器出厂前的产品可靠性检测。 工业显示器选择的测试项目相比商用端更为严格,常见的性能测试项目包括高温老化、防尘防水、电磁静电干扰、防摔防撞等,在工业级应用领域&…

使用自定义函数拟合辨识HPPC工况下的电池数据(适用于一阶RC、二阶RC等电池模型)

该程序可以离线辨识HPPC工况下的电池数据,只需要批量导入不同SOC所对应的脉冲电流电压数据,就可以瞬间获得SOC为[100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%]的所有电池参数,迅速得到参数辨识的结果并具有更高的精度,可以很大程度上降低参…

CentOS7查看和关闭防火墙

文章目录 CentOS7查看和关闭防火墙1.CentOS 7 默认使用的是firewall作为防火墙2.查看防火墙状态3.停止firewall4.禁止firewall开机启动5.开启防火墙开机启动6.开启端口7.移除端口8.重启防火墙9.查看某个端口是否开启10.查询开放列表总结:systemctl常用命令总结:firewalld-cmd配…

keil代码编辑区配色方案

第一步找到global.prop文件打开 ### 第二步复制下面的文本替换global.prop的内容,保存。 # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page936 caretline.visible1 highlight.matchingbraces1 prin…

如何用 GPT-4 全模式(All Tools)帮你高效学习和工作?

「十项全能」的 ChatGPT ,用起来感受如何? 之前,作为 ChatGPT Plus 用户,如果你集齐下面这五个模式,就会成为别人羡慕的对象。 但现在,人们更加期盼的,是下面这个提示的出现: 这个提…

c++ 信息学奥赛 2047:【例5.16】过滤空格

#include<cstdio> using namespace std; char st[200]; int main() { while (scanf("%s",&st)1)printf("%s ",st); //%s 后要有一个空格&#xff0c;不能省略return 0; } 解析&#xff1a;本题中使用一个技巧&#xff0c;那就是scanf函数…

使用 Visio 绘制立方体

一、自带的立方体 点击&#xff0c;将其拖拽至空白画布中 点击立方体&#xff0c;可以拖拽立方体的边线改变形状&#xff0c;如下&#xff1a; 可以看到&#xff0c;立方体三个面的颜色是不同的&#xff0c;最上方的面颜色浅一些。 如果想要三个面的颜色相同&#xff0c;先点击…

Python基础入门例程45-NP45 禁止重复注册(条件语句)

最近的博文&#xff1a; Python基础入门例程44-NP44 判断列表是否为空&#xff08;条件语句&#xff09;-CSDN博客 Python基础入门例程43-NP43 判断布尔值&#xff08;条件语句&#xff09;-CSDN博客 Python基础入门例程42-NP42 公式计算器&#xff08;运算符&#xff09;-C…

【0基础】全网最细致【PYTHON入门】教学

前言 可以说很多人学编程&#xff0c;不玩点爬虫确实少了很多意思&#xff0c;不管是业余、接私活还是职业爬虫&#xff0c;爬虫世界确实挺精彩的。 今天来给大家浅谈一下爬虫&#xff0c;目的是让准备学爬虫或者刚开始起步的小伙伴们&#xff0c;对爬虫有一个更深更全的认知…

NLP学习笔记:使用 Python 进行NLTK

一、说明 本文和接下来的几篇文章将介绍 Python NLTK 库。NLTK — 自然语言工具包 — NLTK 是一个强大的开源库&#xff0c;用于 NLP 的研究和开发。它内置了 50 多个文本语料库和词汇资源。它支持文本标记化、词性标记、词干提取、词形还原、命名实体提取、分割、分类、语义推…

计算机网络第4章-IPv4

IPv4数据报格式 IPv4数据报格式如下图所示 其中&#xff0c;有如下的关键字段需要特别注意&#xff1a; 版本&#xff08;号&#xff09;&#xff1a; 版本字段共4比特&#xff0c;规定了数据报的IP协议版本。通过查看版本号吗&#xff0c;路由器能确定如何解释IP数据报的剩…

【C++】类与对象 上

前言 感觉自己的基础还是不够好 最近打算在学新知识的同时 把之前的一些知识点再复习一下 引入 在C语言的学习中 我们学习过结构体 我们用结构体来描述复杂的对象 在结构体中只能定义变量 而在C的结构体中 我们可以在C中 定义函数 下面给出一个简单的例子 创建一个结构体 并…