簡體   English   中英

如何在 django 中對 model 字段和過濾器執行操作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM