django初探

本文探讨了Django框架中的Model概念,详细解释了ORM(对象关系映射)如何实现Model与数据库表之间的转换,并讨论了Model如何影响数据的显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近有项目需要用python,以前看过,但忘记得太快了,遂打算通过玩玩django来熟悉python。大家都说django非常适合快速开发,我做java web,所以很想知道django是实现快速开发的。
我打算实现对url的CRUD,在本文中记录下来容易出问题的地方,以备忘。

正文

在django的MVC中,M代表了Model类,用来定义基础bean和db操作;V则用django自有的template系统来代替,C则由非常自由灵活的ROOT_URLCONF来充当。并且django的哲学是:我为你准备好做web开发所需的所有组件,包括国际化、缓存、ORM、模板、安全等,你不需要其他的了!所以,用django会与ta提供的组件绑在一起,比如要用sqlalchemy来替换django的ORM框架就非常麻烦(这个我没试过)。

什么是Model

在django中,Model代表了Bean,同时也包括与数据库的各种操作。比如查找数据库中所有的Site,直接定义Site类:
class Site(models.Model)
然后调用Site.objects.all()就可以得到所有的Site。其中Site.objects,其实返回的是一个QuerySet对象,这个对象虽然不是list类型,但因其实现了__iter__()方法,所以可以像list一样遍历。
Model中需要定义属性,比如type = models.IntegerField(),表示其有个type属性,这个属性是一个Integer,django直接将Integer对应于数据库的int类型。而且Model不但可以对应数据库,甚至可以影响V。比如:type = models.IntegerField(choices=TYPE_CHOICES, default=1),表示type属性虽然是一个int,但在显示时,这个字段其实是一个单选下拉列表,而且默认显示第一个值。

django的ORM--Model和db table之间的互换

django提供了非常方便的ORM框架,不但可以做到不写SQL来做CRUD,还可以做到根据db tabel生成Model类,以及从定义的Model类生成db table。
django提供syncdb命令,可以自动检测项目内的Model,然后在数据库中生成相应的db table;相对应,inspectdb提供扫描数据库表,提供Model的源码(只是输出在标准输出中),但有一个问题就是inspectdb生成的Model源码,需要自己把里面Model定义的顺序理清楚。

Model如何进一步影响显示

django中本来是有Form类的,专门负责View和template,但Form跟Model之间没什么关系,尤其是很多情况下,Form和Model里的field定义都非常相似,增加了不少工作量,所以django提供了ModelForm类,这个类基于Model类,同时兼有Form类的功能,能将Model里的field直接在template里显示。
Form非常适合做添加、编辑这些功能,因为django的template中可以用form.as_table/form.as_ul/form.as_p来直接构造一个form,非常方便。
定义方式是:加入有个Site类作为Model,需要定义一个:
class SiteForm(ModelForm):
    class Meta:
        model = Site
可能这时,就有人会问:这种直上直上的方式,很不利于修改数据库或者修改View;很多时候你会听到:DAO,VO,DTO,POJO都应该独立分开!把DAO一致传递到VO的方式,即影响性能,又不方便开发。所以,django的ModelForm允许对Model中field的显示进行定制,比如:
1.可以用fields来表示要显示的fields列表;
2.可以用exclude来表示不显示的fields列表;
3.可以用widgets标签来定制field的显示方式;
(未完待续)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值