gpt4 book ai didi

python - Django-如何使用两个 UserPassesTestMixin

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:31 26 4
gpt4 key购买 nike

使用多个 UserPassesTestMixin 适用于其他 View ,但不适用于 ProfileCreateView

似乎存在一个我无法弄清楚的逻辑错误!

View .py

class CurrentUser(UserPassesTestMixin):
def test_func(self):
x = self.request.user.slug
print (x)
y = self.kwargs['slug']
print (y)
if x == y:
return True
else:
if self.request.user.is_authenticated():
def get_absolute_url(self):
return reverse('profile:view_profile', kwargs={ "slug": self.slug })


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

def test_func(self):
x = self.get_object().full_name
print (x)
y = ''
if x == y:
return True
else:
def get_absolute_url(self):
return reverse('profile:view_profile', kwargs={ "slug": self.slug })



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

def test_func(self):
x = self.get_object().full_name
#print (x)
y = ''
if x != y:
return True
else:
def get_absolute_url(self):
return reverse('profile:profile_edit', kwargs={ "slug": self.slug })

类(class)CurrentUser检查用户是否有权编辑配置文件。如果用户是个人资料的作者,则他只能编辑个人资料。 x 和 y 都是这个类打印不同的值x打印登录用户的slug值y打印来自url的slug这怎么可能是真的? p>

test_funcProfileCreate类检查用户是否已经创建了配置文件,即,如果 full_name是一个空字符串,那么它允许用户创建配置文件。 else 重定向到其他 View 。

CurrentUser类适用于其他 View ,例如 ProfileEdit等等,

总结!--登录用户-localhost:8000/username1

用户将能够访问localhost:8000/username1/edit/但不是localhost:8000/username2/edit/

用户将能够访问localhost:8000/username1/create/仅当 full_name是空的。如果用户以 username1 登录,则该用户应该无法访问 localhost:8000/username2/create/ ---- 这部分代码不起作用。代码中有什么逻辑错误?

最佳答案

你不能让两个方法调用同一个东西。 ProfileCreate 中的 test_func 会覆盖 CurrentUser 中的 test_func。

关于python - Django-如何使用两个 UserPassesTestMixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com