text: from django.shortcuts import render, get_object_or_404
  from django.contrib.auth.models import User
  from django.views.generic import (
      ListView,
      DetailView,
      CreateView,
      UpdateView,
      DeleteView
  )
  from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
  
  from .models import Post
  
  
  def home(request):
      return render(request, 'blog/home.html')
  
  
  def about(request):
      return render(request, 'blog/about.html')
  
  
  class PostListView(ListView):
      model = Post
      template_name = 'blog/home.html'  # <app>/<model>_<viewtype>.html
      context_object_name = 'posts'
      ordering = ['-date_posted']
      paginate_by = 5
  
  
  class PostCreateView(LoginRequiredMixin, CreateView):
      model = Post
      fields = ['title', 'content']
  
      def form_valid(self, form):
          form.instance.author = self.request.user
          return super().form_valid(form)
  
  
  class PostDetailView(DetailView):
      model = Post
  
  
  class UserPostListView(ListView):
      model = Post
      template_name = 'blog/user_posts.html'  # <app>/<model>_<viewtype>.html
      context_object_name = 'posts'
      paginate_by = 5
  
      def get_queryset(self):
          user = get_object_or_404(User, username=self.kwargs.get('username'))
          return Post.objects.filter(author=user).order_by('-date_posted')
  
  
  class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
      model = Post
      fields = ['title', 'content']
  
      def form_valid(self, form):
          form.instance.author = self.request.user
          return super().form_valid(form)
  
      def test_func(self):
          post = self.get_object()
          if self.request.user == post.author:
              return True
          return False
  
  
  class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
      model = Post
      success_url = '/'
  
      def test_func(self):
          post = self.get_object()
          if self.request.user == post.author:
              return True
          return False