如果用户1创建此票据: 我的网站/经理/票务/票证-来自用户-1/
用户2创建: 我的网站/经理/票务/票务-来自用户-2/
如何防止用户1通过在url中键入票据来阻止用户2或其他用户访问票据?在
views.py
class TicketDisplay(LoginRequiredMixin, DetailView):
model = Ticket
template_name = 'ticket_detail.html'
context_object_name = 'ticket'
slug_field = 'slug'
def get_context_data(self, **kwargs):
context = super(TicketDisplay, self).get_context_data(**kwargs)
context['form_add_comment'] = CommentForm()
return context
^{pr2}$url.py
我最近在一个项目中实现了这个功能。这可以通过使用自动生成的uuid来完成。Django为此有a built-in model field,或者可以使用slug字段并给它一个默认值。下面是一个简单的例子。在
在你的模型.py文件,导入uuid库,然后将slug字段的默认值设置为uuid.uuid4. 在
在模型.py公司名称:
在网址.py,只需像pk一样使用uuid字段。像这样:
^{pr2}$在“更新”和“删除”视图的详细信息中,需要确保并设置这两个属性,以便Django知道要将哪个字段用作slug:
然后在你的模板中,当你需要为kwargs检索一个对象时,只需使用uuid而不是pk。在
请注意除此之外,您还应尽可能使用权限阻止用户查看其他页面。您可以阻止某些帐户查看其他人的详细信息。例如,您可以编写一个权限mixin来检查请求.用户与视图正在处理的对象匹配。在
假设你的用户有一种
最后,像这样把它贴在你的视图上:
你需要让用户1拥有用户2无法模仿的东西。在
首选的方法是使用现有的身份验证方法,并检查是否允许用户访问页面。在
如果您的站点没有注册,那么您可以生成一些随机字符串
secret
-并将其与问题一起存储。如果'user'有这个secret
,那么他是被允许的。在这个秘密字符串可以存储在cookie中,也可以作为URL的一部分。在
将其存储在cookie中有一个缺点:如果cookie丢失,则没有人可以访问该页面。用户也不能从其他浏览器访问它。在
将其作为url的一部分还有另一个缺点:如果其他人看到链接,他也可以访问该页面。如果用户的软件自动报告他访问过的某个地方,这可能会很糟糕。在
结合这些方法有两个缺点。在
相关问题 更多 >
编程相关推荐