使 UpdateView 在 urls.py 中接受加密的 pk,并在解密 pk 后返回模型对象进行编辑



我有一个简单的基于工作类的视图继承了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

同样,我使用 hashids.decode('string'( 来获取我的模型对象。

但是在UpdateView中没有这方面的规定(我知道(。在 urls.py 中,它只是接受pk id以返回用于更新模型的相关表单。 我知道我必须以某种方式覆盖 UpdateView 或其任何功能,但无法弄清楚如何。我可以知道如何编辑UpdateView的此功能吗

提前谢谢。

这是一个简单的调整。看完源码,在这里,我发现我只需要扩展的功能

def get_object(self)

SingleObjectMixin(ContextMixin(类中声明。

代码看起来像这样,

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

希望这对某人有所帮助。

最新更新