跟进这个线程:django: How do I hash a URL from the database object's primary key? ,我想对用户隐藏主键并Detailview
在我的 urlconf 中使用。我能够在大多数情况下使用按位 XOR 来完成这种隐藏(它在我的视图函数中工作),直到我必须“取消屏蔽”在 url 中发送到我的子类的屏蔽主键的部分DetailView
.
如何在将 pk_masked 命名组发送到我的DetailViewFilteredOnUser(DetailView)
实例之前“取消屏蔽”它?有没有办法mask_toggle(pk_unmasked)
在 urlconf 中发送给我对 DetailViewFilteredOnUser 的调用?在寻找解决方案时,我pk_url_kward
在 Django 文档中找到了一些内容,但我无法让它工作,而且无论如何我认为这不能帮助我对 DetailView 操作的主键执行操作。
这是我的屏蔽功能:
def mask_toggle(number_to_mask_or_unmask):
return int(number_to_mask_or_unmask) ^ settings.MASKING_KEY
我的模型是包含“项目”的“pkgs”:
class Pkg(models.Model):
user = models.ForeignKey(User, editable=False)
tracking_number = models.CharField(max_length=60, unique=True)
class Item(models.Model):
pkg = models.ForeignKey(Pkg)
description = models.CharField(max_length=300)
这是我的 urls.py 中的内容:
class ListViewFilteredOnUser(ListView):
def get_queryset(self):
return Pkg.objects.order_by('-created_at').filter(user=self.request.user)
class DetailViewFilteredOnUser(DetailView):
def get_queryset(self):
qs = super(DetailViewFilteredOnUser, self).get_queryset()
return qs.filter(user=self.request.user)
....
url(r'^(?P<pk_masked>\d+)/$',
login_required(DetailViewFilteredOnUser.as_view( model=Pkg,
template_name='pkgs/detail.html'
)),
name='detail'),
所以问题是,如果我的 urlconf 中的命名组是“pk”,那么一个被屏蔽的主键(因为被屏蔽的键是 url 中的内容)被发送到 DetailView。如果我的 urlconf 中的命名组是“pk_masked”,那么我需要在pk=mask_toggle(pk_masked)
某个地方做,我不知道在哪里或如何做。谢谢。