django中的UserPassesTestMixin如何工作?

时间:2017-02-17 15:05:36

标签: python django

views.py

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

正如您在输出图像中看到的那样,测试条件实际上满足..但为什么它会打印" False"如果它是真的。

1 个答案:

答案 0 :(得分:0)

来自请求对象中的用户的用户标识是整数,而self.kwargs['pk']是字符串,除非您对其执行某些操作。如果您打印repr()值,则会看到差异,因为字符串会在其周围加上引号,因为它是从url路径中提取的,而url路径本身就是一个字符串。

尝试使用int()进行投射,然后再比较self.request.user.id == int(self.kwargs['pk'])。如果有可能看起来不像整数,请不要忘记ValueError