使 UpdateView 接受 urls.py 中的加密 pk 和 return 解密 pk 后用于编辑的模型对象
Make UpdateView accept an encrypted pk in urls.py and return a model object for editing after decrypting the pk
我有一个简单的工作 class 基于继承 UpdateView 的视图。
class UpdateModel(UpdateView):
model = ModelName
fields = ['field_1' , 'field_2' , ]
template_name_suffix = '_update_form'
success_url = reverse_lazy('home')
和映射回此视图的 url
url(r'^edit/(?P<pk>[\w-]+)$' , UpdateModel.as_view() , name="update_model"),
现在我面临的 问题 是我通常在将 PK 值发送到外部之前对其进行加密(因为它们很敏感) .当我收到它们时,我将它们解密以获取模型对象。
加密过程的简要工作。
def pk_encoder(pk):
int_pk = int(pk)
hashids = Hashids("MySalt")
encoded_pk = hashids.encode(pk_id)
return encoded_pk
ans 同样,我使用 hashids.decode('string') 来获取我的模型对象。
但是在 UpdateView 中没有这方面的规定(据我所知)。在 urls.py 它只是接受 pk id 到 return 更新模型的相关表格。
我知道我必须以某种方式覆盖 UpdateView 或它的任何功能,但无法弄清楚如何。我可以知道如何编辑 UpdateView
的这个功能吗
提前致谢。
这是一个简单的调整。阅读源代码 here 后,我发现我只需扩展
的功能即可
def get_object(self)
在 SingleObjectMixin(ContextMixin) class.
中声明
代码看起来像,
class UpdateModels(UpdateView):
#declare model, fields, template_name etc.
def get_object(self):
#decode and get the object in the variable desired_model_object
return desired_model_object
希望这对某人有所帮助。
我有一个简单的工作 class 基于继承 UpdateView 的视图。
class UpdateModel(UpdateView):
model = ModelName
fields = ['field_1' , 'field_2' , ]
template_name_suffix = '_update_form'
success_url = reverse_lazy('home')
和映射回此视图的 url
url(r'^edit/(?P<pk>[\w-]+)$' , UpdateModel.as_view() , name="update_model"),
现在我面临的 问题 是我通常在将 PK 值发送到外部之前对其进行加密(因为它们很敏感) .当我收到它们时,我将它们解密以获取模型对象。
加密过程的简要工作。
def pk_encoder(pk):
int_pk = int(pk)
hashids = Hashids("MySalt")
encoded_pk = hashids.encode(pk_id)
return encoded_pk
ans 同样,我使用 hashids.decode('string') 来获取我的模型对象。
但是在 UpdateView 中没有这方面的规定(据我所知)。在 urls.py 它只是接受 pk id 到 return 更新模型的相关表格。 我知道我必须以某种方式覆盖 UpdateView 或它的任何功能,但无法弄清楚如何。我可以知道如何编辑 UpdateView
的这个功能吗提前致谢。
这是一个简单的调整。阅读源代码 here 后,我发现我只需扩展
的功能即可def get_object(self)
在 SingleObjectMixin(ContextMixin) class.
中声明代码看起来像,
class UpdateModels(UpdateView):
#declare model, fields, template_name etc.
def get_object(self):
#decode and get the object in the variable desired_model_object
return desired_model_object
希望这对某人有所帮助。