它可以根据员工状态和超级用户状态进行过滤,但是组呢?
我想让相同的用户会话跨越:site.com
sub1.site.com
sub2.site.com
如何在Django中执行此操作?使用默认的auth用户包,似乎要求用户每次使用不同的会话登录所有3个站点.他们如何共享相同的登录cookie和会话ID?
更新:使用settings.py中的SESSION_COOKIE_DOMAIN值似乎可以在生产站点上运行,但它在localhost/dev服务器上对我不起作用.你如何让它为localhost子域工作?当我将SESSION_COOKIE_DOMAIN更改为生产网站名称或".localhost"时,django auth登录完全停止工作(我无法登录,在localhost上没有创建cookie.)
我想实现第二个管理站点,它提供主要管理站点的一部分功能.这是可能的,并在Django文档中进行了描述
但是,我想限制主要管理网站上的访问权限.某些用户可以访问第二个站点,但不能访问主站点.
为了实现该功能,我希望这些用户不在员工中(is_staff = False)并重写 AdminSite.has_permission
class SecondaryAdminSite(AdminSite):
def has_permission(self, request):
if request.user.is_anonymous:
try:
username = request.POST['username']
password = request.POST['password']
except KeyError:
return False
try:
user = User.objects.get(username = username)
if user.check_password(password):
return user.has_perm('app.change_onlythistable')
else:
return False
except User.DoesNotExist:
return False
else:
return request.user.has_perm('app.change_onlythistable')
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种方法不起作用.用户可以登录,但在辅助管理站点中看不到任何内容.
这种方法有什么问题?知道如何实现这个功能吗?
提前致谢
我们正在考虑实施投票系统(向上,向下投票),而不使用任何类型的凭证 - 没有应用账户,也没有OpenID或任何类型的.
关注点:
我的问题:
如果您有任何问题可以帮助您形成对这些问题的答案,请在评论中提问!
因为我正在使用自己的身份验证和授权系统(使用我自己的用户/权限模型),所以我想完全禁用此标准应用程序Django.
我试着从删除相关的行MIDDLEWARE_CLASSES和
INSTALLED_APPS,但是当我使用的执行syncdb命令,仍然被创建来使用默认的验证系统中的默认表.有没有办法防止这种情况发生?我的主要问题是标准表覆盖了我想用于我自己的auth系统的表.
INSTALLED_APPS = (
'django.contrib.sessions',
'form_utils',
'org',
'auth',
'entities',
)
Run Code Online (Sandbox Code Playgroud)
我也试过用项目包预先添加应用程序,这没有任何效果.
可能还有另一种我忽视的环境吗?尽管我努力,可能导致这些标准应用程序启用的其他可能变量?
我也没有使用内置的管理系统,所以我认为这不是一个问题.
附加信息:我最近将Django 1.2升级到1.3.这可能是我问题的原因吗?
编辑:显然,这个问题是由Django 1.3的变化引起的.相关的门票在这里:http://code.djangoproject.com/ticket/15735
任何提示?
当删除发挥作用时,我对OneToOneField的工作方式感到有些困惑.我能找到的唯一准权威信息来自django-developers上的这个帖子:
我不知道你是否发现了这个,但是删除工作是朝着一个方向发展的,但不是你想要的方向.例如,使用您在另一条消息中发布的模型:
Run Code Online (Sandbox Code Playgroud)class Place(models.Model): name = models.CharField(max_length = 100) class Restaurant(models.Model): place = models.OneToOneField(Place, primary_key=True)如果您创建了与其关联的地方和餐厅,则删除该餐厅将不会删除该地点(这是您在此处报告的问题),但删除该地点将删除该餐厅.
我有以下型号:
class Person(models.Model):
name = models.CharField(max_length=50)
# ... etc ...
user = models.OneToOneField(User, related_name="person", null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
它的成立这种方式让我可以轻松地访问person从User使用实例user.person.
但是,当我尝试删除User管理员中的记录时,自然它会向后传递到我的Person模型,正如线程所讨论的那样,显示了以下内容:
您确定要删除用户"JordanReiter2"吗?以下所有相关项目将被删除:
不用说,我也没有要删除的Person记录,或任何其后代!
我想我理解逻辑:因为Person记录中的OneToOne字段中有一个值,删除User记录会user_id在数据库的列中创建一个错误的引用.
通常,解决方案是切换OneToOne字段所在的位置.当然,这是不可能的,因为User对象几乎是由它设定的django.contrib.auth.
有没有办法防止删除级联,同时仍然有一个直接的方式来访问人user?是创建扩展版本的模型的唯一方法吗?Userdjango.contrib
我改变了模型名称,所以希望它现在更清晰了.基本上,有成千上万的人事记录.不是每个人都有登录,但如果他们这样做,他们只有一个登录.
我目前正在开发一个Django站点,用户可以在其中拥有多个"帐户",这样他们就可以在通过站点进行交互时在不同的公共配置文件之间无缝切换.我正在设计的内容可能会吸引每人多次注册(并且不会气馁),我只想提供这样一种方式,即用户可以将配置文件捆绑在一起,轻松切换并且只需要记录一次.
到目前为止我想到的两种方法包括:
一个(User型号+ SiteProfile型号)对和PublicProfile每个人的许多模型.AUTH_PROFILE_MODULE设置为指向SiteProfile模型.这个问题是我不能轻易使用每个对象的权限:这些权限将设置在User对象而不是公共配置文件上,因此当用户伪装成"公共配置文件"时,查看"PublicProfileA"页面的权限也将被应用. "PublicProfileB".
每人一个Account模型和许多(User模型+ UserProfile模型)对.AUTH_PROFILE_MODULE设置为指向UserProfile模型.这将具有按预期工作的权限的额外好处,并且我可以简单地具有自定义后端,其将通过如果用户当前Account以与外键具有相同对象的另一用户登录来切换用户.通过读取Account对象上的字段会发生身份验证,这意味着password每个User对象上的字段都将被浪费.
如上所述,但是继承Account自User.我曾被强烈反对这一点(原因尚不清楚).
这有什么陷阱或更好的方法吗?最终,我应该使用内置User模型作为每人一个模型来识别一组面向公众的配置文件(这些配置文件将FK返回到User对象),或者将其用作配置文件本身,链接回来Account为每个人一个对象?
django database-relations django-models django-authentication
我正在使用Tastypie 0.9.11并且我希望允许未经身份验证的用户获得对API的只读权限,同时,如果用户使用API密钥身份验证进行身份验证,则该用户可以执行添加/更改/删除操作那些相同的模型.
使用API密钥身份验证+ Django授权不满足要求1(未经身份验证的用户根本无法访问API).使用无身份验证不允许用户使用API密钥进行身份验证(不满足要求2).
我打赌有一种简单的方法来实现这种行为,请帮助.
非常感谢,Yuval Cohen
我想知道auth.logout是否清除了会话数据,或者我必须自己做.
from django.contrib.auth.decorators import login_required
from django.contrib import auth
@login_required
def logout(request):
auth.logout(request)
return redirect('base:homepage')
Run Code Online (Sandbox Code Playgroud)
像这样......
from django.contrib.auth.decorators import login_required
from django.contrib import auth
@login_required
def logout(request):
for sesskey in request.session.keys():
del request.session[sesskey]
auth.logout(request)
return redirect('base:homepage')
Run Code Online (Sandbox Code Playgroud)
谢谢!
django session-variables django-authentication django-sessions
django中的会话身份验证是否与cookie无关?如果用户在其浏览器上禁用了cookie,它会起作用吗?如果用户的浏览器已禁用Cookie,django是否应警告用户?
django ×10
django-admin ×2
python ×2
cookies ×1
django-forms ×1
one-to-one ×1
sessionid ×1
tastypie ×1
voting ×1