博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义登录后台(authentication backend)[转]
阅读量:4354 次
发布时间:2019-06-07

本文共 2251 字,大约阅读时间需要 7 分钟。

学习http://docs.djangoproject.com/en/dev/topics/auth/?from=olddocs#writing-an-authentication-backend记录authetication backend是一个类,实现了两个方法:get_user(user_id)与authenticate(**credentials).get_user函数有一个参数user_id,它可以是username,database ID或其他,返回一个User对象实例。authenticate方法有一个名为credentials的关键字参数。一般情况,它如下:class MyBackend:  def authenticate(self,username=None,password=None):    #检测username与password,然后返回一个User实例但也可以是身份验证令牌,如下:class MyBackend:  def authenticate(self,token=None):    #检测token返回一个User实例下面的例子实现功能为:username与password是在自己的settings.py文件中定义的,利用这个信息实现登录,返回一个Django User.from django.conf import settingsfrom django.contrib.auth.models import User,check_passwordclass SettingsBackend:    """    Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD.    Use the login name, and a hash of the password. For example:    ADMIN_LOGIN = 'admin'    ADMIN_PASSWORD = 'sha1$4e987$afbcf42e21bd417fb71db8c66b321e9fc33051de'    """    def authenticate(self, username=None, password=None):        login_valid = (settings.ADMIN_LOGIN == username)        pwd_valid = check_password(password, settings.ADMIN_PASSWORD)        if login_valid and pwd_valid:            try:                user = User.objects.get(username=username)            except User.DoesNotExist:                # Create a new user. Note that we can set password                # to anything, because it won't be checked; the password                # from settings.py will.                user = User(username=username, password='get from settings.py')                user.is_staff = True                user.is_superuser = True                user.save()            return user        return None    def get_user(self, user_id):        try:            return User.objects.get(pk=user_id)        except User.DoesNotExist:            return None在自定义backend中处理授权自定义认证后台提供了自己的权限。user model将通过委托实现了(get_group_permissions(),get_all_permission(),has_perm()与has_module_perms())这些函数authentication backend处理权限查询。代码如下:class SettingsBackend:  ...  def has_perm(self.user_obj,perm):    if user_obj.username == settings.ADMIN_LOGIN:      return True    else:      return False

原文:http://plq168.blog.163.com/blog/static/53101462201092711170704/

转载于:https://www.cnblogs.com/yiki/archive/2013/04/25/3042686.html

你可能感兴趣的文章
linux下使用dd命令写入镜像文件到u盘
查看>>
001---进程
查看>>
视频人脸检测——OpenCV版(三)
查看>>
php获取来访者在搜索引擎搜索某个关键词,进入网站
查看>>
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>
2018-2019-1 20165234 20165236 实验二 固件程序设计
查看>>
IDEA的GUI连接数据库写入SQL语句的问题总结
查看>>
Xpath在选择器中正确,在代码中返回的是空列表问题
查看>>
leecode第一百九十八题(打家劫舍)
查看>>
【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
查看>>
07-3. 数素数 (20)
查看>>
写一个欢迎页node统计接口Py脚本(邮件,附件)-py
查看>>
计算两个日期之间的天数
查看>>
山东省第六届蓝桥杯 ///标题:三羊献瑞//c/c++组
查看>>
Unity火炬之光进度
查看>>
Android关于buildToolVersion与CompileSdkVersion的区别
查看>>
袋鼠云日志,日志分析没那么容易
查看>>
缓存穿透 缓存雪崩 缓存并发
查看>>
MySQL表的操作
查看>>
pt-table-checksum解读【转】
查看>>