模型对象的模糊Django URL

时间:2010-11-08 19:27:26

标签: django obfuscation django-urls

我有一个看起来像这样的Django模型:

class Person(models.Model):

    name = models.CharField(max_length=32)
    place = models.ForeignKey(Place, related_name='people')
    approved = models.BooleanField()
    objects = PersonManager()

    @models.permalink
    def get_absolute_url(self):
        return('deal_details', (), {
            'person_slug': slugify(self.name),
        })

如您所见,我已经拥有该对象的绝对URL。但是,我想创建一个难以猜测的URL来跟踪对象的批准过程。任何人做过类似的事情和/或对我应该如何进行有任何建议?

我的第一个想法是创建一个像obfuscated_key这样的模型字段,它是通过save function of the model随机生成的。然后,URL看起来像/people/status/<id>/<obfuscated_key>/。但也许有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:4)

执行此操作的一种好方法是使用安装的密钥(来自settings.py)散列对象的ID。这就是密码重置电子邮件表单的作用 - django.contrib.auth.tokens中有一些有用的代码 - 在最新的SVN版本中,django.contrib.auth.crypto

答案 1 :(得分:0)

像URL缩短程序(读取:混淆)之类的东西可能有用。

http://djangosnippets.org/snippets/1323/

答案 2 :(得分:0)

我已经使用UUIDField做了类似的事情。

在模型中:

uuid = UUIDField(auto=True)

然后在视图中检查id和uuid:

item = get_object_or_404(Item, id=id, uuid__exact=uuid)

UUIDField来自http://djangosnippets.org/snippets/335/