<p>我最近在一个项目中实现了这个功能。这可以通过使用自动生成的uuid来完成。Django为此有<a href="https://docs.djangoproject.com/en/1.9/ref/models/fields/#uuidfield" rel="nofollow">a built-in model field</a>,或者可以使用slug字段并给它一个默认值。下面是一个简单的例子。在</p>
<p>在你的模型.py文件,导入uuid库,然后将slug字段的默认值设置为uuid.uuid4. 在</p>
<p>在模型.py公司名称:</p>
<pre><code>import uuid
class Ticket(models.Model):
uuid = models.SlugField(default=uuid.uuid4, editable=False)
...
</code></pre>
<p>在网址.py,只需像pk一样使用uuid字段。像这样:</p>
^{pr2}$
<p>在“更新”和“删除”视图的详细信息中,需要确保并设置这两个属性,以便Django知道要将哪个字段用作slug:</p>
<pre><code>slug_field = 'uuid'
slug_url_kwarg = 'uuid'
</code></pre>
<p>然后在你的模板中,当你需要为kwargs检索一个对象时,只需使用uuid而不是pk。在</p>
<p><strong>请注意</strong>除此之外,您还应尽可能使用权限阻止用户查看其他页面。您可以阻止某些帐户查看其他人的详细信息。例如,您可以编写一个权限mixin来检查请求.用户与视图正在处理的对象匹配。在</p>
<p>假设你的用户有一种</p>
<pre><code>class SameUserOnlyMixin(object):
def has_permissions(self):
# Assumes that your Ticket model has a foreign key called user.
return self.get_object().user == self.request.user
def dispatch(self, request, *args, **kwargs):
if not self.has_permissions():
raise Http404('You do not have permission.')
return super(SameUserOnlyMixin, self).dispatch(
request, *args, **kwargs)
</code></pre>
<p>最后,像这样把它贴在你的视图上:</p>
<pre><code>class TicketDisplay(LoginRequiredMixin, SameUserOnlyMixin, DetailView):
...
</code></pre>