Write ListView, DetailView, CreateView, and function-based views with auth decorators.
Views (FBV and CBV)
# Function-based view
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
def post_list(request):
posts = Post.objects.filter(is_draft=False)
return render(request, "blog/post_list.html", {"posts": posts})
@login_required
def post_create(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect(post)
else:
form = PostForm()
return render(request, "blog/post_form.html", {"form": form})
# Class-based view
from django.views.generic import ListView, DetailView, CreateView
class PostListView(ListView):
model = Post
template_name = "blog/post_list.html"
context_object_name = "posts"
paginate_by = 10
queryset = Post.objects.filter(is_draft=False)
class PostDetailView(DetailView):
model = Post
slug_field = "slug"
template_name = "blog/post_detail.html"