![](/img/trans.png)
[英]How can I filter instances of a model in django, with a queryset value of filter field?
[英]How can I perform operation over model field and filter in django?
我的 model 有一個名為key的字段,它看起來像;
key = models.CharField(max_length=64)
我將使用 pycrypto python package 生成的加密字符串存儲到密鑰字段中。
key = encrypted string of string 'abc'
現在我嘗試使用具有相同字符串的加密字符串的字段密鑰過濾 model,不會得到任何記錄,因為每次我加密字符串“abc”時都會得到不同的加密字符串。
model.objects.filter(key=new encrypted string of abc)
是任何方式對 model 字段執行解密操作並使用普通字符串過濾掉
model.objects.filter(operation on key = 'abc')
還是我需要 go 與任何其他解決方案。
我認為這是不可能的。 或者使用django-searchable-encrypted-fields
package。
django-searchable-encrypted-fields 0.1.9
pip 安裝 django-searchable-encrypted-fields
設置.py:
INSTALLED_APPS += ["encrypted_fields"]
# A list of hex-encoded 32 byte keys
# You only need one unless/until rotating keys
FIELD_ENCRYPTION_KEYS = [
"f164ec6bd6fbc4aef5647abc15199da0f9badcc1d2127bde2087ae0d794a9a0b"
]
Django model 字段使用Pycryptodome AES-256 GCM
加密。
模型.py:
class Person(models.Model):
_name_data = fields.EncryptedCharField(max_length=50, default="", null=True/False)
name = fields.SearchField(hash_key="f164ec6bd...794a9a0b", encrypted_field_name="_name_data")
favorite_number = fields.EncryptedIntegerField()
city = models.CharField(max_length=255) # regular Django model field
然后你可以像這樣使用它:
“Jo”經過哈希處理並存儲在“name”中,並經過對稱加密並存儲在“_name_data”中
Person.objects.create(name="Jo", favorite_number=7,city="London")
person = Person.objects.get(name="Jo")
斷言 person.name == "喬"
斷言 person.favorite_number == 7
person = Person.objects.get(city="London")
斷言 person.name == "喬"。 # 數據取自'_name_data',它首先解密它。
請一次閱讀文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.