对djang中文件字段中接收的元素进行散列

2024-04-25 20:00:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是创建一个自定义的create函数,该函数可以生成sha256格式的散列,但在我尝试的不同方法中,它总是遇到问题。目前,如果我运行我的应用程序,它会显示以下内容: 属性错误在/sped_创建/ FieldFile对象没有属性“encode”

我模模糊糊地理解是什么导致了这个问题。但我不知道如何修复它。即使在研究了一些不同的方法之后,我也没有发现任何适合我需要的方法。以下是我的代码:

型号.py

def hash_generator(file_bearer):
integrity_hash = hashlib.sha256(file_bearer.encode('utf-8')).hexdigest()
return integrity_hash


class Sped (models.Model):
json_file = models.FileField(upload_to='json_sped')
# sped_file = models.FileField()
integrity_hash = models.CharField(max_length=256, blank=True, null=True)
# line_counter = models.CharField(max_length= 15000000)
created_at = models.DateTimeField(auto_now_add=True)

def save(self, *args, **kwargs):
    file_bearer = self.json_file
    self.integrity_hash = hash_generator(file_bearer)
    super(Sped, self).save(*args, **kwargs)

(缩进是正确的,但出于某种原因,代码片段的结果如下所示)

视图.py

def sped_create(request):
if request.method == 'POST':
    form = SpedForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return redirect(sped_list)
else:
    form = SpedForm(request.POST, request.FILES, None)

return render(request, 'sped_form.html', {'form': form})

forms.py

class SpedForm(ModelForm):
class Meta:
    model = Sped
    fields = ['json_file']

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    sped = Sped.objects.all()
    context['sped'] = sped
    return context

Tags: selfformjsonreturnmodelsrequestdefcontext