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')),
]
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r' ',include('blog.urls')),
]
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