将Python的Django框架与认证系统整合的方法

这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下

将Django与其他现有认证系统的用户名和密码或者认证方法进行整合是可以办到的。

例如,你所在的公司也许已经安装了LDAP,并且为每一个员工都存储了相应的用户名和密码。
如果用户在LDAP和基于Django的应用上拥有独立的账号,那么这时无论对于网络管理员还是用户自己来说,都是一件很令人头痛的事儿。

为了解决这样的问题,Django认证系统能让您以插件方式与其他认证资源进行交互。
您可以覆盖Diango默认的基于数据库的模式,您还可以使用默认的系统与其他系统进行交互。

指定认证后台

在后台,Django维护了一个用于检查认证的后台列表。 当某个人调用
django.contrib.auth.authenticate()
(如14章中所述)时,Django会尝试对其认证后台进行遍历认证。
如果第一个认证方法失败,Django会尝试认证第二个,以此类推,一直到尝试完。

认证后台列表在AUTHENTICATION_BACKENDS设置中进行指定。
它应该是指向知道如何认证的Python类的Python路径的名字数组。 这些类可以在你Python路径的任何位置。

默认情况下,AUTHENTICATION_BACKENDS被设置为如下:  
 

('django.contrib.auth.backends.ModelBackend',)

那就是检测Django用户数据库的基本认证模式。

AUTHENTICATION_BACKENDS的顺序很重要,如果用户名和密码在多个后台中都是有效的,那么Django将会在第一个正确匹配后停止进一步的处理。

编写认证后台

一个认证后台其实就是一个实现了如下两个方法的类: get_user(id) 和 authenticate(**credentials)


方法 get_user 需要一个参数 id ,这个 id 可以是用户名,数据库ID或者其他任何数值,该方法会返回一个 User
对象。

方法 authenticate 使用证书作为关键参数。
大多数情况下,该方法看起来如下:  
 

class MyBackend(object):

  def authenticate(self, username=None,
password=None):

    # Check the
username/password and return a User.



但是有时候它也可以认证某个短语,例如:  
 

class MyBackend(object):

  def authenticate(self, token=None):

    # Check the
token and return a User.



每一个方法中, authenticate 都应该检测它所获取的证书,并且当证书有效时,返回一个匹配于该证书的 User
对象,如果证书无效那么返回 None 。 如果它们不合法,就返回None。



Django管理系统紧密连接于其自己后台数据库的 User 对象。
实现这个功能的最好办法就是为您的后台数据库(如LDAP目录,外部SQL数据库等)中的每个用户都创建一个对应的Django
User对象。 您可以提前写一个脚本来完成这个工作,也可以在某个用户第一次登陆的时候在 authenticate
方法中进行实现。



以下是一个示例后台程序,该后台用于认证定义在 setting.py
文件中的username和password变量,并且在该用户第一次认证的时候创建一个相应的Django User
对象。    

from django.conf import settings

from django.contrib.auth.models import User, check_password

 

class SettingsBackend(object):

  """

  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

更多认证模块的后台, 参考Django文档。

将Python的Django框架与认证系统整合的方法的更多相关文章

  1. django之auth认证系统

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...

  2. Django组件之认证系统

      Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Dja ...

  3. Python的Django框架中的Context使用

    Python的Django框架中的Context使用 近期整理些Python方面的知识,一旦你创建一个 Template 对象,你能够用 context 来传递数据给它. 一个context是一系列变 ...

  4. django自定义user认证系统

    第一种,彻底推翻django的user认证系统,重新定义我们想要的字段 from django.contrib.auth.models import AbstractBaseUser,Permissi ...

  5. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  6. Python的Django框架中的Cookie相关处理

    Python的Django框架中的Cookie相关处理 浏览器的开发人员在非常早的时候就已经意识到. HTTP's 的无状态会对Web开发人员带来非常大的问题,于是(cookies)应运而生. coo ...

  7. 如何使用Python的Django框架创建自己的网站

    如何使用Python的Django框架创建自己的网站 Django建站主要分四步:1.创建Django项目,2.将网页模板移植到Django项目中,3.数据交互,4.数据库 1创建Django项目 本 ...

  8. Python的Django框架中的URL配置与松耦合

    Python的Django框架中的URL配置与松耦合 用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比 ...

  9. Django Authentication 用户认证系统

    一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说 ...

随机推荐

  1. RF 中一条用例执行失败,终止其他用例执行

    1. 需求: 执行某个测试套时,某条用例执行失败,则该用例下其他关键字不在执行(RF自带功能): 但实际情况下是 某条用例执行失败后,下面的用例再执行就没有意义了: 想满足某条用例执行失败,下面的用例 ...

  2. Mybatis之foreach批量插入

    1接口 public boolean insertMembersBatch(@Param("memberList") List<Members> members); @ ...

  3. 面试官:讲讲mysql表设计要注意啥

    内容时参考一个博主的,内容写的很好,就忍不住拿过来了,如遇到,请见谅 参考连接:https://www.cnblogs.com/rjzheng/p/11174714.html

  4. jquery头部高亮显示方法

    做网站都有头部导航栏,但导航栏的高亮显示一般都是后台技术人员做传参判断来显示高亮样式,今天来教大家一个用jquery来显示 废话不多说,直接上代码 第一步,在需要的页面中写入 <input ty ...

  5. 002_simulink中显示模块中的名字

    (一)Display--->Hide Automatic Names(√去掉)

  6. 010_IAR安装

    链接:https://pan.baidu.com/s/14qZh1Gxl32dD2TWdjEYP7Q提取码:yj65 复制这段内容后打开百度网盘手机App,操作更方便哦 里面有安装说明 (一)编辑界面 ...

  7. 通过自定义属性获取指定checkbox是否选中

    $("input[conferid='"+conferid+"']").is(':checked'); $("input[conferid='1234 ...

  8. bzoj 3398

    f[i]表示最后一个是公牛的方案数,=sigma(f[j])(j<i-k) 然后前缀和优化即可. #include <cstdio> #include <cstdlib> ...

  9. (2)打鸡儿教你Vue.js

    var obj = {} Object.defineProperty(obj, 'msg', { // 设置 obj.msg = "1" 时set方法会被系统调用 参数分别是设置后 ...

  10. 使用DRBD+KEEPALIVED来实现NFS高可用

    目录 一 DRBD介绍 二 DRBD的模式 三 DRBD的同步协议 四 实验环境 五 安装配置 关于脑裂(split-brain)处理 一 DRBD介绍 DRBD(Distributed Replic ...