注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云淡风轻

云淡风轻近午天,傍花随柳过前川。

 
 
 

日志

 
 

django的验证  

2008-05-19 14:57:43|  分类: 格物致知 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

django里提供了admin模块,提供了一些用户管理的类和方法。

也可以在django的验证模块里,添加自己的验证方法。

方法是,在settings.py里添加:

 87 AUTHENTICATION_BACKENDS = (
 88     'django.contrib.auth.backends.ModelBackend',
 89     'game_data_mining.statistics.utils.UrsBackend',
 90 )

88行是默认的,89行是自己的另外的验证。Backend类需要实现两个方法:一个是authenticate,另一个是get_user。

使用的时候,

  8 from django.contrib.auth import authenticate

 27             user = authenticate(username=username, password=password)

调用autheticate的时候,django就会逐个backend尝试调用authenticate方法,如果有一个返回了User对象,就表示验证成功,如果所有的authenticate都返回None,就表示验证失败。

这个设计是很好的,不过自带的ModelBackend类的autheticate方法却有个问题,

看一下django/contrib/auth/backends.py里:

  3 class ModelBackend:
  4     """
  5     Authenticate against django.contrib.auth.models.User
  6     """
  7     # TODO: Model, login attribute name and password attribute name should be
  8     # configurable.
  9     def authenticate(self, username=None, password=None):

可以看到,参数里写死了两个参数,username和password。但是我自己的backend的authenticate函数需要另外的参数,ip,用这些参数访问一个远程验证的服务器,如果返回正确,我就添加到本地的数据库里,下次就不用访问远程服务器了。

这样的话,就要这样使用了:

 27             user = authenticate(username=username, password=password)\
 28                 authenticate(username=username, password=password, ip=request.META['REMOTE_ADDR'])

  评论这张
 
阅读(91)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017