2012-08-24 2 views
1

user.userprofile의 정보를 사용하여 사용 권한을 관리합니다.테스트에서 요청의 사용자 정보 사용

나는 그것을 사용하는 방법 : 이제

# List of status 
STATUS_CHOICES = (
    ('teacher', 'Teacher'), 
    ('student', 'Student'), 
) 

# More field for an user. 
class UserProfile(models.Model): 
    user = models.OneToOneField(User, unique=True) 
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='student') 

,보기에, 나는 exemple 위해 가지고 :

def login_function(self, username, password, status): 
    # Create a new user 
    user = User.objects.create_user(username=username, password=password) 
    user.userprofile.status = status 
    user.save() 

    # Use test client to perform login 
    user = self.client.login(username=username, password=password) 
    response = self.client.post('/login/') 

class LoggedAsTeacherCase(TestCase): 
    def setUp(self): 
     # I create and log with a teacher user 
     login_function(self, 'teststudent', 'password', 'teacher') 

    def test_login(self): # Verify if login has been validated by server 
     response = self.client.get('/login/') 
     self.assertRedirects(response, '/') # <<< It is ok (My user is detected as connected, he is redirected) 

    def test_dashboard(self): 
     response = self.client.get('/') 
     self.assertEqual(response.status_code, 200) # <<< It is ok (Confirmation, my user is not redirected to login url, perfect) 

    def test_newcourse(self): 
     response = self.client.get('/newcourse/') 
     self.assertEqual(response.status_code, 200) # <<< /!\ It is false, I have a redirection (302), not a 200... 
:

# Only the owner view this template 
if request.user.userprofile.status != 'teacher': 
    return redirect('Penelope.views.home') 

내가 시험에 트링있어 어떻게

그래서보기가 사용자가 선생님인지 (예 : 피사체 상단 참조) 테스트하면 거짓을 보냈습니다.

이 정보에 액세스하고 테스트를 수행하려면 어떻게해야합니까?

답변

0

models.CharField(max_length=..., choices=STATUS_CHOICES) 

하세요!

user = User.objects.create_user(username=username, password=password) 
user.userprofile.status = status 
user.save() 

내가 user = User.objects.create_user(username=username, password=password) 다시 표시 사용자 (거짓)을 가정, 그렇게합니다.

user = User.objects.create_user(username=username, password=password) 
test = UserProfile.objects.filter(user=username) 
test.status = status 
test.save() 

을 그리고 그것은 괜찮 :

그래서, 내가 요청을해야!

2

귀하의 status 필드에 대한 정의가 잘못되었습니다. CharFields에는 양의 정수인 "max_length"속성이 필요합니다. 다음

변경을 : 나는 문제를 발견도 here

+0

흠 미안하지만, 보내기 전에 너무 많은 코드를 단순화했습니다.하지만 현실에서는 괜찮습니다. 지금 편집하십시오! – nlassaux