7 7d_Proyecto_Web_Completo
jp.av.dev edited this page 2021-07-02 22:24:19 -04:00
This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Creacion del Blog

Crear app python3 manage.py startapp blog
Crear el modelo, una clase por elemento de las entradas del blog

/blog/models.py

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

# Create your models here.

class Categoria(models.Model):
    nombre      = models.CharField( max_length = 50 ) 
    created     = models.DateTimeField( auto_now_add = True)
    updated     = models.DateTimeField( auto_now_add = True)

    class Meta:
        verbose_name = 'categoria'
        verbose_name_plural = 'categorias'

    
    def __str__(self):
        return self.nombre


class Entrada(models.Model):
    titulo      = models.CharField( max_length = 50 ) 
    contenido   = models.CharField( max_length = 50 ) 
    
    autor       = models.ForeignKey( User, on_delete = models.CASCADE )
    categorias  = models.ManyToManyField( Categoria )
    
    imagen      = models.ImageField( upload_to='blog', null=True, blank=True )
    created     = models.DateTimeField( auto_now_add = True)
    updated     = models.DateTimeField( auto_now_add = True)

    class Meta:
        verbose_name        = 'entrada'
        verbose_name_plural = 'entradas'

    
    def __str__(self):
        return self.titulo


Relación uno a muchos.
- Un User puede tener muchas entradas ForeignKey(User, on_delete=models.CASCADE)
en este caso al eliminar un usuario, se eliminan sus entradas

Relación muchos a muchos.
- Una categoría puede estar en varias entradas, y
- Una entrada puede pertencer varias categorias ManyToManyField()

Registrar app Blog

settings.py

...

INSTALLED_APPS = [
    ...
    'blog',
]
...

Crear migraciones y Migrar:

🔸python3 admin.py makemigrations

🔸python3 admin.py migrate

Administrar Blog

Crear las clases a administrar y registrar sitio en admin.py

from django.contrib import admin
from .models import Categoria, Entrada

# Register your models here.

class CategoriaAdmin(admin.ModelAdmin):
    readonly_fields = ('created', 'updated')
    
    
class EntradasAdmin(admin.ModelAdmin):
    readonly_fields = ('created', 'updated')
    
    
admin.site.register(Categoria, CategoriaAdmin)
admin.site.register(Entrada, EntradasAdmin)

Configurar vistas y urls

  • Trasladar la vista del blog desde views.py del proyecto, al de la app y modificar ruta "blog/blog.html"

    /ProyectoWebApp/views.py

    from django.shortcuts import render, HttpResponse
    
    def home(request):
        return render(request, "ProyectoWebApp/home.html")
    
    def tienda(request):
        return render(request, "ProyectoWebApp/tienda.html")
    
    def contacto(request):
        return render(request, "ProyectoWebApp/contacto.html")
    
    def sample(request):
        return render(request, "ProyectoWebApp/sample.html")
    

    blog/views.py

    from django.shortcuts import render
    
    # Create your views here.
    
    def blog(request):
        return render(request, "blog/blog.html")
    
  • Mover y modificar template, a /blog/template/blog**

    Crear estructura de directorios

    📂️ blog
    ├── 📂️ migrations
    │  └── 📄️ __init__.py
    ├── 📂️ templates
    │  └── 📂️ blog
    │     └── 📄️ blog.html
    ├── 📄️ __init__.py
    ├── 📄️ admin.py
    ├── 📄️ apps.py
    ├── 📄️ models.py
    ├── 📄️ tests.py
    ├── 📄️ urls.py
    └── 📄️ views.py
    
  • Mover y modificar /ProyectoWebApp/urls.py y crear urls a la plantilla

    Quitar ruta path('blog', views..... de ProyectoWebApp/urls.py

  • Registrar url al urls.py general del proyecto

    ProyectoWeb/urls.py

         from django.contrib import admin
         from django.urls import path, include
    
         urlpatterns = [
             path('admin/', admin.site.urls),
             path('', include('ProyectoWebApp.urls')),
             path('servicios/', include('servicios.urls')),
             path('blog/', include('blog.urls')),
         ]
    
  • Crear urls en la aplicacion

    /blog/urls.py

        from django.shortcuts import render
        from blog.models import Entrada 
        # Create your views here.
    
        def blog(request):
            entradas = Entrada.objects.all()
            return render(request, "blog/blog.html", {"entradas":entradas})
    
  • Editar plantilla

    /blog/blog.html

    {% extends 'ProyectoWebApp/base.html' %}
     {% load static %}
     {% block content %}
         {% for entrada in entradas %}
             <!-- Heading -->
            <section class="page-section clearfix">
             <div class="container">
               <div class="intro">
                 <img class="intro-img img-fluid mb-3 mb-lg-0 rounded" src="{{entrada.imagen.url}}" alt="" style="width: 70%;">
                 <div class="intro-text left-0 text-center bg-faded p-5 rounded">
                   <h2 class="section-heading mb-4" >
                     <span class="section-heading-upper">{{entrada.titulo}}</span>
                     <span class="section-heading-lower" style="color: Tomato;">{{entrada.contenido}}</span>
                   </h2>
                 </div>
               </div>
             </div>
           </section>
         {% endfor %}
     {% endblock %}