Как загружать и просматривать изображения в Django - PullRequest
0 голосов
/ 28 марта 2019

models.py

 class FileUpload(models.Model):
    File_Name = models.CharField(max_length=255, blank=True)
    File_path = models.FileField(upload_to='')
    Description = models.CharField(max_length=255, blank=True)
    Upload_Date = models.DateTimeField(auto_now_add=True)

forms.py

 class FileUploadForm(forms.Form):
   class Meta:
      model = FileUpload

      File_Name = forms.CharField(label="File Name",max_length=255)  
      Description = forms.CharField(label="Description", max_length=255) 

Я новичок в Джанго. Мне нужна помощь.Как загрузить изображения в базу данных и просмотреть эти изображения?Заранее спасибо!

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

views.py:

def uploadfile(request):
   print('inside upload logic')
   if request.method == 'POST':
      form = FileUploadForm(request.POST, request.FILES)
      if form.is_valid():
        # ImageUpload(request.FILES['File_Name'])  
         myfile = request.FILES['File_Name']

         fs = FileSystemStorage()
         filename = fs.save(myfile.name, myfile)
         uploaded_file_url = fs.url(filename)
         newdoc = FileUpload(File_Name=myfile.name, File_path=uploaded_file_url,  Description=request.POST['Description'])
         newdoc.save()
         #return HttpResponse("File uploaded successfuly")  
         return render(request, 'Login/fileupload.html')   
   else:
      form = FileUploadForm()
      return render(request, 'Login/fileupload.html', {
      'form': form
   }) 

1 Ответ

0 голосов
/ 28 марта 2019

Обычно вы не должны хранить данные изображения в вашей базе данных. Если вам необходимо загрузить и сохранить изображения, используйте ImageField или FileField и следуйте инструкциям из docs , чтобы сохранить изображение. Единственное, что вам нужно сделать, это:

form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
    uploaded_file = FileUpload(
        File_path=request.FILES['File_path'],  # or whatever you've called the file input
        File_name=form.cleaned_data['File_Name'],
        Description=form.cleaned_data['Description'])
    uploaded_file.save()

Было бы проще использовать ModelForm в вашем случае, тогда вам нужно только сохранить форму:

if form.is_valid():
    form.save()

Это автоматически сохранит файл правильным способом. Нет необходимости делать сохранение вручную, как вы делаете.

Для просмотра изображения так же просто, как это:

file_upload = FileUpload.objects.get(id=34)
file_url = file_upload.File_path.url  # url relative to `MEDIA_ROOT`

# or in a template
{% load static %}
{% get_media_prefix %}{{ file_upload.File_path.url }}

Если вам действительно нужно сохранить изображения в виде двоичных двоичных объектов в вашей базе данных (но учтите, что это почти никогда не имеет смысла), используйте Django BinaryField, как описано здесь .

Это также означает, что вам придется обрабатывать преобразование изображения из двоичного объекта в правильный файл изображения. Также подумайте о сохранении типа контента (image / jpg или image / png или image / webp), поскольку он вам понадобится для правильного воссоздания файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...