Хеширование элемента, полученного в FileField в django - PullRequest
0 голосов
/ 10 октября 2019

Моя цель - создать пользовательскую функцию создания, которая может создавать хэш в формате sha256, но я продолжаю сталкиваться с проблемами в разных методах, которые я пробую. В настоящее время, если я запускаю свое приложение, оно говорит следующее: AttributeError в / sped_create / FieldFile объект не имеет атрибута «закодировать».

Я смутно понимаю, что вызывает проблему здесь. Но я не знаю, как это исправить. Даже после исследования различных методов я не нашел ничего, что соответствовало бы моим потребностям. Вот код, который у меня есть:

models.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)

(отступ верен, но по какой-то причине фрагмент кода здесь выглядит вот так)

views.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...