Python 如何限制访问我的纵断面图?
我没有访问个人信息的权限。为此,URL中有一个pk。但是,这是有问题的,因为他们可以通过更改pk的值来访问其他用户信息。我看了医生,没有发现任何与此相关的东西。 我如何预防这个问题Python 如何限制访问我的纵断面图?,python,django,python-3.x,Python,Django,Python 3.x,我没有访问个人信息的权限。为此,URL中有一个pk。但是,这是有问题的,因为他们可以通过更改pk的值来访问其他用户信息。我看了医生,没有发现任何与此相关的东西。 我如何预防这个问题 path('profil/<int:pk>', views.ProfilView.as_view(), name="profil") 路径('profil/',views.ProfilView.as_view(),name=“profil”) 要求用户登录,如果不是他们自己的配置文件id,则显示401
path('profil/<int:pk>', views.ProfilView.as_view(), name="profil")
路径('profil/',views.ProfilView.as_view(),name=“profil”)
要求用户登录,如果不是他们自己的配置文件id,则显示401未经授权的错误
如果有一个始终显示用户自己的配置文件的
profile/me
url,可能会很有用。要求用户登录,如果不是他们自己的配置文件id,则显示401未经授权的错误
有一个始终显示用户自己的个人资料的
profile/me
url可能会很有用。如果url中没有PK的理由(即,您不想使用相同的视图查看其他人的信息),您可以使您的profileview
看起来像这样,假设它来自DetailView
:
来自django.contrib.auth.mixins导入登录所需的mixin
# ...
类ProfilView(LoginRequiredMixin,DetailView):
model=用户#或其他任何情况
def get_对象(自身):
return self.request.user#始终返回当前用户
而且很简单
路径('profil/',views.ProfilView.as_view(),name=“profil”)
在您的URL配置中。如果PK没有理由出现在URL中(即,您不想使用相同的视图查看其他人的信息),您可以使您的
ProfilView
看起来像这样,假设它源自DetailView
:
来自django.contrib.auth.mixins导入登录所需的mixin
# ...
类ProfilView(LoginRequiredMixin,DetailView):
model=用户#或其他任何情况
def get_对象(自身):
return self.request.user#始终返回当前用户
而且很简单
路径('profil/',views.ProfilView.as_view(),name=“profil”)
在URL配置中。用户通过django提供的LoginView登录。您能否在
ProfilView()
顶部提供有关您的实现的更多详细信息,如果请求的pk与用户的pk不匹配,请重定向到401页面。用户通过django提供的LoginView登录。您能否在ProfilView()
顶部提供有关您的实现的更多详细信息,如果请求的pk与用户的pk不匹配,请重定向到401页面。区分登录的用户和正在查看数据的用户通常很有用。例如,客户级管理员应有权查看某些用户的个人资料页面,但可能不是全部;您的客户支持人员会发现,以最终用户的方式查看页面非常有用。通过使用request.user
对登录用户和获取用户数据进行查看,您使这些用例变得更加困难。“您的客户支持人员会发现,以最终用户的方式查看页面非常有用”—您必须将其构建到每个视图中,而这些视图不是非常枯燥。我会使用类似的模拟框架来代替它。只要你查找你正在查看的用户(即不使用request.user
来查找视图数据),并实现can\u request\u user\u view(user)
功能,就可以完成很少的工作。没有重复你自己(person.first\u name
vs.request.user.first\u name
不是重复你自己,你只是从你获取的用户开始,例如通过pk
)django impersonate
可能是一个很棒的项目,但它并不能解决这个问题——至少在欧盟,您仍然需要访问控制,在欧盟,只有用户自己(request.user==person
)才能查看某些数据。区分登录的用户通常很有用,以及正在查看数据的人。例如,客户级管理员应有权查看某些用户的个人资料页面,但可能不是全部;您的客户支持人员会发现,以最终用户的方式查看页面非常有用。通过使用request.user
对登录用户和获取用户数据进行查看,您使这些用例变得更加困难。“您的客户支持人员会发现,以最终用户的方式查看页面非常有用”—您必须将其构建到每个视图中,而这些视图不是非常枯燥。我会使用类似的模拟框架来代替它。只要你查找你正在查看的用户(即不使用request.user
来查找视图数据),并实现can\u request\u user\u view(user)
功能,就可以完成很少的工作。没有重复你自己(person.first\u name
vs.request.user.first\u name
不是重复你自己,你只是从你获取的用户开始,例如通过pk
)django impersonate
可能是一个很棒的项目,但它并不能解决这个问题——至少在欧盟,您仍然需要访问控制,只有用户自己(request.user==person
)才能查看某些数据。