大家在python 中习惯分层吗

以前写 java 习惯分三层,感觉特别好,但是现在写 python,发现公司的代码竟然没有分层,由于年代久远,不知道是 当时写 python 的人太菜,还是 python 本身没有分层习惯。所以想问大家在开发 python 项目的时候都用什么结构,
补充点:

  1. 比如 python 前端传过来的参数 ,有没有校验器,

  2. 路由权限问题,比去在 /user/ 下面只允许 登录用户访问等,

  3. 比如 大家习惯不习惯写 service 等。

可能大家没有明白我意思。MVC 这种经典的在应用开发中都会用,不管是强的函数语言还是重的面向对象语言。但是任何一种语言 都有自己经典的风格或者经得起时间检验设计规则,比如 java view->controller->service->dao。
简单点说,我现在写 python 或者看别人写的python 感觉代码冗余太多,写这不爽,完全没有工程化语言的爽。所以想看看 python 大牛是怎么写代码的!

如果你实在不知道从何说起 那就回答上面几个问题吧!

阅读 12.2k
7 个回答

分层跟语言没有关系,这是一种软件思想,分层可以达到高内聚,低耦合的效果

一般项目中至少得分两三层,比如第一层controller,第二层service,第三层db,这个得看具体项目,怎么分视场景和技术leader而定,反正是很灵活的

python+django 应该是MTV模式的(相当于java的MVC):model template view。
至于项目架构、代码逻辑,确实是反应一个程序员能力的地方,很少有人写的代码能被大多数人接受。因为每个人都或多或少有自己的开发习惯,大多数人拿到别人的代码,第一感觉通常都是:这都写的啥玩意,这么乱呢。

除非你从零开始,不然类似于django,flask之类的框架其实结构已经帮你搭好了,或者一些第三方的plugin也能辅助解决问题。pyhton牛逼的地方就在于你可以一直站在巨人的肩膀上,比如pypi,如果一定要自己来,那就得视具体情况而定了,在最早写python的时候写的乱很正常,因为不知道有更简洁的语法或者已经很成熟的第三方库,重构永远都是进行中的日常

关于你补充的几点:这些和python语言没有半毛钱关系,顶多只能说框架本身的问题或者是写代码的人的习惯风格,如果你看深入了解python的web框架,你会发现分为lightweighted或full-stack,轻量级顾名思义缺少一些附加功能,全栈则一定能满足你的要求。python有个笑谈:基于pyhton的web框架比python的关键字都多。所以你的补充点,我觉得只是不熟悉罢了。如果真有这么多问题,instgram,dropbox等等的公司肯定更着急

比如python 前端传过来的参数 ,有没有校验器,

Python 代码菜。(当然,硬要扣“检验器”这类概念,那就是“写java的人菜”)

路由权限问题,比去在/user/ 下面只允许 登录用户访问等,

准确说,路由不一定有权限,权限应该是加在某个“合适的地方”。并且,权限本身也是“分层”的。这里的设计,是根据业务,根据代码组织方式来看的。

比如 大家习惯不习惯写service等。

写 java 的人菜。(不能说菜,只能说,没理解本质)

首先回答楼主的几个问题,由于django用的比较多,先从django说起。
1、现在常用的py web框架有django、flask、tornado等,django是遵循MTV设计的,Model是做所有db相关的业务,比如ORM等。T是template,template意思是前端展示模块,主要是一些js css static html模版静态资源,而你view层就是业务层,你可以在view层写逻辑代码,设计到数据库查询或者数据过滤的全部走model,你谈到的校验,其实是放在model层可以做的,比如django提供了form组件。
2、你说的应该是路由的权限如何细粒度控制,可以参考django-rest-framwork框架,里面关于permission这块已经比较完善了
3、django框架里是没有service层的,本身django的设计就是快速、敏捷开发而生,他的model和view的解耦几乎没有考虑,因为在开始之初就已经设计了多app支持,如果你有其他事物可以单独建立app,所以在model的通用性看来,django的确是没有做到很好。
说一个现身例子,以前组里没有充分重视这个设计,随着app增多,开发人员增多,就发现很多混乱的地方,现在已经努力将MTV模式尽量改成MVC模式。
望采纳,谢谢!

我用Python都是做数据分析,不需要分层……

曾经有一个项目的小伙伴使用service层,因为他之前是一个java程序员。

但是自己认为的加一层其实效果并不是特别好。

我个人感觉没有必要。

另外,django的管理器用来处理表一级的结构,model处理记录级的结构没什么问题,我觉得挺好。当然,我没做过特别大的系统。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题