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

《2020 Python 开发者调查结果》

https://www.jetbrains.com/zh-cn/lp/python-developers-survey-2020/

从上图中可以看出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: 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简单。我们就做一个实际的功能,实现用户登录接口。

一般框架实现过程:

  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。

django REST框架- Django-ninja的更多相关文章

  1. Django web框架-----Django templates模板

    说明:mytestsite是django框架下的项目,quicktool是mytestsite项目中的应用 一般的变量之类的用 {{ }}(变量),功能类的比如循环.条件判断是用 {% %}(标签) ...

  2. Django web框架-----Django连接本地现有mysql数据库

    第一步:win10下载mysql5.7压缩包配置安装mysql,创建数据库或导入数据库 第二步:win10搭建django2.1.7开发环境,创建项目为mytestsite,创建应用app为quick ...

  3. 冰冻三尺非一日之寒--web框架Django

    1.JS 正则    test   - 判断字符串是否符合规定的正则        rep = /\d+/;        rep.test("asdfoiklfasdf89asdfasdf ...

  4. web框架django初探

    Web框架介绍 一般会分为两部分:服务器程序和应用程序.服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理.应用程序则负责具体的逻辑处理.为了方便应用程序的开发,就出 ...

  5. jS正则和WEB框架Django的入门

    JS正则 -test 判断字符串是否符合规定的正则表达式 -exec 获取匹配的数据 test的例子: 从上述的例子我们可以看出,如果rep.test匹配到了就返回true,否则返回false exe ...

  6. Django messages框架

    一.简介 在网页应用中,你经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户 对于这个功能,Django 提供基于Cookie 和会话的消息,无 ...

  7. Django.template框架 template context (非常详细)

    前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1,显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...

  8. Web框架-Django基础

    一.django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  9. python运维开发(十七)----jQuery续(示例)web框架django

    内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...

  10. Web框架——Django笔记

    Web框架--Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django--MTV 1.创建Django程序   ...

随机推荐

  1. LeetCode-009-回文数

    回文数 题目描述:给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.例如,121 是回文,而 1 ...

  2. LeetCode-073-矩阵置零

    矩阵置零 题目描述:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解决方案是使用 O(mn) 的额外空间,但这并不 ...

  3. 测评 | 矩池云上架 RTX 2080 Ti 八卡机开箱

    大家好,福利君今天给给大家带来的是一则消息.矩池云将上架了超微八卡GPU服务器,全新的机器组合,可靠的服务品质. 产品性能 在这里引用Lambda Labs基于FP32对多GPU扩展训练性能评测的数据 ...

  4. 调用Visual Studio的cl.exe编译C/C++程序

    @ 目录 调用Visual Studio的cl.exe编译C/C++程序 前言 1.查看VS的路径 2.添加环境变量 3.查看设置是否生效 4.配置Notepad++ 调用Visual Studio的 ...

  5. 图解|用好MySQL索引,你需要知道的一些事情

    我是蝉沐风. 这一篇文章来聊一聊如何用好MySQL索引. 为了更好地进行解释,我创建了一个存储引擎为InnoDB的表user_innodb,并批量初始化了500W+条数据.包含主键id.姓名字段(na ...

  6. 【UML】统一建模语言及工具

    共四个 Chapter,持续输出中. 参考资料: UML软件建模技术-基于IBM RSA工具(清华大学出版社) UML2.0基础与RSA建模实例教程(人民邮电) 面向对象葵花宝典(李运华)(电子工业出 ...

  7. LGP6008题解

    题意有点儿绕? 容易发现,题意相当于在说,如果某一格有水,那么 ban 掉上一行后,让与其连同的所有格子被画上水. 所以我们从上到下枚举行,依次 ban 掉每一行,然后数连通块个数即可. 需要注意的是 ...

  8. Kafka的优秀设计学习

    一.Kafka基础 消息系统的作用 应该大部份小伙伴都清楚,用机油装箱举个例子 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用. 引入一个场景,我们知道中国移动,中国 ...

  9. Mybatis使用注解开发(未完)

    使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心 注解在接口实现 @Select("SELECT * FROM user") Lis ...

  10. Rsync未授权访问

    1.漏洞名称 Rsync 未授权访问漏洞 2.漏洞原理 rsync是Linux下一款数据备份工具,支持通过rsync协议.ssh协议进行远程文件传输. 其中rsync协议默认监听873端口,如果目标开 ...