使用过很多web开发框架。我指的是继Python热潮之后的web开发方式Django。之前也用过Java的springMVC和RoR框架。下面就几个开发中的常见问题谈一下我的粗浅看法。结构:语言体系和开发习惯,Java的相关定义可以自己约束和配置,完全可以按照自己公司的结构和习惯来写,没有灵活性。符合自己公司和团队的规范就好了。Django也比较类似。对于静态目录,通过系统自带的os、path、setting配置,可以指定对应目录为静态目录或文件上传目录等类似功能。在系统功能规划方面,Django生成的工作目录会提供基础程序,包括初始的wsgi、setting、url等项目基础文件,相应的app目录会通过djangomanagerstartapp生成在同目录下,总体而言,文件结构通常也是固定的。RoR依靠“协议大于配置”的信条来正确指定大部分目录。做过类似开发的开发者基本都熟悉。完整的mvc目录结构,标准的public、static等都是按照通用的项目结构。至于开发语言,讨论Java、Python、Ruby的优点完全没有意义。我就不讨论了,但是我喜欢Python强迫症的tab间距习惯。在开发场景常用的自动化工具方面,已经推出了Docker、Jenkins等工具。Java的自动部署和脚手架完全可以自己实现,但是就纯框架的功能而言,Django和RoR自带的脚手架确实很优秀。Django可以自己构建项目,构建模块,通过模型创建数据库,构建数据库迁移任务。在这些功能的基础上,RoR还提供一键式远程部署、数据库版本回滚、开发流程和模板:RoR和Django可以通过指令生成模块代码,而Java则不能。Django开发也封装了一些常用的ListView、DetailView、TemplateView,以减少开发的代码量。模块代码生成后,django可以通过app中admin.py中系统自带的Model层的定义,通过@注册进入系统的后台管理。无需任何开发即可实现Web界面的数据管理功能。我相信这是Django最强大和最受批评的部分。优点是无需任何代码开发即可将模型一一注入到管理平台中。只需配置模型的字段,即可实现模型的CURD和List页面的过滤器搜索。缺点是管理平台非常死板,修改难度大,比如修改后台模板样式,对模板变量添加一些常用的处理(比如把{{temp}}从1替换成"male"需要写代码来实现。)模板中不能使用Python函数,必须符合模板的Api语法。Java和RoR可以充分利用语言自带的功能,Java可以选择各种模板库作为自己的视图展示层,但是没有Django自带的实现,需要自己开发。相关插件之类的:这里的性能其实已经很不错了。相对而言,Django和RoR让开发者“不用想太多”,通过简单的配置即可完成相关功能,例如:分页、查询后保留参数的Pagination、防CSRF提交、CKEditor富文本编辑框、文件上传、图片裁剪等。相对而言,Django、RoR由于其插件化的方式,自带相关的初始插件脚本。例如:CKEditor可以在pipinstall和bundleinstall之后运行一个执行脚本。默认情况下,上传路径、上传文件类型、自动切图等相关配置通过脚本自动生成,省力。Java的强项在系统架构上,比如:工作流模块、系统权限模块、数据缓存、分片、微服务等架构层面。因此,在日常业务代码开发方面,Django和RoR对开发中小型系统的亲和力更好。Django,RoR更有优势。API和测试:基本一样,swagger应该有相关的支持,至于测试,我觉得Java应该更好一些。本身就是一个庞大复杂的系统,定制的自由度也更高。至于文件结构之类的,就不用萝卜白菜讨论了。个人感觉,其实Django的开发很尴尬,介于两者之间。在全自动化方面不如Rails,在定制化和灵活性方面不如Java。我不喜欢它继承父类然后重写的方式。一开始我在这个开发上花了很长时间,报错信息感觉不是特别精彩。如果纯粹选择开发web,我还是应该选择RoR。接下来是我个人的看法,因为Python更适合大数据,网络抓包,系统底层的服务编程。这也是优于RoR的优势。至于Java,哎,世界第一我还能说什么。以上就是我作为一个没有接触过Python的新手的经历。推荐阅读:《Django企业开发实战高效Python Web框架指南》胡洋写的,完全自己走一遍,相信每个人都会有自己的开发理解。
