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。

优点

通过脚手架创建项目/应用:不用考虑项目架构怎么设计。

自带Admin后台:在没有前端的情况下,可以比较方便通过Admin对数据进行操作。

自带常用模块:一个命令就能生成 group、user、session ...表,一般个系统都需要user表吧!你还在考虑user表设计,我已经把登录/注册功能写完了。

自带ORM:对于建表和操作数据库可太方便了。

自带单元测试模块:虽然不是必用,但写单元测试很方便的,尤其是运行测试数据隔离,不依赖数据库去构造测试数据。

缺点

模板语言:在前后端分离的架构下,不用Django做页面了,这个东西可以抛弃了。

Form 组件:以后端的方式渲染页面上的表单, 这个东西也可以抛弃了。

只有get/post方法:这就很不符合 RESTful 风格了。

没有参数校验:这就会导致开发接口效率不高,要写不少代码来判断是否为空,类型对不对。

性能差:反正各种性能对比中都是被吊打的那位。

异步支持的不好:如果你很在意异步,还是不要用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简单。我们就做一个实际的功能,实现用户登录接口。

一般框架实现过程:

需要准备一个数据库。

创建一个库和一张用户表。

框架需要与数据库连接。

通过接口实现用户登录。

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

执行数据库迁移

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

总结

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

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

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

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

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。

相关推荐
杜杜的man12 分钟前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布43 分钟前
Java中Properties的使用详解
java·开发语言·后端
2401_857610032 小时前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
秀儿还能再秀2 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
阿_旭3 小时前
如何使用OpenCV和Python进行相机校准
python·opencv·相机校准·畸变校准
幸运的星竹3 小时前
使用pytest+openpyxl做接口自动化遇到的问题
python·自动化·pytest
杨哥带你写代码4 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_4 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端
背水4 小时前
初识Spring
java·后端·spring
晴天飛 雪4 小时前
Spring Boot MySQL 分库分表
spring boot·后端·mysql