Saltar al contenido

Agregar campo de imagen/avatar a los usuarios en django

Ya no tienes que buscar más en otras webs ya que has llegado al sitio justo, poseemos la respuesta que buscas pero sin problema.

Solución:

Debe crear un formulario que tenga un método limpio que valide las propiedades que está buscando:

#models.py
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user   = models.OneToOneField(User)
    avatar = models.ImageField()


#forms.py
from django import forms
from django.core.files.images import get_image_dimensions

from my_app.models import UserProfile


class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile

    def clean_avatar(self):
        avatar = self.cleaned_data['avatar']

        try:
            w, h = get_image_dimensions(avatar)

            #validate dimensions
            max_width = max_height = 100
            if w > max_width or h > max_height:
                raise forms.ValidationError(
                    u'Please use an image that is '
                     '%s x %s pixels or smaller.' % (max_width, max_height))

            #validate content type
            main, sub = avatar.content_type.split('/')
            if not (main == 'image' and sub in ['jpeg', 'pjpeg', 'gif', 'png']):
                raise forms.ValidationError(u'Please use a JPEG, '
                    'GIF or PNG image.')

            #validate file size
            if len(avatar) > (20 * 1024):
                raise forms.ValidationError(
                    u'Avatar file size may not exceed 20k.')

        except AttributeError:
            """
            Handles case when we are updating the user profile
            and do not supply a new avatar
            """
            pass

        return avatar

Espero que te ayude.

Para conectar el modelo de perfil de usuario a su modelo de usuario, asegúrese de extender su modelo de usuario como se explica detalladamente en este tutorial: http://www.b-list.org/weblog/2006/jun/06/django-tips-extending- modelo de usuario/

Esto le permitirá acceder a UserProfile attributes para su Usuario, incluido el avatar, utilizando user.get_profile().avatar. (Tenga en cuenta que la sintaxis es diferente en su plantilla, consulte a continuación cómo mostrar el avatar en su plantilla).

Puede usar un campo de imagen en su modelo de perfil de usuario para el avatar:

#upload at specific location
avatar = models.ImageField(upload_to='images')

Esto funciona exactamente como FileField pero es específico para imágenes y valida que el objeto cargado es una imagen válida. Para limitar el tamaño del archivo, puede usar la respuesta dada aquí por @pastylegs: Tamaño máximo de imagen en la carga de archivos

Luego, asumiendo que su modelo de perfil de usuario se llama UserProfile, accede al avatar en su plantilla de la siguiente manera:


Más sobre el campo de imagen aquí: https://docs.djangoproject.com/en/dev/ref/models/fields/#imagefield

Asumiendo que estás usando estándar contrib.authpuede designar un modelo como un modelo de ‘perfil de usuario’, a través de AUTH_PROFILE_MODULE ajuste. Luego puede usarlo para adjuntar cualquier información adicional que desee al User objetos, por ejemplo

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user   = models.OneToOneField(User)
    avatar = models.ImageField() # or whatever

Sección de Reseñas y Valoraciones

Si te gusta este mundo, puedes dejar un enunciado acerca de qué te ha gustado de este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *