我正在創建一個應用程序,我希望通過哈希字符串訪問圖片(以防止人們猜測/訪問其他照片)。爲此,我使用以下方法:何時生成django模型ID?
class PhotoModel(models.Model):
name = models.CharField(max_length=256)
slg = models.SlugField()
def save(self, *args, **kwargs):
if not self.slg:
self.slg = slugify(my_own_hash_function(str(self.id)))
super(PhotoModel, self).save(*args, **kwargs)
該方法正在工作,但我找不出原因。當在Django模型'ID'生成?這是爲對象創建一個不可猜測的url的正確方法嗎? (爲了增加安全性,我會在後面添加一個salt)
我和你現在提到的有相同的理解(關於'id'),但是上面的代碼起作用,save函數在我第一次調用save的時候被調用。例如: 'a = PhotoModel()' 'a.save()' 'save'將會失敗,因爲所需字段不存在且'id'變爲空,對象也不會持久保存到數據庫。但是slg字段已經填充了! – sudshekhar
您的模型與您發佈的完全相同嗎?因爲這種行爲絕對是我提到的,我覺得django框架的這一部分不太可能是bug。 – e4c5
好吧,現在我覺得自己像個白癡:P。我的模型和我上面描述的一樣,但是我的散列函數是造成這種混淆的原因。行爲的工作原理與我所描述的一樣,只是因爲我的哈希函數使用'None'生成了一個slug,因此我看到了正在生成的值。通過在函數內添加一個簡單的打印語句來找到這一點。對困惑感到抱歉! – sudshekhar