django应用程序允许超级用户模拟其他用户。
django-impersonate的Python项目详细描述
django模拟
<表> < 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环境变量以包含模拟目录所在的目录。
使用
将"模拟"添加到已安装的应用程序中
将"impersonate.middleware.impersonatemiddleware"添加到您的中间件类中
在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-impersonate0
若要在模拟用户后始终返回当前页,请使用"请求"。路径:
< 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-impersonate2
管理员
从版本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-impersonate3
测试
你需要安装工厂男孩才能运行测试。要安装,请使用:
pip install django-impersonate4
注意: 这是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-impersonate5
要获得测试覆盖率,请使用:
pip install django-impersonate6
如果您感到厌烦并想测试所有支持的环境,则需要进行毒理学测试。
pip install django-impersonate7
你应该看到:
pip install django-impersonate8
版权和保修
所有文档、库和示例代码 版权所有2011 Peter Sanchez<; petersanchez @ gmail . com >;。图书馆和 示例代码根据BSD许可证的条款提供给您 包含在包含的文件bsd-license中。