1
resposta

Upload de Imagem Python com Django

Estou desenvolvendo um cadastro de funcionários onde precisa informar alguns dados básicos como CPF, Nome, etc, e fazer upload de uma foto e salvar no banco de dados. Já fiz localmente, mas verifiquei na tabela do banco de dados que o campo referente ao caminhos da imagem fica em branco. Em pesquisas na internet e aqui no fórum já vi outras pessoas terem problemas na hora de publicar a aplicação dizem que o upload não funciona e dizem que a função de servir as imagens fica a cargo do apache por exemplo. Uma funcionalidade bastante usada em formulários web achei que seria bem simples de resolver, mas já estou pesquisando há algum tempo e achei muito material, mas muita coisa voltada pra API. Um tutorial passo a passo simples resolveria meu problemas, mas só estou encontrando vídeos e materiais que complicam demais o assunto. Se alguém tiver uma dica de curso ou tutorial eu agradeceria muito!

1 resposta

Olá Jean! Tudo bem com você? Espero que sim!

Peço desculpa pela demora em responder o seu tópico.

Realmente, a configuração correta para o upload de imagens pode ser um pouco confusa no início.

Uma solução simples para o seu problema é utilizar a biblioteca Pillow em conjunto com o Django. Com ela, você poderá facilmente fazer o upload e salvar as imagens no banco de dados.

Aqui está um exemplo básico de como realizar o upload de uma imagem em um formulário Django:

1 - Primeiro, certifique-se de ter a biblioteca Pillow instalada em seu ambiente virtual. Você pode instalá-la executando o seguinte comando no terminal: pip install pillow.

2 - Em seu modelo de funcionário, adicione um campo do tipo ImageField para armazenar a imagem. Por exemplo:

from django.db import models

class Funcionario(models.Model):
    cpf = models.CharField(max_length=11)
    nome = models.CharField(max_length=100)
    foto = models.ImageField(upload_to='fotos/')

3 - No seu formulário Django, adicione um campo do tipo FileField para permitir o upload da imagem. Por exemplo:

from django import forms

class FuncionarioForm(forms.ModelForm):
    class Meta:
        model = Funcionario
        fields = ['cpf', 'nome', 'foto']

4 - Em sua view, você precisará tratar o formulário e salvar a imagem corretamente. Por exemplo:

from django.shortcuts import render, redirect
from .forms import FuncionarioForm

def cadastrar_funcionario(request):
    if request.method == 'POST':
        form = FuncionarioForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('pagina_sucesso')
    else:
        form = FuncionarioForm()
    return render(request, 'cadastro.html', {'form': form})

5 - Por fim, em seu template HTML, você precisará adicionar o atributo enctype="multipart/form-data" ao formulário para permitir o upload de arquivos. Por exemplo:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Cadastrar</button>
</form>

Com essas alterações, você deverá conseguir fazer o upload e salvar a imagem corretamente no banco de dados.

Uma alternativa dessa implementação é usando funcionalidades internas do próprio Django. Para entender melhor como funciona, estarei deixando o link de um post de blog que faz upload de imagens usando Django.

Espero ter ajudado. Se tiver alguma dúvida, estou à disposição!

Grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.