django REST框架- Django-ninja

news2024/11/26 15:47:59

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

一般框架实现过程:

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

总结

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

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教程示例:嵌入式软件移植 printf

在嵌入式中printf 这种功能强大的函数可谓是c语言库函数的中的一股清流!也就是太好用了吧!今天分享的例程有 stm32f4ZG 和 cc2530f256,这个两款芯片的移植例程和移植教程!相信你看完后也可以移植到别的芯片去! 使用的…

YouTubeDNN

这个youTubeDNN主要是工程导向,对于推荐方向的业界人士真的是必须读的一篇文章。它从召回到排序整个流程都做了描述,真正是在工业界应用的经典介绍。 作者首先说了在工业上YouTube视频推荐系统主要面临的三大挑战: 1.Scale(规模)&#xff1…

微软ChatGPT技术的底层支撑——GPU

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来看一看微软ChatGPT技术的底层支撑——GPU。 想要了解GPU,你必须要清楚CPU、GPU、TPU三者的关系。 微软的chatgpt是基于复杂的人工神经网络和强化学习的技术,这是如何运算的…

数据建模学习2--作业-利用matlab解决实际问题

文章目录 Malthus模型问题用最小儿二乘法估计阻滞增长模型自来水运输问题利用 Dijkstra 算法计算下图中起点 D 至各顶点得最短距离,需要给出 仅供参考 Malthus模型问题 1790-1980年间美国每隔10年的人口数量记录如下表所示。 表1 1790-1980年间美国每隔10年的人口…

基于ENVI和哨兵2数据提取云南玉溪和安宁山火受灾面积

引言 2023年4月11日15时27分,云南省玉溪市江川区九溪镇发生森林火情。当地森林草原防灭火指挥部立即启动应急预案,组织力量扑救。省、市、区各级共投入森林消防、消防救援、公安民警、武警官兵、专业扑火队、民兵、干部群众共计4000余人开展扑救工作,妥善转移安置部分可能受…

Blender 十大重点功能带你一次了解!

一、 Cycles 渲染速度提升二到八倍 在今年四月的Cycles X公告中,大家得知了在Blender 3.0 中将会有Cycles X 提供一种全新的渲染风貌,许多人开始纷纷测试新功能。如今随着3.0的上市,我们可以看到与2.93 版本中使用的Cycles比较起来&#xff…

Android kotlin 实现仿蜜源ViewPager和指示器对应上面TabLayout功能

文章目录 一、实现效果二、引入依赖三、源码实现1、ViewPager实体类2、指示器样式(自定义类)3、主视图实现一、实现效果 二、引入依赖 在app的build.gradle在添加以下代码 1、TabLayout:implementation com.google.android.material:material:1.1.0 2、implementation com.gi…

90后自述,00后都这么卷了吗?

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&#x…

如何在矩池云上安装和使用 Stata

Stata是一款功能强大的统计分析软件,本文提供了如何在矩池云安装使用 Stata,以及如何在 Jupyter 中使用 Stata 的简要教程。 安装 Stata 时需要确保按照官方指南进行操作,Stata 为付费软件,用户需要自己购买相关软件,…

管理类联考——逻辑——知识篇——第六章 管理类联考基础逻辑——综合推理*****

第六章 管理类联考基础逻辑——综合推理***** 一、数学相关 数学题包含比例,集合,不等式,概率等。重视思维考察,计算量小。(考1-2题) 考点1:集合 画饼集能力1 A∪BAB-A∩B A∩BAB-A∪B2 …

【电脑Tips】Win11自动更新之后开机黑屏

Win11自动更新之后开机黑屏 0.问题描述1. 释放静电具体操作效果参考博客 2. 运行explorer.exe具体操作:效果参考博客另外的运行方法 3. 禁用APP Readiness服务具体操作效果参考博客 4. CMD启动explorer.exe具体操作效果参考博客 5. 高级选项【有效】具体操作【问题】…

LeetCode-4题解 寻找两个正序数组的中位数

文章目录 LeetCode-4[题解] 寻找两个正序数组的中位数问题描述样例解析1 常规做法2 二分K-th Number解法 代码 LeetCode-4[题解] 寻找两个正序数组的中位数 问题描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这…

《Hand Keypoint Detection in Single Images using Multiview Bootstrapping》及模型推理

论文:《Hand Keypoint Detection in Single Images using Multiview Bootstrapping》2017 链接:1704.07809.pdf (arxiv.org) code:Hand Keypoint Detection using Deep Learning and OpenCV | LearnOpenCV 论文略读 1.Introduction In th…

AntDB数据库荣获2023年中国信创产业拳头奖“2023年中国信创数据库卓越品牌”

近日,由全球新经济产业第三方数据挖掘和分析机构iiMedia Research(艾媒咨询)主办的“2023年(第2届)中国信创产业大会”在广州圆满落幕。大会现场揭晓了“2023年中国信创产业拳头奖”。AntDB数据库从众多参评产品中脱颖…

研发为底、生态为径、AI为翼——全国一体化算力算网调度平台正式发布

GPU | COMPUTEX | 算力 | GPU服务器 英伟达 | GH200 | 一体化算力算网调度平台 近年来,人工智能硬件、软件算法以及应用场景的丰富度不断增加,算法模型参数也不断增加,这带动了对数据中心并行计算算力的需求。因此,AI、高性能计算…

升级后,配置文件被清空,导致无法开启WiFi

root cause: /data/vendor/wifi/wpa/wpa_supplicant.conf 是0字节,导致wpa_supplicant_init_iface缺少”p2p_disabled1“的配置就会在走错flow到p2p wpa_supplicant_init_iface 》wpas_p2p_init 从而在HidlManager::registerInterface 进入 if (isP2pIf…

EDLA协议授权,谷歌GMS认证,设备申请EDLA协议过认证,谷歌GMS EDLA协议

一、EDLA协议跟MADA协议以及GMS认证有什么关联?AER又是什么?车机使用什么协议申请GMS认证? GMS全称是Google Mobile Service(即谷歌移动服务),GMS认证简单来说就是使用安卓系统的移动设备在经过谷歌的一系列测试后取得谷歌的认可&…

为什么学深度学习的同学都需要懂高性能计算?

深度学习作为人工智能领域的热门技术,正以惊人的速度推动着科学和工业的进步。然而,随着深度学习模型的不断复杂化和数据量的急剧增长,传统的计算资源已经无法满足其高效运算的需求。因此,对于学习深度学习的同学来说,…

Pod 的 phase 和 conditions 的区别

目录 前言 PodStatus对象 pod 的 phase 字段 phase 作用 有哪些 phase pod 的 conditions 字段 pod 有了 phase,为什么还要有 conditions pod 的 conditions 的作用 pod 的 conditions 分类 conditions设计原则 condition字段内容 前言 K…

高颜值测试报告- XTestRunner

基于unittest框架现代风格测试报告。 特点 漂亮测试报告让你更愿意编写测试。支持单元、Web UI、API 各种类型的测试。支持Selenium运行失败/错误自动截图。支持失败重跑。支持标签黑、白名单。支持发邮件功能。支持多语言en、zh-CN 等。支持HTML/XML不同格式的报告。 安装 …