回答
只需通過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. 在Java中,我該如何檢查用戶是否按下某個鍵?
- 5. 如何檢查某個組件是否存在?
- 6. 如何檢查用戶輸入是否是某個基地?
- 7. 檢查某個特定單詞是否在數組中
- 8. 如何檢查用戶是否有某些表中的數據
- 9. VB,如何檢查某個字符是否在字符串中
- 10. 如何檢查java中是否存在某個.txt文件
- 11. 如何檢查列表框中是否存在某個值?
- 12. 如何檢查某個列是否在webtable中完全刪除?
- 13. 如何檢查當前循環中是否存在某個值?
- 14. 如何檢查某個字段是否在mongodb中索引?
- 15. 如何在iphone中檢查組的存在(是否可用組)?
- 16. 檢查一個帳戶在Django中是否有效
- 17. 檢查用戶組是否存在
- 18. Swift - 如何檢查兩個用戶是否存在於JSQMessagesViewController中?
- 19. 檢查是否在struts2中檢查了某個單選按鈕。
- 20. Django REST框架:檢查用戶是否在組
- 21. 如何檢查用戶是否在iphone
- 22. 如何檢查用戶是否在線
- 23. Django註冊如何檢查用戶是否存在
- 24. 檢測用戶是否在組中
- 25. 如何檢查用戶是否輸入了某個詞
- 26. 如何在Mediawiki中使用Php檢查用戶是否是Sysop?
- 27. 如何檢查picturebox是否正在觸碰某個數組中的picturebox?
- 28. 如何檢查是否在C#ListBox中存在一個數組
- 29. 檢查是否存在,是否存在,是否爲某個值
- 30. 檢查用戶是否在Django Restframework中被分配了令牌
實際檢查將是`如果user.groups.filter(名稱= group_name).count():#do something` – Maccesch 2012-06-03 22:58:40
或使用.exists()而不是.count() – 2012-07-19 21:16:14