Django3.0的一些重大变化

Django3的改变

MariaDB: MySQL的一个分支,开源的一个版本

ASGI: 异步服务网关接口

重大的改变之支持ASGI

WSGI: Web Server Gateway Interface,也称为中间件

用于定义Python程序和Web服务器如何通信的协议,通常使用的有uwsgi、mod_wsgi等

Python程序Web服务器客户端
DjangoApache浏览器
FlaskNginxApp
TornandoIIS小程序

整个过程用示意图可表示为如下图所示的形式

其中,第一次通信使用的是WSGI协议;第二次通信使用的是Http协议。

如何实现实时的消息通知机制
  1. 使用Http协议

    每隔一段时间进行一次轮询(poll),Http是一种同步的通信机制

    缺点

    • 服务器的压力相对较大
    • 发送了很多重复的报文
  2. 使用WebSocket协议

    建立持久、可双向通信的连接,WebSocket是一种异步的通信机制

    优点

    • 真正的实时通信
    • 降低服务器资源消耗

    缺点

    • WSGI并不支持WebSocket,只能通过第三方库进行使用
C10K问题,单台服务器无法处理10,000+个并发连接

单个访问的情况

后端的Web程序在处理一个请求的时候,可能会发生一些数据库的CRUD操作,这些操作统称为"耗时操作"。

此时,响应这个处理的进程或者线程,就会一直处于等待的操作,什么任务都不执行。

为了避免这种浪费的发生,就产生了异步的思想:在进行数据库的CRUD操作的时候,Web程序去处理其他的事情。当这些耗时操作完成后,通过回调来通知Web程序继续处理。

ASGI——支持异步通信的机制

为了让Python的Web程序支持异步通信和相关处理机制,ASGI自此诞生。

目前,Django3.0内部采用了线程池做同步处理请求,底层的ASGI服务器是异步处理请求。尽管如此,性能也是之前的3~5倍,支持的并发连接数也更高。

ASGI服务器以及Web框架
ASGI服务器
  1. Daphne

    当前的ASGI的参考服务器,使用Twisted编写,并作为Django Channels项目的一部分进行维护。支持HTTP / 1,HTTP / 2和WebSockets。

  2. Uvicorn

    基于uvloop和httptools的快速ASGI服务器。支持HTTP / 1和WebSockets。

  3. Hypercorn

    基于sans-io hyper,h11,h2和wsproto库的ASGI服务器。支持HTTP / 1,HTTP / 2和WebSockets。

Web框架
  1. Django
  2. Quart: 兼容Flask
  3. Starlette

Django各版本发行时间及支持时间

最后附上Django的各版本发行时间以及支持时间

总结

Django3.0相较于Django2的变化,我认为最主要的有两点,分别是

1.提升了对Python版本的依赖,如Django2.0甚至可以使用Python2,但是Django3.0要求Python版本必须高于3.6。

2.开始支持异步框架,即自带的WebSocket协议,这是至关重要的一点。

总体来说,Django2.2目前是可用的,毕竟根据官方的显示,它是一个长期支持版,至少可以到2022年。如果没有明确的异步需求,自然是首选稳定的2.2版本。如果确实需要用到异步的功能,那么Django3.0也是一种不错的选择!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值