django应用程序允许超级用户模拟其他用户。

django-impersonate的Python项目详细描述


django模拟 nlshield

<表> < COL/> < COL/> <正文> 信息:允许超级用户"模拟"其他非超级用户帐户的简单应用程序。 版本:1.4.1 作者:Peter Sanchez( http://www.petersanchez.com ) < > <表>

python/django支持

  • Django版本1.11-2.2的Python3.6+

注意: 从1.4版开始,我们只正式支持Python3.6+和Django1.11+。但是,旧版本的python和django应该可以继续工作。我们不能保证。

依赖关系

  • 取决于您使用django.contrib.session框架的项目。

注意:

  • 版本1.4现在正式支持Python3.6+和Django 1.11+
  • 版本1.3添加设置格式更改。 有关详细信息,请参阅设置部分。
  • 版本1.0默认情况下会添加新功能。 请参阅"禁用日志设置"选项。
  • 如果您需要在django早于1.8的版本中使用它,请使用django impersonate==1.0.1
  • 如果您需要在django早于1.7的版本中使用它,请使用django impersonate==0.9.2
  • 0.9.2版部分还原0.9.1版中已完成的工作。 这是因为在 问题17中处理请求所做的工作打破了所有以前的版本。 问题24 已打开,并在0.9.2中发布了解决方案。请参阅新的"使用http参考设置"选项。
  • 如果您需要在django早于1.4的版本中使用它,请使用django impersonate==0.5.3

安装

:P/<

pip install django-impersonate

基本手动安装:

$ python setup.py build
$ sudo python setup.py install

替代安装(手动):

将模拟目录放在python路径中。在python中安装site packages目录或设置$pythonpath环境变量以包含模拟目录所在的目录。

使用

  1. 将"模拟"添加到已安装的应用程序中

  2. 将"impersonate.middleware.impersonatemiddleware"添加到您的中间件类中

  3. 在URL结构中的某个位置添加"impersonate.url"。例子:

    urlpatterns = patterns('',
        url(r'^admin/', include(admin.site.urls)),
        url(r'^impersonate/', include('impersonate.urls')),
        ... (all your other urls here) ...
    )
    

注意: ImpersonationMiddleware类应该放在 django.contrib.auth 中间件类之后

功能性

您现在可以通过点击以下路径模拟另一个用户:

< Buff行情> /模拟/<;用户ID>;/

将"用户ID"替换为要模拟的用户的用户ID。

当处于模拟"模式"时,request.user对象将具有 "is_impersonate"属性设置为true。所以如果你想登记 模板或视图,您只需执行类似于…:

{% if user.is_impersonate %} .... {% endif %}

原始用户可用作request.impersonator

{{ request.user }} ({{ request.impersonator }})

真正的用户可用作 请求。真正的用户 调用getattr(请求'impersonator',re任务用户)

assert request.real_user == getattr(request, 'impersonator', request.user)

您可以使用reverse()或{%url%}模板标记引用此url 作为"模拟开始",需要用户ID的参数。示例:

reverse('impersonate-start', args=[user.id])
reverse('impersonate-start', uid=user.id)

要删除模拟,请单击以下路径:

< Buff行情> /模拟/停止/

您可以使用reverse()或{%url%}模板标记引用此url 作为"模拟停止"。当您调用此URL时,将重定向到 用来开始模拟用户的页面(例如,一些搜索结果 或用户列表)。

列出您可以转到的所有用户:

< Buff行情> /模拟/列表/

这将呈现模板"impersonate/list_users.html",并将传递 上下文中的以下内容:

  • 用户-查询所有用户的设置
  • paginator-django paginator实例
  • page-对象的当前页(来自paginator)
  • 页码-当前页码,默认为1

您可以使用reverse()或{%url%}模板标记引用此url 作为"模拟列表"。

要搜索所有用户,请转到:

< Buff行情> /模拟/搜索/

这将呈现模板"impersonate/search_users.html",并将传递 上下文中的以下内容:

  • 用户-查询所有用户的设置
  • paginator-django paginator实例
  • page-对象的当前页(来自paginator)
  • 页码-当前页码,默认为1
  • 查询-输入的搜索查询

视图将期望一个get请求,并查找传递的"q"变量。 如果存在,它将搜索值为"q"的用户条目。默认值 搜索的字段是:

user.user name,user.first戋name,user.last戋name,user.email

您可以使用reverse()或{%url%}模板标记引用此url 作为"模拟搜索"。

允许某些用户模拟其他用户

通过添加 自定义允许设置选项,您可以选择仅允许某些非超级用户和非职员用户进行模拟。创建一个接受请求对象的函数,根据您的规则,如果允许用户模拟或不允许用户模拟,则返回true。

限制用户可以模拟的用户

通过(可选)设置自定义用户查询集选项,您可以控制可以模拟哪些用户。它接受用户的请求对象,并返回用户的queryset。当搜索要模拟的用户、列出要模拟的用户以及尝试开始模拟时,都会使用此选项。

信号

如果希望挂接到模拟会话(例如,为了 审计访问),django impersonate在 会话的开始和结束:

  • 会话开始-调用模拟视图时发送
  • 会话结束-调用模拟的"停止"时发送

这两个信号发送相同的参数:

  • sender-这是django信号要求,并且始终设置为none
  • 模拟者-对进行模拟的人的用户对象的引用
  • 模拟-对被模拟人的用户对象的引用
  • 请求-调用模拟的django httprequest对象

包含请求对象,因为它包含您可能希望的相关信息 要审核-例如客户端IP地址、用户代理字符串等。

有关如何连接信号的示例,请参见相关的测试- 测试成功模拟信号

nb只有在模拟程序显式结束时才会触发会话结束信号 会话。

设置

以下设置可用于Django模拟。所有设置应该是 在指定给名为"模拟"的属性的字典中设置为变量

例如:

IMPERSONATE = {
    'REDIRECT_URL': '/some-path/',
    'PAGINATE_COUNT': 10,
}

注意: 这是一种新格式。旧格式现在已被弃用,对旧格式的支持将在以后的版本中删除。

以下是可用的选项…

< Buff行情> 重定向网址

这是您选择要重定向到的URL 模拟其他用户。如果不存在,它将检查 login_redirect_url设置,如果两者都不是,则返回到"/" 礼物。值应该是包含重定向路径的字符串。

< Buff行情> 使用http参考资料

如果设置为true,则应用程序将尝试将您重定向到 当您停止 后模拟开始时所处的url 模仿。例如,如果您在url'/foo/bar/'时 您开始模拟用户,一旦结束模拟,您将 被重定向回"/foo/bar/"而不是中的值 重定向URL。

值应为布尔值(真/假),默认为假

< Buff行情> 分页计数

这是使用列表或 搜索视图。默认为20。值应为整数。

< Buff行情> 需要超级用户

如果设置为true,则只有设置了"is_superuser"的用户 如果为true,则允许模拟其他用户。默认值为false。 如果为false,则任何"is-staff"用户都可以模拟其他用户 用户,

注意: 无论此设置如何,"is_staff"用户都将 不是 允许模拟"是超级用户"用户。

值应为布尔值(真/假)

如果设置了自定义允许,则使用该自定义函数,并且 忽略此设置。

< Buff行情> 允许超级用户

默认情况下,无法模拟超级用户;此设置允许这样做。

注意: 即使是这样,也只有超级用户才能模拟其他超级用户, 不考虑"需要超级用户"的值。

值应为布尔值(true/false),默认值为false。

< Buff行情> uri_排除项

设置为URL模式的列表/元组,如果匹配,则用户 模拟未完成。默认为:

(r'^admin/',)

如果不想使用默认排除项,请设置 设置为emply list/tuple。

< Buff行情> 自定义用户查询集

表示函数的字符串(例如"module.submodule.mod.function_name") 这允许对用户可以模拟的用户进行更细粒度的控制。 它接受一个参数,即请求对象,并应返回一个queryset。只有 可以模拟此QuerySet中的用户。

如果请求有未经授权的用户,则不会调用此函数, 仅当允许用户模拟时才会调用和(cf. 需要超级用户和自定义允许。

无论此函数返回什么,用户都不能模拟 超级用户,即使返回的queryset中有超级用户。

它是可选的,如果不存在,用户可以模拟任何用户 (即默认值为user.objects.all())。

< Buff行情> 自定义允许

表示函数的字符串(例如"module.submodule.mod.function_name") 这允许对谁可以使用模拟进行更细粒度的控制。它 接受一个参数,即请求对象,并应返回true以允许 弹劾。无论此设置如何,用户都必须登录到 冒充。如果使用此设置,则忽略"要求超级用户"。

它是可选的,如果它不存在,那么之前关于超级用户的规则 并要求超级用户申请。

< Buff行情> 重定向字段名

一个字符串,表示包含 模拟用户后重定向到的URL。这可能是你sed重定向 在模拟用户后转到自定义页。例子:

pip install django-impersonate
0

若要在模拟用户后始终返回当前页,请使用"请求"。路径:

< Buff行情>

<;a 下一步{{request.path}">;切换 用户<;/a>;

搜索字段

用于生成搜索查询的用户模型字段数组。默认值为 [用户名字段,'名字','姓氏','电子邮件']。如果用户模型没有 username_field属性,返回到"username"(<;django 1.5)。

< Buff行情> 查找类型

一个字符串,表示用于按查询搜索用户的SQL查找类型 上面的字段。默认为"icontains"。

< Buff行情> 禁用日志记录

可用于禁用模拟会话日志记录的bool。通过 默认情况下,每个模拟 会话开始 信号将创建一个新的 ImpersonationLog 对象,它在 相应的会话结束信号。

它是可选的,默认为false(即启用了日志记录)。

< Buff行情> 最大筛选大小

管理列表筛选器中可接受的最大项目数。如果 项目超过此值,则移除筛选器(仅显示全部)。这是用的 通过"按模拟者筛选"筛选。

它是可选的,默认为100。

版本1.3之前的设置

在版本1.3之前,设置未存储在字典中。他们每个人都是一个独立的环境。目前,您仍然可以为每个选项使用单独的设置。如果存在,它们将取代 模拟字典中的任何设置,还将发出设置格式已更改的警告,您应将项目设置转换为使用新字典格式。

所有字典选项都可以用作单独的设置,只需在名称前加上 impersonate\u 即可。例如,下面是上面的字典示例,它是等效的旧样式设置。

新格式:

IMPERSONATE = {
    'REDIRECT_URL': '/some-path/',
    'PAGINATE_COUNT': 10,
}

已弃用(旧)格式:

pip install django-impersonate
2

管理员

从版本1.3开始,django impersonate现在包含一个helper admin mixin,位于 imepersonate.admin.useradminimpersonatemixin 中,包含在用户模型的modeladmin中。这提供了从用户模型的django管理列表视图模拟用户的直接链接。使用它非常简单,但是如果您使用的是默认的 django.contrib.auth.models.user 模型,则需要在注册自己的模型之前注销旧的modeladmin。

userAdminImpersonateMixin 有一个名为 open_new_window 的属性,该属性默认为false 。如果设置为true,则直接在"管理"中单击"模拟"链接时,将打开一个新窗口以启动新的模拟会话。

下面是一个示例:

pip install django-impersonate
3

测试

你需要安装工厂男孩才能运行测试。要安装,请使用:

pip install django-impersonate
4

注意: 这是python 3.3+当前不需要的。有关factory_boy的更多信息,请参见:https://github.com/dnerdy/factory_boy" rel="nofollow">https://github.com/dnerdy/factory_boy

在repo签出中,确保您的pythonpath中有django并运行:

pip install django-impersonate
5

要获得测试覆盖率,请使用:

pip install django-impersonate
6

如果您感到厌烦并想测试所有支持的环境,则需要进行毒理学测试。

pip install django-impersonate
7

你应该看到:

pip install django-impersonate
8

版权和保修

所有文档、库和示例代码 版权所有2011 Peter Sanchez<; petersanchez @ gmail . com >;。图书馆和 示例代码根据BSD许可证的条款提供给您 包含在包含的文件bsd-license中。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于测试失败,java testcontainers maven构建失败   java实现jacobi算法实现laplace方程   java中的多线程:如何在不等待所有线程使用ExecutorService完成任务的情况下终止所有线程的执行?   java Hello World不在Android Studio 3中工作   ubuntu Tomcat7的Java版本不正确   java Javafx内存泄漏   对于手动实现的Spring数据存储库方法,我应该使用Java8默认方法吗?   googleappengine中的java添加过滤查询   html当使用JSOUP库在Java中读取标签时,如何保留标签(如<br>、<ul>、<li>、<p>等)的含义?   编码为什么jasper生成的报告在Java中不显示西里尔语(保加利亚语)?   java有没有办法隐藏当前位置和jdk动作?   java找出编译原型文件的版本   有没有办法在运行时更改java方法的访问修饰符?   语法字符串。。。Java中的参数   java数组元素在添加其他元素时会相互覆盖   eclipse中的java GWT项目   java如何为spring rest模板请求将动态json属性名映射到jackson   java无法在Windows 10上找到特定的JDK   在xml字符串和java字符串之间提取正则表达式子字符串