Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Implementación del modelo de usuarios de Platzigram

15/37
Recursos

Las opciones que Django propone para implementar Usuarios personalizados son:

  • Usando el Modelo proxy
  • Extendiendo la clase abstracta de Usuario existente
    La opción OneToOneField restringe la posibilidad de tener perfiles duplicados.

Django no guarda archivos de imagen en la base de datos sino la referencia de su ubicación.

Aportes 54

Preguntas 21

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Comparto aquí un resumen de la clase espero les sea útil:

Las opciones que Django propone para implementar Usuarios personalizados son:
- Usando el Modelo proxy
- Extendiendo la clase abstracta de Usuario existente

Para el presente proyecto debemos crear los campos de usuario:

  1. website
  2. biography
  3. phone_number
  4. profile picture
  5. created
  6. modified

Luego debemos crear la app que se llamará users

sudo python3 manage.py startapp

Crear el modelo
Se debe importar lo que necesitamos

from django.contrib.auth.models import User

Luego se crea los campos adicionales que se necesitan según el proyecto

class Profle (models.Model):
    """Profile Model."""
    """Proxy model that extends the base data with other information"""
    user =models.OneToOneField(User,on_delete=models.CASCADE)
    website=models.URLField(max_length=200,blank=True)
    biography=models.TextField(blank=True)
    phone_number=models.CharField(max_length=20,blank=True)
    picture=models.ImageField(
        upload_to='users/pictures',
        blank=True,
        null=True
    )
    create=models.DateTimeField(auto_now_add=True)
    modified=models.DateTimeField(auto_now=True)


    def __str__(self):
        """Return username."""
        return self.user.username

Posterior a eso dirigirse al archivo de settings.py y así como se instaló post se va a instalar users

Para que funcione el campo ImageField se debe instalar la librería Pillow y se lo hace de la siguiente manera

sudo pip install Pillow

Después ejecutar para que se hagan efecto las migraciones

python3 manage.py makemigrations
python3 manage.py migrate

Y para ingresar al administrador de django crear el super usuario

python3 manage.py createsuperuser

Sabe mal tener acceso a un curso de pago y sentir la necesidad de buscar otro.
He echo laravel (no un curso, sino trabajado), y me hago una buena idea de lo que un fremework ofrece.
La cuestión es la comprensión y el porqué de los pasos, y aquí más que un ser con capacidad de comprender, me siento una maquina de repetición.

Hasta el momento la mayoria de cursos me dejan un sin sabor, he encontrado mejores cursos gratis en youtube. Al fin y al cabo en este curso el profesor se dedica a enviar a todo mundo a la documentacion… En fin, pocos profesores como Freddy y el de Bases de datos, ellos si quieren que la gente aprenda. Existe una gran diferencia entre saber hacer y saber ense;ar.

Me encanta esta frase y me gustaría traerla a colación: “Si no lo puedes explicar de forma sencilla, es que no lo has entendido bien” (Einstein). Me parece que el curso se torna un poco lioso a media de que avanza. Es mejor hacer un curso simple y sencillo que de buenas bases al estudiante. Por mas bueno que sea un curso un estudiante siempre ira a la referencia. No es necesario estar siempre leyendo y mostrando la documentación, si así lo quisiera un estudiante compraría un libro y no pagaría por un curso.

Leyendo la documentación que se muestra en la parte inicial Extendiendo el model User entiendo que hay dos formas de extender el modelo de Users de Django sin modificarlo:

  1. Usar un Model Proxy, que se usa solo cuando se va a modificar el comportamiento del modelo Users de django

2.Usar un modelo de realación Uno a Uno con Users, que normalmente se llama profile y que se usa cuando se requiere almacenar información adicional que no esta en el modelo users de Django

En ,el video se usa la opcion 2. mencionada pero se dice que eso un modelo proxy pero en realidad no lo es.

Hay otras dos formas de personalizar el modelo de Users, uno es definir un modelo propio y otro es personalizarlo en donde se usan las clases abstractas y la herencia, pero este si implica el cambio del modelo original. No se si este bien pero es lo que entiendo del vinculo de la documentación.

Me encanta los cursos de Platzi, pero ya es hora de que actualicen la ruta de desarrollo backend con Python, las mayoria de los cursos tiene mas de tres años, asi como el lenguaje y los framework ha avanzado mucho y uno queda con un mal sabor por que no esta aprendiendo lo necesario.

muy mal curso, el profesor da mil vueltas para explicar conceptos bien sencillos. Borra elementos, quita, pone, va, viene, se le olvidan las cosas, eso termina confundiendolo a uno y volviendo el proceso más tedioso para uno como estudiante.

Este curso esta mandado a actualizar (cambiar tutor) hace rato. Volvi porque quiero terminar la carrera pero es necesario hacer cursos por fuera, para alguuien que esta empezando seguro no es la mejor alternativa. Muy ambiguo, conceptos a mil por hora demasiado generales. Alguno supo en que minuto explican que es un modelo proxy? me lo salte?

Que lío de screen slide… gracias por el esfuerzo de hacer el curso, pero… es un poco caótico para lo sencillo que realmente puede llega a ser describir linea a linea lo que hace cada cosa, me recuerda a cuando hago algo sin haberlo preparado…

La definición del max_length de 200 en URLField es innecesario, ya que si no se especifica, su valor por defecto es de 200.

Django - URLField

If you don’t specify max_length, a default of 200 is used.

Hola, estoy usando docker-compose para montar el proyecto. He instaladao Pillow correctamente sobre el docker que contiene Django pero al hacer el runserver me sigue dando error de que Pillow no está instalado. Alguna ayuda?

Para poder entrar en el admin:

from django.urls import path
from django.contrib import admin
urlpatterns = [
    path('admin/', admin.site.urls),
]

documentación 3.0 según django cambia bastante

¿Cual sería la fundamental diferencia entre crearlo con el abstractuser o con el proxymodel?

Ha sido difícil,pero vamos!

Hoa a todos, dejo esta informacion sobre los distintos valores que puede llevar on_delete, aqui encontraran un explicacion clara sobre como funciona CASCADE, SET_NULL, etc. estas en realidad son FOREIGN KEY CONSTRAINTS o en español RESTRICCIONES DE LLAVE FORANEA
(https://es.stackoverflow.com/questions/105890/que-significa-cascade-set-null-restrict-no-action-en-phpmyadmin)

Me corregiran de pronto pero notaron que en realidad el tutor no utiliza un model proxy según la documentación oficial para que sea un modelo proxy debe indicarse de la siguiente forma:
class MyPerson(Person):
class Meta:
proxy = True

Para conocimiento general y teniendo en cuenta el uso de recursos en nube, comparto a continuación la configuración de media conectado a S3 (Bucket) en AWS.

https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html

Algo que me costo entender fue cómo se añadían mas campos al trabajar con el registro de usuarios que ya nos proporciona Django.

Logré entender, un par de videos mas adelante, y lo que se hace en este paso del curso es crear una nueva clase (en base de datos sería una nueva tabla) que se relacione con una clave foránea al modelo de usuarios que proporciona Django, con una relación 1:1

Otra cosa muy importante este método que estamos usando acá no es un modelo Proxy! es un modelo de relacion 1:1. Para ser un modelo proxy deberia lucir mas o menos asi:

class Perfil(User):
    class Meta:
        proxy = True

    def say_hello(self):
        return "Hola, mi nombre es: {}".format(self.first_name)

Los creadores de Django, te dan la recomendacion que si estas comenzando tu proyecto, puedes directamente crear un modelo de usuario que funcione exactamente igual que el que tienes por defecto, solo que con la ventaja de poder cambiarlo y agregarle lo que quieras dejo link a la documentacion.

He estado tratando de encontrar la razón de por que me marca error, alguien tiene idea de por que sucede? Uso VS Code, no se si eso tenga que ver.

Realmente el archivo funciona bien, inicialmente creía que era por el username ya que nosotros lo estamos declarando únicamente user pero de quitarlo, aunque sale bien en el IDE, la terminal marca error.

Sí alguien sabe más a detalle sobre este detalle le agradecere su respuesta.

broserSqlite para distribuciones basadas en debian:
La instalación es la sigutiente:

sudo apt install sqlitebrowser -y

models.py in progress migration

apps.py finished

Si quieren ver su base de datos SQL lite sin tener que usar DB Browser, les recomiendo esta extensión de vs code

crea el super user

si alguien está trabajando con docker es importante installar las siguientes dependencias para poder utilizar pillow:

  • gcc
  • python3-dev
  • jpeg-dev
  • zlib-dev

Las opciones que Django propone para implementar Usuarios personalizados son:

• Usando el Modelo proxy: El modelo proxy es usado cuando en ambas clases tenemos los mismos atributos pero en la nueva clase queremos agregar mas metodos o cambiar el funcionamiento de alguno de los ya existentes.

.

• Extendiendo la clase abstracta de Usuario existente: Al extender de la clase abstracta podemos agregar nuevos atributos a la clase que extiende.

.
.

Recuerda que si borras la base de datos, te puede cargar tu proceso en el desarroll.

Para el ImageField, requerimos de la libería Pillow

Algo muy importante con el OneToOneField, es que tiene el parámetro, on_delete, ya que en él especificamos, lo que queremos en el campo de nuestra extención.

Para hacer nuestros usuarios, tenemos: modelo proxy, o heredar la clase AbstractUser.

Este curso está MUY bueno, pero me da miedo no recordar lo que aprendí :c

Les dejó el código de la clase para crear el profile

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Profile(models.Model):
    """
    Proxy model that extends the base data with other information
    """
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    website = models.URLField(max_length=200, blank=True)
    biography = models.TextField(blank=True)
    phone_number = models.CharField(max_length=20, blank=True)

    picture = models.ImageField(upload_to='users/pictures', blank=True, null=True)

    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.user.username

para instalar pillow

pip install pillow

Buenas tardes,
tengo un problema con el código generado en models.py dentro de la app users.
La función del final no me esta funcionando bien el return self. Aiuda!

En realidad no sería la app profile no user ? creo que seria dentro de app profile ya que creas la clase profile la pp también debería serlo no?

Interesante el manejo que se da a los campos de tipo Image en Django, en la base de datos es un character variying de 100 caracteres, solo guarda su referencia

ayuda por favor, me complique y estoy en esta etapa , al parecer me faltan instalar algunos dependencias o es que instale muchas cosas que lo cruze, hasta antes del video todo me iva a bien pero borre la basde datos y hice todo lo que dice el profesor y me quede en esta etapa, ayuda por favor.

(Locos) C:\platzigram>python migrate.py runserver
C:\Users\yonat\AppData\Local\Programs\Python\Python37\python.exe: can’t open file ‘migrate.py’: [Errno 2] No such file o
r directory

(Locos) C:\platzigram>python manage.py runserver
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x0000027EF0EB8BF8>
Traceback (most recent call last):
File “C:\Locos\lib\site-packages\django\utils\autoreload.py”, line 225, in wrapper
fn(*args, **kwargs)
File “C:\Locos\lib\site-packages\django\core\management\commands\runserver.py”, line 109, in inner_run
autoreload.raise_last_exception()
File “C:\Locos\lib\site-packages\django\utils\autoreload.py”, line 248, in raise_last_exception
raise exception[1]
File "C:\Locos\lib\site-packages\django\core\management_init
.py", line 337, in execute
autoreload.check_errors(django.setup)()
File “C:\Locos\lib\site-packages\django\utils\autoreload.py”, line 225, in wrapper
fn(*args, **kwargs)
File “C:\Locos\lib\site-packages\django_init_.py”, line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File “C:\Locos\lib\site-packages\django\apps\registry.py”, line 112, in populate
app_config.import_models()
File “C:\Locos\lib\site-packages\django\apps\config.py”, line 198, in import_models
self.models_module = import_module(models_module_name)
File “C:\Users\yonat\AppData\Local\Programs\Python\Python37\lib\importlib_init_.py”, line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File “<frozen importlib._bootstrap>”, line 1006, in _gcd_import
File “<frozen importlib._bootstrap>”, line 983, in _find_and_load
File “<frozen importlib._bootstrap>”, line 967, in _find_and_load_unlocked
File “<frozen importlib._bootstrap>”, line 677, in _load_unlocked
File “<frozen importlib._bootstrap_external>”, line 724, in exec_module
File “<frozen importlib._bootstrap_external>”, line 860, in get_code
File “<frozen importlib._bootstrap_external>”, line 791, in source_to_code
File “<frozen importlib._bootstrap>”, line 219, in _call_with_frames_removed
File “C:\platzigram\users\models.py”, line 16
website = models.URLField(max_length=200, blank=True)
^
IndentationError: unindent does not match any outer indentation level

Poco a poco, vamos aprendiendo

Tengo un problema, cuando le doy save para guardar el perfil, me da este error no such column: users_profile.user_id

todo bien hasta el momento

Y si solo necesito el campo de username y password ¿cómo puedo quitar los demás que Django tiene?

Tengo una duda como puedo hacer que el administrador de django cree modelsfields dinámicos si necesidad de modificar el modelo si no que tenga un botón de agregar y este campo ya aparezca en el admin.

Documentación de Pillow: Installation

Tal como se menciona el la clase hay dos formas de crear usuarios personalizados
-Usando el modelo proxy. Es recomendado para cuando solo se quiere cambiar el comportamiento de la clase sin agregar nuevos atributos. Por ejemplo para poder hacer diferentes querys.
-Extendiendo la clase abstracta de Usuario existente. Esta opción es recomendada cuando se necesita agregar o quitar atributos del modelo de Usuario que viene por defecto en Django.

Pregunta: Las apps podríamos verlas como un routers, quiero decir, un endpoint que tenga que ver con usuarios, con productos, con categorías, calificarían como apps cada una? gracias

Hola soy usuario nuevo de ubuntus, alguien que puede decir que programa es bueno para ver la base de datos

PILLOW: Pillow es una biblioteca adicional gratuita y de código abierto para el lenguaje de programación Python que agrega soporte para abrir, manipular y guardar muchos formatos de archivo de imagen diferentes. Está disponible para Windows, Mac OS X y Linux.


Mas informacion: Pillow

Pero ha registrado la APP en algún momento?? Por que me he tirado media hora que no me funcionaba hasta que he caído.

estuvo un poco enredado peor bueno hay vamos

Asi quedo el models de users

"""Users Models"""

# Django
from django.contrib.auth.models import User
from django.db import models

# Create your models here.
class Profile(models.Model):
    """Profile model.
    proxi model that extends the base data with other information
    """

    user = models.OneToOneField(User, on_delete=models.CASCADE)

    website = models.URLField(max_length=200, blank=True)
    biographi = models.TextField(blank=True)
    phone_number = models.CharField(max_length=20, blank=True)

    picture = models.ImageField(
        upload_to='users/pictures',
        blank=True,
        null=True
        )

    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    def __str__(self):
        """Return username. """
        return self.user.username

Este es un articulo que les recomiendo para entender las distintas forma de extender el modelo User que nos provee Django y las implicaciones de cada una de las estrategias. Espero que les sea util.

https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

Al crear el superusuario y utilizar el retorno de carro no me permite realizar la acción, es como si estuviera bloqueado. ¿Alguien me puede decir como solucionar esta cuestión?

Para registrar el modelo a admin:
from .models import Profile

admin.site.register(Profile)