回答
只需通過User
上的groups
屬性即可訪問羣組。
from django.contrib.auth.models import User, Group
group = Group(name="Editor")
group.save() # save this new group for this example
user = User.objects.get(pk=1) # assuming, there is one initial user
user.groups.add(group) # user is now in the "Editor" group
然後user.groups.all()
回報[<Group: Editor>]
如果您需要在同一組中的用戶列表,你可以這樣做,而不是:
from django.contrib.auth.models import Group
users_in_group = Group.objects.get(name="group name").user_set.all()
,然後檢查
if user in users_in_group:
# do something
來檢查用戶是否在組中。
這對於超過少量用戶的網站來說效果並不好,因爲它會加載大型子集用戶表每次運行時將其存儲到內存中。 – bhuber 2013-10-08 16:17:43
以防萬一,如果你想檢查用戶的組所屬的預定義羣組列表:
def is_allowed(user):
allowed_group = set(['admin', 'lead', 'manager'])
usr = User.objects.get(username=user)
groups = [ x.name for x in usr.groups.all()]
if allowed_group.intersection(set(groups)):
return True
return False
[僅供參考,您可以在{usr.groups.all()}](http://docs.python.org/2/tutorial/datastructures.html#sets)中說x {x.name} – Kos 2014-03-21 14:06:25
你用戶對象通過多對多關係聯繫到集團對象。
您可以將過濾方法,從而適用於user.groups。如果你想檢查一個給定用戶屬於超過
def is_member(user):
return user.groups.filter(name='Member').exists()
:
因此,要檢查一個給定用戶在某一組(「成員」的例子),只是這樣做一個給定的羣體中,使用__in運營商,像這樣:
def is_in_multiple_groups(user):
return user.groups.filter(name__in=['group1', 'group2']).exists()
注意,這些功能可以與@user_passes_test裝飾被用來管理你的意見訪問:
from django.contrib.auth.decorators import login_required, user_passes_test
@login_required
@user_passes_test(is_member) # or @user_passes_test(is_in_multiple_groups)
def myview(request):
# Do your processing
希望這有助於
我不確定django的數據庫訪問的內部工作原理,但是這似乎比其他一些建議更有效率,比如讓一個組中的所有用戶和組中的一個標準python用戶(反之亦然)。 – brianmearns 2013-12-12 15:32:45
感謝您的評論! – Charlesthk 2013-12-12 17:48:16
你不需要在結尾添加`.exists()`來返回一個布爾值嗎?否則,`is_member()`和`is_in_multiple_groups()`將返回一個`QuerySet`,它可能不會給出想要的結果。 – 2014-09-17 06:34:47
在一個行:
'Groupname' in user.groups.values_list('name', flat=True)
此計算結果爲True
或False
。
你只需要一條線:
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.groups.filter(name='companyGroup').exists())
def you_view():
return HttpResponse("Since you're logged in, you can see this text!")
如果您不需要現場用戶實例(像我一樣),你可以用
User.objects.filter(pk=userId, groups__name='Editor').exists()
這隻會產生做向數據庫發送一個請求並返回一個布爾值。
如果用戶屬於某個組與否,可以在Django模板使用檢查:
{% if group in request.user.groups.all %}
"some action"
{% endif %}
- 1. Python如何檢查用戶是否在組中查看頁面
- 2. 如何檢查某些數字是否出現在數組中?
- 3. 如何檢查某個組件是否存在?
- 4. 如何檢查用戶輸入是否是某個基地?
- 5. 如何檢查列表框中是否存在某個值?
- 6. 如何檢查當前循環中是否存在某個值?
- 7. 如何檢查某個字段是否在mongodb中索引?
- 8. 如何在iphone中檢查組的存在(是否可用組)?
- 9. 檢查一個帳戶在Django中是否有效
- 10. 檢查用戶組是否存在
- 11. Swift - 如何檢查兩個用戶是否存在於JSQMessagesViewController中?
- 12. 如何檢查用戶是否在線
- 13. 檢測用戶是否在組中
- 14. 檢查是否存在,是否存在,是否爲某個值
- 15. 檢查用戶是否在Django Restframework中被分配了令牌
- 16. 如何檢查用戶是否在JDialogBox中輸入了某些內容?
- 17. Java - 如何檢查在MySQL表中是否存在用戶名
- 18. 如何在ASP.NET中檢查用戶是否在線?
- 19. 如何檢查現有的用戶帳戶是否在管理員組中?
- 20. 如何檢查一個文件是否在使用PHP的某個目錄中?
- 21. Django檢查JavaScript是否在
- 22. 如何檢查用戶是否在django的base.html中進行了身份驗證?
- 23. 如何檢查數組中的某個值在散列中?
- 24. 如何檢查用戶是否在當前組件內單擊?
- 25. 如何檢查在NSIS中是否選擇了一個組件?
- 26. Swift:如何檢查一個對象是否在數組中?
- 27. 如何檢查值是否存在一個數組中的Jquery
- 28. 如何檢查數組中的每個項目是否存在
- 29. 在jinja2的Django我可以檢查用戶是否屬於一個組?
- 30. Django ORM在mysql/postgres上檢查是否存在Django ORM檢查是否存在
實際檢查將是`如果user.groups.filter(名稱= group_name).count():#do something` – Maccesch 2012-06-03 22:58:40
或使用.exists()而不是.count() – 2012-07-19 21:16:14