with form example django avatar django-users

form - upload image django example



Agregar imagen/campo de avatar a los usuarios en django (3)

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.

Quiero que cada usuario en mi sitio web tenga una imagen en su perfil. No necesito miniaturas o algo así, solo una imagen para cada usuario. Cuanto más simple, mejor. El problema es que no sé cómo insertar este tipo de campo en mi perfil de usuario. ¿Alguna sugerencia?


Para conectar el modelo UserProfile a su modelo de usuario, asegúrese de que está extendiendo su modelo de usuario como se explica en este tutorial: http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/

Esto le permitirá acceder a los atributos de UserProfile para su usuario, incluido el avatar, usando user.get_profile (). Avatar. (Note la sintaxis en diferente en su plantilla, vea más abajo cómo mostrar el avatar en su plantilla).

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

avatar = models.ImageField(upload_to=''/images/)

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

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

<img src=path/to/images/{{ user.get_profile.avatar }}">

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


Suponiendo que esté utilizando contrib.auth estándar, puede designar un modelo como un modelo de ''perfil de usuario'' , a través de la configuración AUTH_PROFILE_MODULE . Luego puede usarlo para adjuntar cualquier información adicional que desee a los objetos de User , por ejemplo,

from django.contrib.auth.models import User class UserProfile(models.Model): user = models.OneToOneField(User) avatar = models.ImageField() # or whatever