Advertisement
BondokBE

posts/views.py

Feb 10th, 2019
609
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.79 KB | None | 0 0
  1. from urllib.parse import quote_plus
  2.  
  3. from django.urls import reverse
  4. from django.shortcuts import render, get_object_or_404, redirect
  5. from django.http import HttpResponseRedirect, HttpResponse, Http404
  6. from django.contrib.contenttypes.models import ContentType
  7. from django.utils import timezone
  8. from django.contrib import messages
  9. from django.core.paginator import Paginator
  10. from django.db.models import Q
  11.  
  12. from .utils import get_read_time
  13. from .models import Post
  14. from .forms import PostForm
  15. from comments.forms import CommentForm
  16. from comments.models import Comment
  17.  
  18.  
  19. def post_create(request):
  20.    
  21.     if not request.user.is_authenticated or not request.user.is_superuser:
  22.         raise Http404
  23.  
  24.     form = PostForm(request.POST or None, request.FILES or None)  # request.POST => for form validation
  25.  
  26.     if form.is_valid() and request.method == "POST":
  27.         instance = form.save(commit=False)
  28.         instance.user = request.user
  29.         instance.save()
  30.         messages.success(request, 'Post Created Successfully')  
  31.         return HttpResponseRedirect(instance.get_absolute_url())
  32.    
  33.     context = {'form': form}
  34.     return render(request, 'post_create.html', context)
  35.  
  36. def post_edit(request, id=None):
  37.     post = get_object_or_404(Post, id=id)
  38.     form = PostForm(request.POST or None, request.FILES or None, instance=post)  # request.POST => for form validation
  39.    
  40.     if not request.user.is_authenticated or not request.user.is_superuser:
  41.         raise Http404
  42.    
  43.     if form.is_valid() and request.method == "POST":
  44.         instance = form.save(commit=False)
  45.         instance.save()
  46.         messages.success(request, 'Updates saved!')
  47.         return HttpResponseRedirect(instance.get_absolute_url())
  48.     else:
  49.         messages.error(request, 'Not saved')
  50.    
  51.     context = {
  52.         'title': post.title,
  53.         'post': post,
  54.         'form': form,
  55.     }
  56.     return render(request, 'post_create.html', context=context)
  57.  
  58.  
  59. def post_delete(request, id=None):
  60.    
  61.     if not request.user.is_authenticated or not request.user.is_superuser:
  62.         raise Http404
  63.        
  64.     post = get_object_or_404(Post, id=id)
  65.     post.delete()
  66.     messages.success(request, 'Post Successfully deleted')
  67.  
  68.     return redirect('posts:base')
  69.  
  70.  
  71. def post_list(request):
  72.     post_list = Post.objects.active()  # .filter(draft=False).filter(publish__lte=timezone.now())  # .order_by("-time_stamp")
  73.     if request.user.is_superuser or request.user.is_staff:
  74.         post_list = Post.objects.all()
  75.  
  76.     query = request.GET.get('q')
  77.     if query:
  78.         post_list = Post.objects.all()
  79.         post_list = post_list.filter(
  80.             Q(title__icontains=query) |
  81.             Q(content__icontains=query)
  82.             # Q(user__first_name__icontains=query) |
  83.             # Q(user__last_name__icontains=query)
  84.         ).distinct()
  85.  
  86.     paginator = Paginator(post_list, 5)  # Show 25 posts per page
  87.     # page_request_var = 'page'  # to make it mor dynamic for pagination
  88.     page = request.GET.get('page')
  89.     posts = paginator.get_page(page)
  90.     create_url = reverse('posts:post_create')
  91.    
  92.     context = {
  93.         'post_list': post_list,
  94.         'posts': posts,
  95.         # 'page_request_var': page_request_var,
  96.         'create': create_url,
  97.     }
  98.  
  99.     return render(request, 'base.html', context)
  100.  
  101.  
  102. def post_details(request, id):
  103.     post_list = Post.objects.active()
  104.     post = get_object_or_404(Post, id=id)
  105.     if post.publish > timezone.now().date() or post.draft:
  106.         if not request.user.is_authenticated or not request.user.is_superuser:
  107.             raise Http404
  108.    
  109.     share_string = quote_plus(post.content)
  110.    
  111.     initial_data = {
  112.         "content_type": post.get_content_type,
  113.         "object_id": post.id,
  114.     }
  115.    
  116.     # post read time
  117.     read_time = get_read_time(post.content)
  118.     # print(type(read_time))
  119.    
  120.     form = CommentForm(request.POST or None, initial=initial_data)
  121.    
  122.     if form.is_valid():
  123.         c_type = form.cleaned_data.get('content_type')
  124.         content_type = ContentType.objects.get(model=c_type)
  125.         obj_id = form.cleaned_data.get('object_id')
  126.         content_data = form.cleaned_data.get('content')
  127.         parent_obj = None
  128.         try:
  129.             parent_id = int(request.POST.get('parent_id'))
  130.         except:
  131.             parent_id = None
  132.            
  133.         if parent_id:
  134.             parent_qs = Comment.objects.filter(id=parent_id)
  135.             if parent_qs.exists() and parent_qs.count() == 1:
  136.                 parent_obj = parent_qs.first()
  137.        
  138.         new_comment, created = Comment.objects.get_or_create(
  139.             user = request.user,
  140.             content_type = content_type,
  141.             object_id = obj_id,
  142.             content = content_data,
  143.             parent = parent_obj,
  144.         )
  145.         return HttpResponseRedirect(new_comment.content_object.get_absolute_url())
  146.  
  147.     comments = post.comments # Comment.objects.filter_by_instance(post)  # without @property
  148.  
  149.     context = {
  150.         'post': post,
  151.         'share_string': share_string,
  152.         'comments': comments,
  153.         'comment_form': form,
  154.         'read_time': read_time,
  155.     }
  156.     return render(request, 'post.html', context=context)
  157.  
  158. # About, Contact sections
  159.  
  160. def about(request):
  161.     context = {}
  162.     return render(request, 'about.html', context)
  163.  
  164.  
  165. def contact(request):
  166.     context = {}
  167.     return render(request, 'contact.html', context)
  168.  
  169.  
  170.  
  171. '''
  172. # this for checking if the user is authenticated or not
  173. if request.user.is_authenticated:
  174.        context = {'title': 'this text for authenticated user'}
  175.        return render(request, 'index.html', context=context)
  176.    else:
  177.        context = {'title': 'this text for non authenticated users'}
  178.        return render(request, 'index.html', context=context)
  179.    
  180. '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement