未提供项目描述
项目描述
django-switchuser
django-switchuser 允许管理员通过访问 /su 来轻松切换到其他账户。
假设
因为 django-switchuser 是一个快速项目,所以它确实做出了一些假设。
如果用户不允许su,则他们尝试访问 /su/ 或执行任何su相关操作时,将收到HTTP 404。
任何超级用户都可以切换到任何其他用户。如果这个假设不成立:你需要提交一个pull请求(提示:查看 django_switchuser/state.py)… 对不起 :(
兼容性
已测试与Django 1.8至1.10版本,应适用于更早的Django版本。
安装
pip install django-switchuser
将一些内容添加到 settings.py 中(注意:SuStateMiddleware 应该是列表中的 第一个 类;这保证了 request.su_state 总是可用的)
INSTALLED_APPS = ( ... "django_switchuser", ... ) MIDDLEWARE_CLASSES = ( "django_switchuser.middleware.SuStateMiddleware", ... ) TEMPLATE_CONTEXT_PROCESSORS = ( ... "django_switchuser.context_processors.su_state", ... )
在 urls.py 中添加一个条目(注意:你可以使用任何你喜欢的URL;su/ 只是一个方便的选择)
urlpatterns += patterns("", ... url(r"^su/", include("django_switchuser.urls")), ... )
启动服务器,通过访问 http://localhost:8000/su/ 检查一切是否正常工作 注意:如果当前登录的用户不允许su(默认情况下,只有管理员允许su),则将返回HTTP 404。
(可选)将条目添加到您的 base.html 模板中,这将显示一个方便的注销按钮
<html> <head>...</head> <body> ... {% include "su/statusbar.html" %} </body> </html>
(可选) 覆盖 SuState 以更好地适应您的应用程序。例如,要包含用户个人资料的字段,您可以像这样子类化 SuState(更详细的文档请见下文)
from django.contrib.auth.models import User from django_switchuser.state import SuState as DefaultSuState class SuState(DefaultSuState): def available_users(self): return User.objects.all()\ .select_related("profile")\ .order_by("profile__client_id") def user_long_label(self, user): return "%s (%s)" %(user.get_profile().client_id, user.username) def user_short_label(self, user): return "%s" %(user.get_profile().client_id, )
然后将其添加到您的 settings.py 文件中
SU_STATE_CLASS = 'myapp.su.SuState'
自己动手
自己动手非常简单。 SuStateMiddleware 和 su_state 上下文处理器为 request 添加了 su_state 属性,并在模板渲染上下文中添加了 su_state 变量。 su_state 是 django_switchuser.state.SuState 的实例,并具有以下属性
- SuState.is_active():
如果当前用户已切换,则返回 True。
- SuState.auth_user:
与请求关联的原始用户。例如,如果用户 admin 切换到 jane,则 su_state.auth_user 将为 admin。
- SuState.active_user:
已切换的用户,如果没有用户已切换,则为 None。例如,如果用户 admin 切换到 jane,则 su_state.active_user 将为 admin。
- SuState.can_su():
如果当前用户被允许切换,则返回 True。
- SuState.available_users():
返回一个 QuerySet,其中包含当前用户被允许切换到的 User。这可能很有用,可以覆盖此方法以在用户个人资料上执行 select_related()。
def available_users(self): return User.objects.all()\ .select_related("profile")\ .order_by("profile__client_id")- SuState.user_long_label(user):
返回用户的“长”标签,用于用户列表。这可能很有用,可以覆盖此方法以包含特定于您应用程序的信息。
def user_long_label(self, user): return "%s (%s)" %(user.get_profile().client_id, user.username)- SuState.user_short_label(user):
返回用户的“短”标签,用于状态栏和其他位置。这可能很有用,可以覆盖此方法以包含特定于您应用程序的信息。
def user_short_label(self, user): return "%s" %(user.get_profile().client_id, )- SuState.set_su_user_id(su_user_id):
如果 su_user_id 包含在 SuState.available_users() 中,则切换到具有 id su_user_id 的用户。
- SuState.set_su_user(su_user):
切换到 su_user 用户。不执行权限检查。
- SuState.clear_su():
还原到原始用户。
例如,如果您不喜欢默认的用户切换栏,您可以在 base.html 中添加自己的。
{% load switchuser %} {% load url from future %} {% if su_state.is_active %} <a href="{% url "su-logout" %}">deactive {% su_user_short_label su.active_user %}</a> {% elif su_state.can_su %} <a href="{% url "su-login" %}">switch user</a> {% endif %}
项目详情
django-switchuser-0.6.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3094095e05ccf2a1d7944e5bf17e13b8ca40a929c098dd8278d0d5ffaa45b81e |
|
MD5 | a87d3ce0e588ed4718c44c3a0dd6c5ce |
|
BLAKE2b-256 | 705e6e1ff17f04e3fa962a818ae6ff0ab44e22bb4507be922363e683c9fa1194 |
django_switchuser-0.6.1-py2-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d327686e5ebf3211178e3a902735768c5f8bdcce8f5e5df170682342f43deb05 |
|
MD5 | 87f04d9f502c6d12943b3e238c56cae2 |
|
BLAKE2b-256 | 9c409170120f913d4f9bb2dc86cb4106ce9eb2f26655fae20b278e831f337134 |