2013-12-23 37 views
1

我正在嘗試在URL的CBV和視圖定義中使用user_pass_testDjango - 如何在網址中使用user_pass_test

我想用類似的語法如下:

url (r'^question_detail-(?P<pk>\w+)$', user_passes_test(not_in_group_chef, 
login_url='public_connexion')Question_detail.as_view(), name='detail_question') 

我發現: Django - limiting url access to superusershttp://jonatkinson.co.uk/djangos-user_passes_test-and-generic-views/

但它不是我的情況的功能。

謝謝。

+0

可能重複的[django的用戶\ _passes \ _test裝飾](http://stackoverflow.com/questions/8082670/django-user-passes-test-decorator)參見:https://開頭文檔。 djangoproject.com/en/dev/topics/class-based-views/intro/#decorating-class-based-views瞭解如何在'urls.py'中使用它。 –

+0

謝謝,但第一個鏈接是CBV在單獨的文件,第二個顯示login_required和permission_required。 祝您有個愉快的日子 – jedema

回答

2

你在你的代碼示例中缺少一對括號,這是否工作?

url (
    r'^question_detail-(?P<pk>\w+)$', 
    user_passes_test(not_in_group_chef, login_url='public_connexion')(
     Question_detail.as_view() 
    ), 
    name='detail_question' 
) 
+0

我試過了,但是Django發現了錯誤: DoesNotExist at/question_detail-6 用戶匹配查詢不存在。 謝謝。 – jedema

0

Anentropic是對的,謝謝!

對於有人爲同樣的問題:

,我解決的第二個問題:匿名用戶,not_in_group_chef功能應該驗證用戶是否註冊。這樣你就不會爲匿名用戶發生錯誤。的

def not_in_group_chef(user): 
if user: 
    retour = False 
    if User.objects.filter(username = user).count()==1: 
     utilisateur = User.objects.get(username = user) 
     if utilisateur.groups.filter(name='chef').count()==0: 
      retour = True 
     return retour 
    return retour 
return False 
+0

Django提供了一種更簡單的方法來檢查匿名用戶而不用查詢db:'if user.is_anonymous()'https://docs.djangoproject.com/en/1.3/topics/auth/#django.contrib.auth.models .User.is_anonymous ...你的'not_in_group_chef'函數應該接收一個User/AnonymousUser對象,而不是一個用戶名字符串,所以不需要'User.objects.get(username = user)' – Anentropic