viernes, 26 de mayo de 2017

Creando my Blog con Django IV: creando las vistas y las urls 馃挭

Muy bienvenidos a esta cuarta parte de c贸mo crear nuestro blog con Django!

Una vez llegados  a este punto, nuestros objetivos, por ahora, ser谩n  crear las vistas necesarias para nuestro blog, y definir una url para cada una de las vistas.


¿Pero, qu茅 har谩n nuestras vistas?
   
Nuestras vistas ser谩n m茅todos en python, que  devolver谩n la informaci贸n solicitada en nuestro blog.

Por ejemplo, si queremos incluir la opci贸n de ver un listado de los posts publicados hasta una fecha concreta, debemos crear una vista haciendo uso de su modelo de datos (en este caso el modelo Post creado) con una query que filtre por un rango de fecha.

As铆, como se puede apreciar en el ejemplo, haremos uso de posts y formularios entre otros elementos.

Comenzamos con la creaci贸n de vistas ☺.




                                                      Creando nuestras Vistas 


Para la creaci贸n de nuestras vistas, necesitaremos primero, crear los archivos base.html y
about.html (extensi贸n de base.html) dentro de la carpeta blog en templates.


Dentro de about.html, a帽adimos qu茅 茅ste, es una extensi贸n de base.html:

             {% extends 'blog/base.html' %}


Ahora estamos preparados para acceder a views.py dentro de la aplicaci贸n d贸nde
tenemos que ir a帽adiendo el siguiente c贸digo 馃挭:
 
from django.shortcuts import render 
from blog.models import Post, Comment   #A帽adiendo los modelos a utilizar
from django.views.generic import (TemplateView, #importar vista tipo para templates!
                                  ListView,
                                  DetailView,
                                  CreateView,
                                  UpdateView,
                                  DeleteView,
                                  )
from django.contrib.auth.mixins import LoginRequiredMixin  #referente a comprobar login馃憤
from django.contrib.auth.decorators import login_required
from blog.forms import PostForm, CommentForm  #A帽adiendo forms
from django.urls import reverse_lazy  #obtener url 馃憤


# Create your views here.
class AboutView(TemplateView):
    template_name = 'about.html'   #M茅todo para mostrar un template.


class PostListView(ListView):
    model = Post                       #Mostrar un listado filtrado y ordenado por fecha de publicaci贸n
    def get_queryset(self):        #accediendo al modelo de datos Post
        return Post.objects.filter(published_date_lte=timezone.now()).order_by('-published_date')


class PostDetailView(DetailView):
    model = Post  # Simplemente accede al modelo para mostrarlo


class CreatePostView(LoginRequiredMixin, CreateView):
    login_url ='/login/'   #Para crear un post, necesitamos el login, nuestro formulario
    redirect_field_name ='blog/post_detail.html/' #y acceder, a nuestro modelo Post.
    form_class = PostForm  #Y, debemos de ser capaces de redirigir a los detalles (datos).
    model = Post


class PostUpdateView(LoginRequiredMixin, UpdateView): #Igual que Crear
    login_url ='/login/'
    redirect_field_name ='blog/post_detail.html/'
    form_class = PostForm
    model = Post


class PostDeleteView(LoginRequiredMixin, DeleteView): #Acceder al modelo para borrar datos
    model = Post                                                                     #Acceder a su url a trav茅s del nombre
    success_url = reverse_lazy('post_list') #Para borrar, tienes que estar logado


class DraftListView(LoginRequiredMixin, ListView): #Filtrado por fecha de publicaci贸n nula
    login_url = '/login/'                                                 
    redirect_field_name = '/blog/post_list.html/'
    model = Post
    def get_queryset(self):
        return Post.objects.filter(published_date_isnull=True).order_by('created_date')

  


Bien! Ahora, vamos a crear nuestras urls, pero primero debemos de crear un archivo urls.py
dentro de nuestra aplicaci贸n.




Estableciendo las Urls 


Ahora, en el archivo urls.py de nuestro proyecto, vamos a incluir la urls.py de nuestra aplicaci贸n
(blog) , d贸nde vamos a establecer las urls de nuestras vistas:
       
              from django.conf.urls import url, include
              from django.contrib import admin

              urlpatterns = [
                    url(r'^admin/', admin.site.urls),
                    url(r' ',include('blog.urls')),  
                    ]
         
    
Ahora s铆! Vamos a crear nuestras urls en el urls.py de nuestra aplicaci贸n, y aqu铆 debemos de importar nuestras vistas:

             from django.conf.urls import url
             from blog import views




Y , para cada vista, una url d贸nde, primero definimos nuestra ruta, importamos nuestra vista,
y le asignamos un nombre 馃槈:

   urlpatterns = [
         url(r'^$', views.PostListView.as_view(), name='post_list'),
         url(r'^about/$', views.AboutView.as_view(), name = 'about'),
         url(r'^post/(?P<pk>\d+)$', views.PostDetailView.as_view(), name='post_detail'),
         url(r'^post/new/$',views.CreatePostView.as_view(), name='post_new'),
         url(r'^post/(?P<pk>\d+)/edit/$', views.PostUpdateView.as_view(), name='post_edit'),
         url(r'^post/(?P<pk>\d+)/remove/$', views.PostDeleteView.as_view(), name='post_remove'),
         url(r'^drafts/$', views.DraftListView.as_view(), name='post_draft_list'),
      ]





Pero, ¿Qu茅 es (?P<pk>\d+)?

Es una expresi贸n regular d贸nde basicamente se est谩 uniendo la primary key del objeto a la url.


Si est谩s interesada o interesado en expresiones regulares, la documentaci贸n de python 3 es id贸nea ☺

Bueno, comprueba que no hay ning煤n error en tu proyecto, y nos vemos en la parte V del proyecto.

Gracias y hasta pronto!

No hay comentarios:

Publicar un comentario

Creando my Blog con Django VI: login y logout 馃挭

Hola a todos! Bienvenidos a la sexta parte de "Creando my Blog con Django" ☺. Llegados a este punto, ya habr谩s creado las cor...