2017-02-17 2 views
-2

views.pydjangoのUserPassesTestMixinはどのように機能しますか?

class ProfileEdit(UserPassesTestMixin, UpdateView): 
    model = User 
    form_class = ProfileForm 
    template_name="profile/profile_new.html" 

    def test_func(self): 
     x = self.request.user.id 
     print (x) 
     y = self.kwargs['pk'] 
     print (y) 
     a = True 
     b = False 
     if self.request.user.id == self.kwargs['pk']: 
      print (a) 
     else: 
      print (b) 
      return redirect ('/login/') 

enter image description here

あなたはテスト条件に出力画像に実際に満たすを見ることができるように..しかし、それは本当ならば、なぜそれが「偽」に印刷ありません。

+0

'print repr(x)'と 'print repr(y)'は、それらが異なっていることは明らかです。 'type(x)'を表示することもデバッグに便利です。 – Alasdair

+0

あなたの 'test_func'は' True'か 'False'を返すべきです、あなたはリダイレクト応答を返すことができません。 – Alasdair

答えて

0

要求オブジェクト内のユーザーからのユーザーIDは整数ですが、self.kwargs['pk']は何かをしない限り文字列です。値がrepr()の場合は、文字列であるURLパスから抽出されているため、文字列には引用符が含まれているため、その違いが分かります。

self.request.user.id == int(self.kwargs['pk'])のように比較する前に、int()でキャストしてみてください。整数のように見えない可能性がある場合は、ValueErrorをキャッチすることを忘れないでください。

関連する問題