Django的中间件有哪些(2023年最新整理)

作者&投稿:臾甄 (若有异议请与网页底部的电邮联系)
~

导读:今天首席CTO笔记来给各位分享关于Django的中间件有哪些的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

常见的中间件有哪些

第一款:tomcat

tomcat是一款Java语言servlet标准化的服务器软件。适用于本地开发、小项目或个人开发,Apache为HTML页面服务,而tomcat实际操作JSP页面和servlet,但是tomcat处理静态html的能力不如Apache服务器。

特点:支持最新标准、更新快、跨平台、体积小安装部署方便。

第二款:weblogic

大型项目或商业项目,Java动态功能和Java

Enterprise在大型网络应用的开发、集成、部署和管理中,引入了标准的安全性bea公司生产的基础j2ee架构中间件。

特点:简化了可移植和可扩展应用系统的开发,为其他应用系统和系统提供了丰富的可操作性;商业软件功能齐全强大,主要用于大型企业的大型项目;是一种高扩展的架构体系。

第三款:jetty

jetty是使用Java语言编写,jetty运行速度快,轻量级,在Java中可以从test

case控制其运行。从而使自动化测试不再依赖外部环境,顺利实现自动化测试。

特点:易用、可扩展、易嵌入;快速高效。

第四款:JBoss

管理EJB容器和服务器,JBoss遵循商业友好LGPL授权分发,由开源社区开发。

特点:应用服务器也有许多优秀的特点;内存和硬盘空间相对较小;安装方便,解压后,只需配置一些环境变量即可;JBoss支持集群等。

[Django]celery的替代品funboost

Django开发web应用的过程中,一个老大难问题是异步调度问题。例如用户传来一个非常耗时的请求,这时候最好的处理方式是先把这个操作请求记录下来,先响应请求,等后面有空的时候再去计算,而不是让用户干等着着急。

这种优化方式就是典型的生产者+消息队列+消费者设计模式,而Django框架本身并没有直接提供该设计模式的实现,大多教程都是利用第三方组件celery+redis来实现这个调度。

遗憾的是celery和redis官方都不支持windows,而我习惯的开发环境还是win10,所以需要找一个替代品。经过调研,发现了一个很好的【python分布式函数调度框架——funboost】.它的优点很多,对Django开发来说,最大的亮点是完全无需启动第三方服务,即可实现生产消费设计模式。一个pipinstallfunboost即可干活,开箱即用。它可以使用SQLite文件来做消息队列,足以应对小型应用开发。当然也可以使用Kafka这种高级的消息中间件,实现高可用。

要说缺点吧,这个组件的日志打印太啰嗦,而且没有提供关闭选项,控制台已被它刷屏。

Django和Flask这两个框架在设计上各方面有什么优缺点

(1)Flask

Flask确实很“轻”,不愧是MicroFramework,从Django转向Flask的开发者一定会如此感慨,除非二者均为深入使用过

Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库

入门简单,即便没有多少web开发经验,也能很快做出网站

非常适用于小型网站

非常适用于开发web服务的API

开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验

各方面性能均等于或优于Django

Django自带的或第三方的好评如潮的功能,Flask上总会找到与之类似第三方库

Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不一

Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django

Flask比Django更加Pythonic,与Python的philosophy更加吻合

(2)Django

Django太重了,除了web框架,自带ORM和模板引擎,灵活和自由度不够高

Django能开发小应用,但总会有“杀鸡焉用牛刀”的感觉

Django的自带ORM非常优秀,综合评价略高于SQLAlchemy

Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja

Django自带ORM也使Django与关系型数据库耦合度过高,如果想使用MongoDB等NoSQL数据,需要选取合适的第三方库,且总感觉Django+SQL才是天生一对的搭配,Django+NoSQL砍掉了Django的半壁江山

Django目前支持Jinja等非官方模板引擎

Django自带的数据库管理app好评如潮

Django非常适合企业级网站的开发:快速、靠谱、稳定

Django成熟、稳定、完善,但相比于Flask,Django的整体生态相对封闭

Django是Pythonweb框架的先驱,用户多,第三方库最丰富,最好的Python库,如果不能直接用到Django中,也一定能找到与之对应的移植

Django上手也比较容易,开发文档详细、完善,相关资料丰富

python用的第三方库属于中间件吗

是的。

Django中间件是用来处理Django的请求request和响应response的框架级别的钩子,它是一个轻量,低级别的插件系统,用于全局范围内改变Django的输入,输出,每个中间件组件都负责做一些特定的功能。

csrf_token的了解

django中写form表单时csrf_token的作用:

Django下的CSRF预防机制

CSRF预防机制

CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。

token防御的整体思路是:

第一步:后端随机产生一个token,把这个token保存在SESSION状态中;同时,后端把这个token交给前端页面;

第二步:下次前端需要发起请求(比如发帖)的时候把这个token加入到请求数据或者头信息中,一起传给后端;

第三步:后端校验前端请求带过来的token和SESSION里的token是否一致;

1、Django下的CSRF预防机制

django第一次响应来自某个客户端的请求时,会在服务器端随机生成一个token,把这个token放在cookie里。然后每次POST请求都会带上这个token,

这样就能避免被CSRF攻击。

在templete中,为每个POSTform增加一个{%csrf_token%}tag.如下:

在返回的HTTP响应的cookie里,django会为你添加一个csrftoken字段,其值为一个自动生成的token

在所有的POST表单模板中,加一个{%csrf_token%}标签,它的功能其实是给form增加一个隐藏的input标签,如下

,而这个csrf_token=cookie.csrftoken,在渲染模板时context中有context['csrf_token']=request.COOKIES['csrftoken']

在通过表单发送POST到服务器时,表单中包含了上面隐藏了crsrmiddlewaretoken这个input项,服务端收到后,django会验证这个请求的cookie里的csrftoken字段的值和提交的表单里的csrfmiddlewaretoken字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的csrf攻击,返回403Forbidden.

在通过ajax发送POST请求到服务器时,要求增加一个x-csrftokenheader,其值为cookie里的csrftoken的值,服务湍收到后,django会验证这个请求的cookie里的csrftoken字段与ajaxpost消息头中的x-csrftokenheader是否相同,如果相同,则表明是一个合法的请求

具体实现方法

django为用户实现防止跨站请求伪造的功能,通过中间件django.middleware.csrf.CsrfViewMiddleware来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

全局:

中间件django.middleware.csrf.CsrfViewMiddleware

局部:

@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。

@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

注:fromdjango.views.decorators.csrfimportcsrf_exempt,csrf_protect

1、原理

在客户端页面上添加csrftoken,服务器端进行验证,服务器端验证的工作通过'django.middleware.csrf.CsrfViewMiddleware'这个中间层来完成。在django当中防御csrf攻击的方式有两种:

1.在表单当中附加csrftoken

2.通过request请求中添加X-CSRFToken请求头。

注意:Django默认对所有的POST请求都进行csrftoken验证,若验证失败则403错误侍候。

Django设置cookie中的csrftoken

VUE向django发送post返回403:CSRFFailed:CSRFtokenmissingorincorrect解决方案:

Django源码阅读(一)项目的生成与启动

诚实的说,直到目前为止,我并不欣赏django。在我的认知它并不是多么精巧的设计。只是由功能堆积起来的"成熟方案"。但每一样东西的崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)

取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。

django-adminstartprojectHelloWorld即可生成django项目,命令行是exe格式的。

manage.py把参数交给命令行解析。

execute_from_command_line()通过命令行参数,创建一个管理类。然后运行他的execute()。

如果设置了reload,将会在启动前先check_errors。

check_errors()是个闭包,所以上文结尾是(django.setup)()。

直接看最后一句settings.INSTALLED_APPS。从settings中抓取app

注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于django\conf\__init__.py

这是个Settings类的懒加载封装类,直到__getattr__取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的__dict__上(下次会直接在自己身上找到,因为__getattr__优先级较低)

为了方便debug,我们直接写个run.py。不用命令行的方式。

项目下建个run.py,模拟runserver命令

debug抓一下setting_module

回到setup()中的最后一句apps.populate(settings.INSTALLED_APPS)

开始看apps.populate()

首先看这段

这些App最后都会封装成为AppConfig。且会装载到self.app_configs字典中

随后,分别调用每个appConfig的import_models()和ready()方法。

App的装载部分大体如此

为了方便debug我们改写下最后一句

res的类型是Commanddjango.contrib.staticfiles.management.commands.runserver.Commandobjectat0x00000101ED5163A0

重点是第二句,让我们跳到run_from_argv()方法,这里对参数进行了若干处理。

用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。

这里分为两种情况,如果是reload重载时,会直接执行inner_run(),而项目启动需要先执行其他逻辑。

django项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。

第一次启动时,DJANGO_AUTORELOAD_ENV为None,无法进入启动逻辑。会进入restart_with_reloader()。

在这里会将DJANGO_AUTORELOAD_ENV置为True,随后重启。

第二次时,可以进入启动逻辑了。

这里创建了一个django主线程,将inner_run()传入。

随后本线程通过reloader.run(django_main_thread),创建一个轮询守护进程。

我们接下来看django的主线程inner_run()。

当我们看到wsgi时,django负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了

这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)

那么这个wsgi是从哪来的?让我们来稍微回溯下

这个settings是一个对象,在之前的操作中已经从settings.py配置文件中获得了自身的属性。所以我们只需要去settings.py配置文件中寻找。

我们来寻找这个get_wsgi_application()。

它会再次调用setup(),重要的是,返回一个WSGIHandler类的实例。

这就是wsgiapp本身。

load_middleware()为构建中间件堆栈,这也是wsgiapp获取setting信息的唯一途径。导入settings.py,生成中间件堆栈。

如果看过我之前那篇fastapi源码的,应该对中间件堆栈不陌生。

app入口→中间件堆栈→路由→路由节点→endpoint

所以,wsgiapp就此构建完毕,服务器传入请求至app入口,即可经过中间件到达路由进行分发。

结语:以上就是首席CTO笔记为大家介绍的关于Django的中间件有哪些的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。




Django使用什么中间件?
django启动服务成功,访问网页提示不安装中间件无法添加消息你需要按照提示在settings.py的MIDDLEWARES列表中添加MessageMiddleware中间件,才可以使用Django的message框架。python用的第三方库属于中间件吗是的。Django中间件是用来处理Django的请求request和响应response的框架级别的钩子,它是一个轻量,低级别的插...

django中间件用在哪里(2023年最新解答)
自定义Django中间件的知识详解(十二)以下是在项目主目录下settings.py文件下进行 1、如果开启django的时候端口被占用,可用下面的方式来查看端口的情况。2、杀死被占用的端口 【Python基础】django中间件应用场景?中间件其实是对请求的过滤,所有请求过来,先通过中间件,然后才到你的应用,中间件可以用来...

django怎么修改中间件(django中间件的运行机制)
1、如果开启django的时候端口被占用,可用下面的方式来查看端口的情况。2、杀死被占用的端口 2020-10-26django之session和中间件csrf33、cbv加装饰器 -第一种:加在类上 formdjango.utils.decoratorsimportmethod_decorator method_decorator(login_auth,name='get')method_decorator(login_auth,name='post...

django什么是中间键(django联合主键)
django为用户实现防止跨站请求伪造的功能,通过中间件django.middleware.csrf.CsrfViewMiddleware来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。 全局: 中间件django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。 @csrf...

django怎么使用中间件(2023年最新分享)
1、如果开启django的时候端口被占用,可用下面的方式来查看端口的情况。2、杀死被占用的端口 描述Django中的中间件执行原理,如何自定义一个过滤返回的中间键?1.创建一个模板库 使用模板过滤器的时候,直接把过滤器写在app里,例如:在app里新建一个templatetags的文件夹,这个目录应当和models.py、views....

django的中间件是什么
django有哪些中间件很多啊,比如session、csrf、contexttype,你还可以自己写中间件。参考:刘江的Django教程 【Python基础】django中间件应用场景?中间件其实是对请求的过滤,所有请求过来,先通过中间件,然后才到你的应用,中间件可以用来过滤请求,认证等。Django和Flask这两个框架在设计上各方面有什么优...

Django怎么实现消息队列(django消息队列中间件)
一个pipinstallfunboost即可干活,开箱即用。它可以使用SQLite文件来做消息队列,足以应对小型应用开发。当然也可以使用Kafka这种高级的消息中间件,实现高可用。要说缺点吧,这个组件的日志打印太啰嗦,而且没有提供关闭选项,控制台已被它刷屏。从事django,请问啥是消息队列?消息队列可以简单理解为:把要传输...

django适合哪些场景(2023年最新解答)
【Python基础】django中间件应用场景?中间件其实是对请求的过滤,所有请求过来,先通过中间件,然后才到你的应用,中间件可以用来过滤请求,认证等。为什么使用Python,Python应用场景特点python一般认为是脚本语言,或者说是动态语言,速度慢肯定是所有解释性语言的缺点了,除此之外,python的多线程无法在多核...

django钩子是什么(django做什么的)
Django中间件是用来处理Django的请求request和响应response的框架级别的钩子,它是一个轻量,低级别的插件系统,用于全局范围内改变Django的输入,输出,每个中间件组件都负责做一些特定的功能。Django-Forms组件之钩子函数源码详解?一切从这里开始,先留个心 tips:?form组件校验数据的规则:从上往下依次取值...

django模板引擎是什么意思(2023年最新分享)
Django是基于中间件的一个大型框架。框架本身的内容相当丰富,基础部分:模版引擎、ORM、表单、路由分发这些标配,还有不少的中间件:登陆、后台管理,这些还是官方中间件,另外还有不少的第三方中间件。关于第三方的我没有详细研究过,质量不太好评论。还有由ROR带起的基于命令的Web开发方式和扩展、还有内...

边坝县13489215344: django有哪些中间件 -
前生小儿: 很多啊,比如session、csrf、contexttype,你还可以自己写中间件.参考:刘江的Django教程

边坝县13489215344: Django和Flask这两个框架在设计上各方面有什么优缺点 -
前生小儿: Django Django是基于中间件的一个大型框架.框架本身的内容相当丰富,基础部分:模版引擎、ORM、表单、路由分发这些标配,还有不少的中间件:登陆、后台管理,这些还是官方中间件,另外还有不少的第三方中间件.关于第三方的我没...

边坝县13489215344: java开发一般使用什么中间件 -
前生小儿: 一般采用ssh模式或者mvc,你说中间件 太笼统了,你具体想问什么呢

边坝县13489215344: 描述Django中的中间件执行原理,如何自定义一个过滤返回的中间键? -
前生小儿: 1.创建一个模板库 使用模板过滤器的时候,直接把过滤器写在app里,例如:在app里新建一个templatetags的文件夹,这个目录应当和 models.py 、 views.py 等处于同一层次.例如:books/ __init__.py models.py templatetags/ views.py 在 ...

边坝县13489215344: java中间件有哪些 -
前生小儿: 页面缓存软负载均衡CDN

边坝县13489215344: django2.0.3有哪些类似django - users2的包 -
前生小儿: sqlalchemy使用上有两个层次,1是使用sql expression, 说白可以让你用python写sql, 2是它的orm, orm是使用session的,自行管理session生存期,自行在多个过程中传递session,自行管理事务.写法上是通常的transaction script(java常说的贫血...

边坝县13489215344: Django中的模板都有哪些? -
前生小儿: Django中常用的来模板有两种,分别是 Django 框架自带的模板和 第三方jinja2 模板自带模板可以通过在 settings 文件中自设置中直接使用,不需要额外配置 jinja2模板是第三方模2113板,在使用时,需要先进行安装相应的模块,然后在 settings 中进行配5261置后才可以使用jinja2模板的执行速度要4102比 Django 自带模板执行速度要快.DJango模板知识可以看一下黑1653马程序员视频库的学习视频

边坝县13489215344: djangodjango debug toolbar怎么用 -
前生小儿: 1.使用easy_install django-debug-toolbar安装django-debug-toolbar.2.打开你项目的settings.py文件3.添加'debug_toolbar.middleware.DebugToolbarMiddleware'到项目的中间件中,MIDDLEWARE_CLASSES 内.4.在settings.py中添加...

边坝县13489215344: 常见的中间件有哪些? -
前生小儿: 一般本地开发的话建议使用tomcat.linux系统建议使用jetty或apache hpptd大型的项目就用JBOSS或webloigc小项目,或者是个人开发tomcat 大项目或者商业项目一般采用:weblgoic/webshere其他的还有jboss、glasshfish等一些示例项目或者小...

边坝县13489215344: Django如何处理语言偏好(根据此可以设置中文) -
前生小儿: 在这些功能背后,Django拥有一个灵活的模型来确定在安装和使用应用程序的过程中选择使用的语言.要设定一个安装阶段的语种偏好,请设定LANGUAGE_CODE.如果其他翻译器没有找到一个译文,Django将使用 这个语种作为缺省的翻译...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网