Python世界中的Django学习探讨

开发 后端
经过长久的学习探讨,我确实也发现Python与其他语言及其框架等确实有一种与众不同的感觉,那么下面就一起进入Python世界吧。

下面详细说明Python世界中的django,这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行,本文并不是django的教程,而是ahuaxuan对django的一些见解。

可能有些不成熟的地方,希望大家不要吝惜手中的砖头。如果有人问我最喜欢django什么,我会耗不犹豫的告诉你是django的orm。这个想法的产生完全来自于我长时间来积累的对hibernate的“不满”,虽然从理智的角度来看,hibernate做的是非常的正确的,因为它并不是只针对互连网而产生的。它的主要市场应该还是在企业应用上。

不过把它用在互联网并非不可以,只不过大家更多的时候会选择ibatis之类,因为不知道hibernate的人总是会说hibernate没有ibatis快(其实我最烦这个,片面的比较是没有意义的)。

正是hibernate的目标是打造成java界一个全方位,全能的orm框架,所以的它学习曲线和使用的复杂度日益的提升,要完全掌握好hibernate不是一件容易的事情(不要告诉我你会点crud,知道点lazy load你就掌握好hibernate了)。

再回头来看django的orm,如果说要把hibernate说清楚需要800页的书,那么要把django的orm说清楚,200页就够了(事实上它的官方文档只有十几页的样子)。

下面我举一个我正在做的例子,这里有一个自关联的对象(事实上django的orm是基于model,这点和ror不太一样,有人跟我讲过ror是数据库驱动),这个对象有一个父对象,通常我们的菜单会定义成这样的对象,这样的菜单可以无限级向下扩展:

  1. class Category(models.Model):     
  2.     id = models.AutoField('id', primary_key=True)     
  3.     name = models.CharField(maxlength=50)     
  4.     code = models.CharField(maxlength=50)     
  5.     parentCategory = models.ForeignKey('self', 'id', null=True)     
  6.     enable = models.BooleanField()     
  7.          
  8.     def __str__(self):     
  9.         return self.name     
  10.          
  11.     class Admin:     
  12.         list_display = ('id', 'name', 'code', 'parentCategory')   

Python世界中又定义的Admin是为django的Admin模块服务的。 瞧,我们定义的域模型只需要这些代码就够了,models.Model是父对象。所有的model对象都需要继承这个对象,这个对象提供了很多常用的数据库方法,不过不是基于sql的,还是基于对象的,如同Criteria一样。下面列出常用的一些查询Category的方法。

当然django的orm提供了很多很常用的功能,这里不一一举例了,注意,这里我说的是提供了很多很常用的功能,至于hibenate中比较复杂的映射策略,在django中我并没有看到。

但是我反而高兴我没有在Python世界中找到这个功能,因为django本身的定位是快速的互连网开发,它不需要太多的关注这个领域很少出现的东西,这样带来的优点是学习曲线的降低和开发效率的提高。

【编辑推荐】

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解 决方案
  5. 浅析Python的GIL和线程安全
责任编辑:chenqingxiang 来源: 腾讯科技
相关推荐

2010-03-01 15:08:36

2020-01-15 12:43:51

人工智能机器学习工程师

2017-12-19 15:24:21

DjangoPythonOracle

2024-01-26 08:31:49

2010-04-16 16:41:53

rownum用法

2011-07-12 09:18:50

.NET

2011-06-11 22:09:06

NET联合体

2024-03-07 12:40:28

Python*args开发

2010-02-06 14:23:49

Android系统手机

2023-12-13 10:46:27

2014-07-31 13:13:33

2009-12-17 13:33:14

VS2005类

2023-10-23 12:35:36

Golang追加操作

2010-03-18 10:45:33

Python Djan

2019-05-15 13:48:17

PythonDjangoFlask

2022-03-31 10:05:32

JavaScriptInfinity变量

2011-03-22 10:31:57

Java

2010-03-10 19:36:08

Python djan

2009-07-01 09:43:40

WCF安全元数据

2024-10-15 16:01:19

SpringBoot缓存预热
点赞
收藏

51CTO技术栈公众号