开发过程中,发现新版的Django的细节变化,注意版本是Django 1.2.1。现在列出新的东西,纯粹个人理解,有纰漏的,希望看到的提出来,纠正。
多个数据的支持
新版的Django 1.2.1,正式加入同时多个数据库的支持。也是变化的亮点;这种变化有很多隐含的用法(虽然首次加入这样的功能,还有待完善,但以Django团队提供可用的东西,足够灵活的开发者进行多种的实际应用了),多个数据库支持,不仅仅受限于同种数据库数量,还可以同时选择多种数据库类型。比如项目可以同时使用mysql和postgres,sqlite3等;当然可以同时采用mysql两个数据库,一个是主数据库,一个备份数据库;或者想在开发环境中使用数据库B,部署环境使用数据库A,这时只需要修改一下数据库的别名,就能切换过来...总之,对于开发者来说,只要你想到用途,Django加入数据库的支持,都会对你有所帮助。简单记述一下用法:
默认下该版本开启了这个功能,看看setting.py 的配置
DATABASES = {
'default': {
'NAME': 'app_data',
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'USER': 'postgres_user',
'PASSWORD': 's3krit'
},
'users': {
'NAME': 'user_data',
'ENGINE': 'django.db.backends.mysql',
'USER': 'mysql_user',
'PASSWORD': 'priv4te'
}
}
.....
这时候你可能有疑问,如果我们要syncdb的时候,django会针对哪个数据库执行操作呢?根据实际的使用,如果没有指定数据库,django会选择别名为default的数据库来操作。
如果syncdb时要指定某个数据库:manage.py syncdb --database=users
对数据的查询 保存 删除 等操作,同理没有指定数据库,Django依然选择别人为default的数据库操作。
譬如查询数据库,指定某个数据库:Author.objects.using('users').all()。
using函数有多种用法,进行添加 修改操作的时候:p.save(using='users') user_obj.delete(using='users')
contrib模块的变化
Django1.2.1对contrib模块的改进,应该有很多,每次版本功能的确定,都发现不少关于contrib的trick。网站的注册登录,可能是最基本的功能。contrib模块改进了用户名规则,也就是说注册用户名,不再受限于 英文 下划线 数字,你还可以使用中文,和一些生僻的字符#$%^&*@. 这个也是很好的改进,你有没有想,拿email作为用户名呢?有需要就灵活发挥好了。如果觉得不妥,不必理会它,简单加上中文用户名支持就不错。
模板的变化
if 标签的改进,可能是受欢迎的亮点,if标签支持的运算符:布朗运算符 and or not,==,!=,<,>,<=,>=,in;注意值得注意的是布朗运算符,if 中 可以同时使用 and和or,或者多个and和or,and的优先级要比or高,{% if "bc" in "abcdef" %} 在Django保守的模板中使用,是不是有点酷。
模板的缓存应用,Django 1.2.1 也加入了模板的缓存,在setting.py 的配置:
带缓存的模板配置
TEMPLATE_LOADERS = (
('django.template.loaders.cached.Loader',(
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
),
)
没有带缓存的模板配置
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
注意加上缓存的版本,不建议在开发环境中使用,因为,你更改了模板的东西之后,可能不能及时看到修改部分的变化。只有你重启服务器的时候才能看到。有时候一时忘记这些,你肯定为之疯狂啊。
好了,就先介绍自己发现的东西。希望有新东西,再写出来。