asdfasd 发表于 2023-10-4 19:06:57

现在学习Django做web开发过时了吗?

django在实际生产环境还用得多吗?做大项目会选django吗?

djw7612yh 发表于 2023-10-4 19:07:17

当然不过时。
我先说Django的缺点,也就是国内平台很少见的原因:

[*]它实在是太重型了,有自己的一套准则,集成了大量的功能,这对于想要有自主知识产权的平台来说实在是不合适。
[*]它的执行效率很低,尤其是使用自带的模板系统的时候,渲染那种大型页面要数秒,当你使用import-export库进行导入的时候,那个预览页面有时候都能耗时数分钟才能渲染完。
一个双刃剑:

[*]强制要求关系型数据库,虽然说也能有库支持非关系型数据库,但是总得来说还是要求关系型的,这就导致Django对于数据的结构化程度要求很高,数据之间要有清晰的逻辑关系。但好处也是很明显的,逻辑严密,基本不会出错误。
然后我说优点:

[*]最大优势,Python,Python的库实在是太多太好用了,和机器学习、数据分析以及批处理办公契合度太高,使得任何一个Python库都可以在Django的框架内以一种插件或者模块的形式存在。
[*]学习成本低,我自己带团队0基础的连编程都不会的经管学生,最多2个周就能上手写view了,这和Python本身编程简易有很大关系,更重要的是Django自己是一套完整的体系,有自己连贯的逻辑很适合长期应试教育下的学生学习,而不是像Java那种开发式的得东补一块西凑一片的才能把整个主流体系都学会。
[*]开发成本低,在缺少前端工程师的情况下,Django的模板系统和管理站点简直是大多数小系统小项目的救星,HTML和简单的语法就能解决问题,从时间和金钱上双重节约成本,这种特点也是它的巨大优势。
所以,它就是极为适合小型外包项目和小型办公系统的框架,我负责的三个项目一个全套Django,另外两个React+Django,客户那是满分好评的,工时不长给得钱还不少,平均下来时薪将近200。
但你要想进大厂,Django就不咋样了,大厂框架在本世纪初基本因为Java的热潮而锁定在Java Web 上了,Django的效率问题也只能靠边站。
推荐使用Django的人群:

[*]懂编程的非IT办公室职员
[*]需要小型Web管理系统的科研团队
[*]从事Web外包工作的兼职程序员
[*]想要自己做点什么的闲人(当然在国内个人建站基本没戏,不过你既然想做点什么你也肯定知道一些魔法)

liaodan 发表于 2023-10-4 19:07:57

就我自己而言:现在学习Django 做web 不会过时。
具体的感觉:
第一,我给他定位在,快速的,一体化的框架。适合于快速搭建demo,特别是我不擅长前端的部分,依托于django 的admin site,我可以快速搭建网页进行一些功能展示。
这一点,python 其他的框架都有点比不过。同时他适合于单体的项目,可以从小项目逐渐开发成为大项目。
第二呢,它也支持开发成集群服务(也就是可以在开发之前就考虑到分布式部署的情况),比如文件存储,Sotrage的扩展,miniostorage等的使用。

但是呢,它肯定也不是十全十美的。
如果所在的公司的技术栈包括了容器这些,那么就会出现这么一个问题(我遇到了):以django+celery 为架子的项目,docker 打包后,镜像往往很大。很轻易的就按G算(如果有人有特别的打包技巧,请帮帮我),特别是包含了一些算法模块后。这样就会导致集群内部镜像在复制时,蛮久的(当然,就算很大,也是完全可以使用的,但是,多多少少还是有点完美主义的)
当然原因包括:django 本身代码多,模块大,另外就是,其他第三方库代码块大,例如numpy,pillow等。另外就是,模块依赖的linux软件可能也不小(并且这和go 给出的,多阶段编译go程序通过scratch 空镜像部署完全不同)。
还有一个原因,以celery实现的异步调用,是把异步的部分和web 的部分共同完成在一个镜像中,就导致镜像很大。我更希望web部分可能很小,算法部分(也就是异步执行部分)可以适当的大或者通过其他方案精简,这样的话修改起来,也不用反复打包发布。
所以呢,现在的我,更希望使用尽可能小的web框架,尽可能的去得到一个小的镜像的解决方案,甚至愿意尝试多阶段构建,通过pyinstaller 编译python 程序后发布镜像。
比如,通过staticx 可以让pyinstaller 编译后的python程序,脱离linux环境,在scratch 空镜像中运行(可以参考:scratch 镜像中运行python 程序)(目前项目遇到的困境如上,都是非小型的,不敢轻易尝试,未实际采用)。那么我就十分希望使用的工具库,尽量的纯python 实现,足够小且便于打包编译,这一点tornado 或者flask 就很合适,甚至不要依赖于一些linux 平台软件最好(性能考虑范围内)
比如,我希望异步调用不封装在一个项目中,那么rpc的调用就十分有用,那么类似于nameko 这类的rpc库 或者自己重头写一个简单的,rabbitmq rpc调用,不使用一些重型框架来实现,就很重要,异步同步的都可以。
比如,alpine linux 上第三方库编译不太一样,那么我可能在一些框架选择上,更slim- 版本和alpine 均可的第三方库。
甚至,我希望在一些小型的项目上,可以不用python(仅仅是为了编译打包镜像更小),各个部分用不同的语言实现也不是不可能。
从集群,从微服务这些概念来看,反而flask 更让我满意(tornado 这种框架,插件方面,比不过flask)。从编译打包运行方面,tornado 会更让我满意。
所以结论就是:
学着总没错,但是不要指望学了它就可以不用再学其他了。
做完很容易,做好就很难。

gududehuo 发表于 2023-10-4 19:08:07

是否厌倦了在开发网站时花费大量时间来完成重复的、枯燥的任务?Django 就是解决方案。
Django 是一个功能强大且多功能的 Web 框架,使用 Python 开发。它提供了大量预先构建的模块,可以简化后端开发过程,能够让开发者全神贯注于核心业务。
不仅如此还提供了高度抽象的通用 Web 开发模式,可以轻松快速地构建高性能和优美的网站。并且通过 DRY(Don't Repeat Yourself,不要重复自己)的理念为频繁进行的编程作业提供了快速解决方法。
问题:使用 Python 进行 Web 开发合适吗?

Python 作为一种编程语言,其语法简单易懂、上手快速,是许多程序员喜爱的编程语言。在 Web 应用开发中使用 Python,可以加快需求实现速度,快速迭代和验证产品原型。
有些人可能会质疑 Python 的性能,认为它不适合用于 Web 开发。实际上Python 在性能上确实无法与 C语言、Java 等语言相比,但在大部分情况下使用 Python 开发是可以满足性能需求的。很多时候,程序性能不够好并不是语言本身的问题,而是架构设计、缓存设计、数据结构算法的选用以及开发人员编程水平等因素导致的。
使用 Python 语言进行 Web 开发具有独特的优势,通常能满足大部分应用场景的需求。而且 Python 具有跨平台性,可以跑在不同的操作系统上,支持多种数据库,并且拥有丰富的第三方库,能够满足各种不同的需求。
除了性能外 Python 还具有其他优秀的特性,比如高可读性、易于维护和扩展、支持多种编程范式等。这些都使得 Python 成为了一种非常适合 Web 开发的语言。
Django 特点

自带管理后台

Django自带管理后台可以通过简单的代码,为网站增加一个非常强大的管理后台,轻松地对内容进行增加、删除、修改和查找操作。还可以很方便地定制搜索和过滤操作,使用户可以更快速地找到所需的内容。
自带管理后台是一种非常适合用于内容管理平台的方式。可以轻松管理内容,提高工作效率,为用户提供更好的服务。


http://pic1.zhimg.com/v2-8eaee821cb343ad0d376640047322b56_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-6b331211ef4d4f4056cd726df4e3ef2c_r.jpg?source=1940ef5c

灵活的路由系统

Django提供了一种灵活的路由系统,这种系统可以定义优雅的访问地址,使得用户在浏览网站时更加顺畅。这种路由系统还可以随着项目的变化而进行配置,从而更好地满足项目的需求。帮助开发者更好地管理网站内容,提高工作效率。这样就可以专注于其他重要的工作,而不用担心网站访问地址的问题。
并且这种灵活的路由系统还可以帮助提高网站的SEO效果。优雅的访问地址可以让搜索引擎更容易地索引你的网站,而且还可以更好地满足搜索引擎的要求。

http://pic1.zhimg.com/v2-eefb8cab7027c3aad20c4ae28d367364_r.jpg?source=1940ef5c

http://pic1.zhimg.com/v2-169c8763169c8b3ad5601b9998a7c864_r.jpg?source=1940ef5c

数据库 ORM

Django提供了强大的数据库 ORM ,这种 ORM 提供了一种强大的数据库操作接口,称为 QuerySet API,可以轻松地执行原生 SQL。
这种 ORM 可以简化数据库操作,提高工作效率。还可以让在不编写 SQL 语句的情况下进行数据库操作,并且还可以提供许多便捷的方法,如过滤、排序、分页等,使得数据库操作更加简单。
通过这种 ORM 还可以管理数据库连接,解决了数据库连接泄漏等问题,可以更好地保证网站的稳定性。并且还支持多种数据库类型, 可以更灵活的应对不同的项目需求。


http://pic1.zhimg.com/v2-5d18f30a010fb8755748cdb5ce371977_r.jpg?source=1940ef5c

前端模板配置

Django的前端模板应用能够帮助开发者更好地管理和控制Web应用程序的前端展示。
Django前端模板应用的优势在于它能够有效地分离应用程序的业务逻辑和前端展示。开发者可以在后端编写业务逻辑,而前端设计师可以在前端设计网页的外观和布局。这样做可以使开发过程更加高效和顺畅。
Django前端模板应用还具有很好的可维护性。开发者可以通过编写模板来定义网页的外观和布局,并且可以在不同的模板之间共享变量和代码片段。这样做可以使得网页的维护和更新变得更加简单。


http://picx.zhimg.com/v2-2cfa646296ffe8ae11651d2f82516b69_r.jpg?source=1940ef5c

前后端分离API

前后端分离API是当前越来越流行的一种Web开发架构,将前端展示和后端逻辑分离开来,使得开发和维护变得更加简单和高效。
基于前后端分离系统可以使用Django来开发API,可以更轻松地实现与前端交互。Django提供了一系列强大的工具,可以快速开发API,比如Django Rest Framework。
还可以不使用Django的模板系统来开发API,而是使用其他模板。这样做可以自由地选择适合项目的模板,并且也可以使API更加简洁和高效。


http://picx.zhimg.com/v2-bb099efb3d71d47cb9f6244e8bf87e08_r.jpg?source=1940ef5c

自带缓存

在网络应用程序中,缓存系统是非常重要的。能提高网站或应用程序的加载速度,提高用户体验。
使用 django 框架与 Memcached 和 Redis 的缓存系统非常简单。Django 提供了缓存框架,可以很方便的和 Memcached 和 Redis 等缓存系统进行联合使用。
只需要简单的配置就可以实现缓存。


http://picx.zhimg.com/v2-fc8042d65e6c4ef39077686ffda68a8b_r.jpg?source=1940ef5c

国际化支持

Django 提供了强大的国际化支持。能够让定义翻译的文字,并轻松地翻译成不同国家和地区的语言。提供了简单易用的国际化工具,支持多语言应用,可以使用 Django 的翻译模块来管理多语言应用,并使用语言环境来控制应用程序的语言。

http://pica.zhimg.com/v2-72d22bae048fb7d259079da7c13810b4_r.jpg?source=1940ef5c

Django 发布情况

功能版本(A.B,A.B+1,如 2.0,2.1 等)大约每 8 个月发布一次。这些版本将包含新功能以及对现有功能的改进等,也可能包含与上一个版本不兼容的功能,详细的说明在版本的发布日志(Release Notes)中可以查阅到。
补丁版本(A.B.C,如 2.1.3)会根据需要发布,以修复错误和安全问题。这些版本将与相关的功能版本 100% 兼容,除非是出于安全原因或为了防止数据丢失而无法做到 100% 兼容。
正因为如此,如果之前使用的是 Django 3.0,现在最新的版本是 Django 3.0.3,那么可以放心将 3.0 版本升级到 3.0.3版本。
某些功能版本被指定为长期支持(LTS)版本,这种稳定版本通常自发布之日起 3 年以内,会持续发布安全和关键补丁,即所谓提供持续稳定的支持。
从 Django 2.0 开始,它不再支持 Python 2。
下图演示了 Django 各版本的发布情况和支持计划

http://pica.zhimg.com/v2-70240f30262c490b5070c236ef51ffaf_r.jpg?source=1940ef5c

Django 的 MVT 架构

模型(Model)负责管理数据和业务逻辑,包括数据库操作和数据验证等。视图(View)负责处理用户请求,并生成响应。控制器(Controller)负责调用模型和视图,并将它们组合起来。
Django 也遵循类似的模式,称为 MVT 模式,其中 T 指的是模板。在 Django 中,模板负责生成 HTML 页面,而不是在控制器中处理。这样可以使得代码更加清晰,并且更易于维护。
MVC 模式

MVC 模式代表着模型-视图-控制器,这种模式将应用程序的功能划分为三个部分:模型、视图和控制器。模型负责管理数据和业务逻辑,视图负责处理用户请求并生成响应,控制器负责调用模型和视图并将它们组合起来。这种模式使得代码结构清晰,易于维护。
MVT 模式

MVT 与 MVC 区别在于 Django 本身已经实现了控制器(Controller)这部分的功能,暴露给开发者的是模板(Template)。
MTV 模式代表着模型-视图-模板,这种模式是 Django 框架所采用的。在 Django 中,模板负责生成 HTML 页面,而不是在控制器中处理。这样可以使得代码更加清晰,并且更易于维护。
Django 和其他 Python Web 框架的对比

用于 Python Web 开发的框架有很多,比如 Flask、Bottle、Pyramid、Webpy 等。
Django 和 Flask 的对比



http://picx.zhimg.com/v2-ce0765bcadcdbef8c133173ac565b3ce_r.jpg?source=1940ef5c
Flask(Micro Framework)是一个小而精的微框架,它不像 Django 那样大而全。它追求简洁易用,没有 Django 那些大型框架所具有的功能。Flask 的核心职责仅限于提供一个简单的 Web 框架,而其他功能需要由开发者根据需求自行选择和组装。
这也就意味着使用 Flask 开发的时候,开发者需要自己决定使用哪个数据库 ORM、模板系统、用户认证系统等。这样的好处是开发者可以根据自己的需要去选择合适的插件,灵活度更高。
然而在项目开始的时候,开发者可能需要花更多的时间去了解、挑选各个组件。同时由于 Flask 历史相对较短,第三方 App 自然没有 Django 那么全面,所以开发者需要自己去找寻更多的第三方库来支持项目的开发。
Django 和 Tornado 的对比



http://picx.zhimg.com/v2-ee93af7aae27a4df7b397b21d5e1eaf9_r.jpg?source=1940ef5c
Tornado 是一个 Python Web 框架和异步网络库,最初由 FriendFeed 开发,旨在解决 10000 个并发连接的问题。
传统的 Apache 服务器会为每个 HTTP 请求连接一个线程,而在大多数 Linux 发行版中默认线程堆大小是 8MB。当连接数量过多时,这种线程池的方式会极易耗尽服务器上的所有资源。Tornado 通过使用非阻塞网络 I/O,把等待资源的操作挂起,当数据准备好时再回调相应的函数,可以轻松应对数万个连接。因此 Tornado 是长轮询和 WebSocket 等需要与每个用户建立长期连接的应用程序的理想选择。
然而与 Django 相比,使用 Tornado 编写异步代码对于开发者来说并不像编写同步代码那么简单、直接和高效。需要开发者有更高的技能水平和更多的时间去学习和掌握。

lanny98801 发表于 2023-10-4 19:08:48

从世界的范围看不过时,反而非常适合个人开发者或者小团队。
但如果你学Django是为了在国内找一份程序员的工作,那么Django可以说从来没有主流过,因此也谈不上过时。国内的web服务java是大头。
在国内,个人想要搭建一个(面向国内用户的)独立网站非常非常困难,99%的人卡在域名备案,剩下1%里面的90%还要被云服务厂商的带宽定价恶心。这导致了国内的中小型web服务真的十分欠缺,因此中小型web框架的市场也不大(相比于英语世界的百花齐放)。
不过呢,如果你能克服上述困难,搭建个人web项目,或者是小型团队的项目,Django绝对是利器。
Django是一个完整的框架,帮你做了很多默认的选择,这些预先包含的工具链在搭建web服务的初期非常好用。
此外,使用python也是Django的一大优势,因为python的库实在太多了,基本上你所需要的任何工具都有人涉足过,这意味着在你的web服务有一定规模之前可以很舒服地搭建起来。
对比之下,flask的优点是小巧,但缺点也是小巧。灵活的同时意味着自己需要重复造轮子,或者花时间配置,而Django提供了一个不错的解决方案可以直接用。
其实在这种场景下,WordPress也是一个很不错的选择,可以快速搭建网站。但python比php的适用范围更广,所以我更推荐python。
当你开始频繁感受到Django的技术瓶颈的时候,八成你的业务已经颇具规模,可以赚很多钱了,这时候你应该先高兴才是,然后再考虑升级技术栈。
Extras:
阿里云在国内算是矮子里面挑将军,轻量应用服务器,香港区24块/月,50mbps,国内60块/月,是1mbps还是3mpbs来着。ecs实例包年600起步,带宽1mbps,好在现在可以按量付费,最高100mbps带宽,1GB 8毛钱。

mingren119 发表于 2023-10-4 19:09:10

互联网不适合,国内以前豆瓣和知乎好像是python,但好像也是flask吧?现在都转了,团队小hold住,大了确实hold不住,django这种框架的带来的便捷随着项目和参与人数的增大边际成本是递减的。
但你说的过时了就要辩证的看了,小团队用django完全没问题,如果其他的业务主要是基于python的其实比较实用,比如偏ml这块。搭配celery和apscheduler等等做一个轻量级的任务系统其实挺实用的。
还有就是作为全站的后端的一个入门的选择django也可以。毕竟大部分全站还是只能做到一端专精,另一端相对辅助一些。其实对于绝大多数人来说能做到业务专精就已经到天花板了,业务其实不是很看重语言,django可以快速搭建出一个原型还是可以的,虽然国内整体还是java系一家独大。
——
2021/03/14 追加一下我现在python作为后台主要语言的技术栈
做的主要是webgis相关的,前端 leaflet+vue+ts,后段django+drf+geodjango+celery,db:mysql+pg+mongo,数据处理:numpy+pandas+xarray+geopandas等,wms wfs服务:geoserver/mapserver。
目前看可以hold住。
————
追更一下19年那会py一度感觉要凉,不过20年开始又红火起来了。主要学习成本很低是他的优势,如果选择第一语言还是java优先选择。因为国内大环境如此。py也不是不可不是最优解。
还有就是岗位前景如果纯服务开发py并不是最好的选择,java岗位和py在互联网领域差距还是巨大的。
页: [1]
查看完整版本: 现在学习Django做web开发过时了吗?