繼續關注此線程:django: How do I hash a URL from the database object's primary key?,我想隱藏用戶的主鍵並在我的urlconf中使用Detailview
。我能做到使用按位異或大部分這個隱藏(但在我看來職能工作),直到我的地方,我不得不「揭露」這是在URL發送到我的子類的蒙面主鍵的一部分DetailView
。Django:隱藏主鍵(pk)並使用DetailView和get_queryset
我怎麼把它發送到我的DetailViewFilteredOnUser(DetailView)
實例之前,「揭露」我pk_masked命名組?有沒有辦法送mask_toggle(pk_unmasked)
我呼籲DetailViewFilteredOnUser權URL配置?在尋找解決方案,我發現了一些關於Django文檔中pk_url_kward
,但我無法得到它的工作,反正我不認爲能幫助我在那的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)
的地方,我想不出哪裏或如何做到這一點。謝謝。
您好貝里斯拉夫,非常感謝這一點 - 它完美的作品!我想到我用來屏蔽PK的按位XOR「加密」解決方案可能很容易被破解。我可能會嘗試使用不同的遮罩算法。如果我這樣做,它會工作,我會在這裏發佈解決方案。乾杯, – 2013-04-26 10:58:47
我認爲它應該可以用於所有實際目的,但您可能希望查看'pycrypto'庫。 – 2013-04-26 23:19:36