摘要
在这篇文章里,我将以反模式的角度来直接讨论Django的低级ORM查询方法的使用。作为一种替代方式,我们需要在包含业务逻辑的模型层建立与特定领域相关的查询API,这些在Django中做起来不是非常容易,但通过深入地了解ORM的内容原理,我将告诉你一些简捷的方式来达到这个目的。
概览
当编写Django应用程序时,我们已经习惯通过添加方法到模型里以此达到封装业务逻辑并隐藏实现细节。这种方法看起来是非常的自然,而且实际上它也用在Django的内建应用中。
1 |
>>> from django.contrib.auth.models import User |
2 |
>>>
user = User.objects.get(pk = 5 ) |
3 |
>>>
user.set_password( 'super-sekrit' ) |
这里的set_password就是一个定义在django.contrib.auth.models.User模型中的方法,它隐藏了对密码进行哈希操作的具体实现。相应的代码看起来应该是这样:
1 |
from django.contrib.auth.hashers import make_password |
3 |
class User(models.Model): |
7 |
def set_password( self ,
raw_password): |
8 |
self .password = make_password(raw_password) |