-
Notifications
You must be signed in to change notification settings - Fork 0
Models ‐ Categoria,Post,Comentario,MensajeContacto,Profile
Modelos de datos utilizando Django ORM (Object-Relational Mapping):
from tkinter import Image
from django.db import models
from django.utils import timezone
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
Se utilizo tkinter Imagen porque utilice un codigo aparte para verificar el estado de la Base de Datos y no es necesario
-
from tkinter import Image
: Este import es innecesario en el contexto de Django y podría ser un error, ya quetkinter
es una biblioteca para interfaces gráficas de usuario en Python, no se utiliza en el contexto de Django. -
from django.db import models
: Importa el módulomodels
de Django, que se utiliza para definir modelos de base de datos. -
from django.utils import timezone
: Importa el módulotimezone
, que permite trabajar con fechas y horas en el contexto de zonas horarias. -
from django.conf import settings
: Permite acceder a la configuración del proyecto de Django, incluyendo la configuración de autenticación. -
from django.contrib.auth.models import User
: Importa el modeloUser
, que representa la tabla de usuarios en la base de datos. -
from django.contrib.auth.hashers import make_password
: Permite hashear contraseñas de manera segura (aunque en este código no se utiliza directamente).
class Categoria(models.Model):
nombre = models.CharField(max_length=200, unique=True)
def __str__(self):
return self.nombre
- Descripción: Este modelo representa las categorías que pueden asignarse a los posts.
-
Campo
nombre
:-
models.CharField
: Campo de texto que almacena el nombre de la categoría, con un límite de 200 caracteres. -
unique=True
: Garantiza que no haya dos categorías con el mismo nombre.
-
-
Método
__str__
: Devuelve el nombre de la categoría cuando se imprime o se visualiza.
class Post(models.Model):
autor = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
titulo = models.CharField(max_length=200)
resumen = models.TextField(max_length=50000)
fecha_creacion = models.DateTimeField(default=timezone.now)
fecha_publicacion = models.DateTimeField(blank=True, null=True)
contenido = models.TextField(max_length=50000)
imagen = models.ImageField(null=True, blank=True, upload_to="img/posts", help_text="Imagen del post")
categorias = models.ManyToManyField(Categoria, related_name="posts")
def publish(self):
self.fecha_publicacion = timezone.now()
self.save()
def __str__(self):
return self.titulo
def mostrarcomentario(self):
return self.comentarios.filter(aprobado=True)
- Descripción: Este modelo representa los posts o publicaciones en el sistema.
-
Campos:
-
autor
:-
ForeignKey
: Crea una relación de muchos a uno con el modelo de usuario. -
on_delete=models.CASCADE
: Si se elimina el usuario, se eliminarán también todos sus posts.
-
-
titulo
: Campo que almacena el título del post. -
resumen
: Un campo de texto que proporciona un resumen del contenido del post. -
fecha_creacion
: Almacena la fecha y hora de creación del post, con un valor predeterminado de la hora actual. -
fecha_publicacion
: Campo opcional que indica cuándo se publicó el post. -
contenido
: Campo que almacena el contenido completo del post. -
imagen
: Campo que permite subir una imagen asociada al post. Puede ser nulo o estar en blanco. -
categorias
: Relación de muchos a muchos con el modeloCategoria
, permitiendo que un post tenga múltiples categorías y viceversa.
-
-
Métodos:
-
publish()
: Método que establece lafecha_publicacion
al momento actual y guarda el post. -
__str__()
: Devuelve el título del post cuando se imprime. -
mostrarcomentario()
: Devuelve los comentarios aprobados asociados al post.
-
class Comentario(models.Model):
autor_comentario = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
post = models.ForeignKey("Post", related_name='comentarios', on_delete=models.CASCADE)
cuerpo_comentario = models.CharField(max_length=1000)
fecha_creacion = models.DateTimeField(default=timezone.now)
aprobado = models.BooleanField(default=True)
def aprobar_comentario(self):
self.aprobado = True
self.save()
def __str__(self):
return f'Comentario de {self.autor_comentario} en {self.post}'
- Descripción: Este modelo representa los comentarios realizados en los posts.
-
Campos:
-
autor_comentario
: Relación de muchos a uno con el modelo de usuario, representando al autor del comentario. -
post
: Relación de muchos a uno con el modeloPost
, indicando a qué post pertenece el comentario. -
cuerpo_comentario
: Campo que almacena el texto del comentario. -
fecha_creacion
: Almacena la fecha y hora de creación del comentario, con un valor predeterminado de la hora actual. -
aprobado
: Campo booleano que indica si el comentario ha sido aprobado (valor predeterminadoTrue
).
-
-
Métodos:
-
aprobar_comentario()
: Cambia el estado deaprobado
aTrue
y guarda el comentario. -
__str__()
: Devuelve una representación del comentario que incluye el autor y el post.
-
class MensajeContacto(models.Model):
nombre = models.CharField(max_length=100)
email = models.EmailField()
tema = models.CharField(max_length=50)
mensaje = models.TextField()
archivo = models.FileField(upload_to='archivos/', blank=True, null=True) # Para archivos opcionales
fecha_envio = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.nombre
- Descripción: Este modelo se utiliza para almacenar mensajes de contacto enviados por los usuarios.
-
Campos:
-
nombre
: Nombre del usuario que envía el mensaje. -
email
: Dirección de correo electrónico del usuario. -
tema
: Tema del mensaje. -
mensaje
: Contenido del mensaje. -
archivo
: Campo que permite subir un archivo opcionalmente. -
fecha_envio
: Almacena la fecha y hora en que se envió el mensaje, configurado para agregarse automáticamente.
-
-
Método
__str__()
: Devuelve el nombre del remitente del mensaje.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
photo = models.ImageField(null=True, blank=True, upload_to="img/posts", help_text="Imagen del perfil")
encrypted_password = models.CharField(max_length=128, blank=True, null=True) # Campo para almacenar la contraseña encriptada
def __str__(self):
return self.user.username
def save(self, *args, **kwargs):
if self.user.password and not self.encrypted_password:
self.encrypted_password = self.user.password # Almacena la contraseña encriptada del usuario
super(Profile, self).save(*args, **kwargs)
- Descripción: Este modelo representa el perfil del usuario, vinculando información adicional al modelo de usuario.
-
Campos:
-
user
: Relación uno a uno con el modeloUser
, lo que significa que cada usuario tiene un único perfil. -
bio
: Campo de texto que permite al usuario añadir una breve biografía. Es opcional. -
photo
: Campo para almacenar la imagen de perfil del usuario. También es opcional. -
encrypted_password
: Almacena la contraseña encriptada del usuario, aunque es poco común almacenar contraseñas en perfiles. Este campo es opcional.
-
-
Métodos:
-
__str__()
: Devuelve el nombre de usuario del perfil. -
save()
: Se sobrescribe el métodosave
para almacenar la contraseña encriptada del usuario en el campoencrypted_password
cuando se crea el perfil.
-
Este código define varios modelos que forman la base de una aplicación de gestión de contenido. Cada modelo tiene sus campos y métodos que ayudan a gestionar la información de manera estructurada. Las relaciones entre modelos (como ForeignKey
y ManyToManyField
) permiten una mayor flexibilidad y organización en la base de datos.
Guillermo Petcho
Estudiante de Física y análisis de datos
GitHub | LinkedIn | Udemy
- Análisis de datos
- Física
- Python
- Estadística
- Campus Informatorio, Chaco
Soy un apasionado por la física y el análisis de datos. En mi tiempo libre, me gusta explorar nuevas tecnologías y mejorar mis habilidades en programación, especialmente en Python.