Use*_*ser 12 python django django-authentication django-1.7
文档:https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.login
当您手动登录用户时,必须在调用login()之前调用authenticate().authenticate()在用户上设置一个属性,注意哪个身份验证后端成功验证了该用户(有关详细信息,请参阅后端文档),稍后在登录过程中需要此信息.如果您尝试直接登录从数据库中检索的用户对象,则会引发错误.
那么为什么authenticate和login2个独立的功能呢?据我所知,authenticate只需验证登录信息即可.login将获取用户对象并设置cookie.我认为它们是分开的唯一原因是因为也许你可以放入不同的用户对象,比如用户有2个帐户合并.也许您想先验证电子邮件地址.这就是为什么它们是单独的功能login而不包装authenticate?
这是一个单一责任原则的问题:一个方法应该做一个合乎逻辑的事情.正如您自己所说,这两个步骤在逻辑上是截然不同的:
authenticate只需验证登录信息.login将获取用户对象并设置cookie
为了进一步说明,身份验证是一次性检查,并不意味着登录会话.登录会话意味着一段时间,在此期间用户可以自由地执行各种受限活动,而无需重复进行身份验证检查.
有时您可能需要对用户进行身份验证(验证他们是否是他们所说的人)而不登录.如果将这两个功能合并为一个,您将无法做到这一点,即使您只想做一个时间检查,你必须登录,创建一个没有意义的会话.由于这些目的明显不同,因此有两种方法是完全合理的.
分离也使测试更容易.如果您编写新的身份验证后端,您可能希望能够测试单独的身份验证步骤是否有效,而不必担心整个登录系统的工作方式,这不是您的后端的责任.
将方法分解为最小的逻辑独立元素是明智之举,有许多好处.
| 归档时间: |
|
| 查看次数: |
2868 次 |
| 最近记录: |