matacoder

Untitled

Sep 5th, 2020
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.95 KB | None | 0 0
  1. from django.contrib.auth.decorators import login_required
  2. from django.core.paginator import Paginator
  3. from django.shortcuts import get_object_or_404, redirect, render, reverse, get_list_or_404
  4.  
  5. from .forms import PostForm, CommentForm
  6. from .models import Group, Post, User, Follow
  7. from django.views.decorators.cache import cache_page
  8.  
  9.  
  10. # @cache_page(20)
  11. def index(request):
  12.     username = request.user
  13.     post_list = Post.objects.order_by("-pub_date").all()
  14.     paginator = Paginator(post_list, 10)
  15.     # показывать по 10 записей на странице.
  16.     page_number = request.GET.get("page")
  17.     # переменная в URL с номером запрошенной страницы
  18.     page = paginator.get_page(page_number)
  19.     # получить записи с нужным смещением
  20.     return render(
  21.         request,
  22.         "posts/index.html",
  23.         {
  24.             "page": page,
  25.             "paginator": paginator,
  26.             "profile": profile_extract(username)
  27.         }
  28.     )
  29.  
  30.  
  31. def add_comment(request, username, post_id):
  32.     post = get_object_or_404(Post, pk=post_id, author__username=username)
  33.     url = reverse(
  34.         "post_single",
  35.         kwargs={"username": username, "post_id": post_id}
  36.     )
  37.     if request.method == "POST":
  38.         form = CommentForm(request.POST)
  39.         if form.is_valid():
  40.             form.instance.author = request.user
  41.             form.instance.post = post
  42.             form.save()
  43.             return redirect(url)
  44.     form = CommentForm()
  45.     return redirect(url)
  46.  
  47.  
  48. # @cache_page(60 * 15)
  49. def group_posts(request, slug):
  50.     username = request.user
  51.     group = get_object_or_404(Group, slug=slug)
  52.     posts = group.group_posts.all()
  53.     paginator = Paginator(posts, 10)
  54.     page_number = request.GET.get("page")
  55.     page = paginator.get_page(page_number)
  56.     return render(
  57.         request, "posts/group.html",
  58.         {
  59.             "page": page,
  60.             "paginator": paginator,
  61.             "group": group,
  62.             "profile": profile_extract(username)}
  63.     )
  64.  
  65.  
  66. @login_required
  67. def new_post(request):
  68.     if request.method == "POST":
  69.         form = PostForm(request.POST, files=request.FILES)
  70.         if form.is_valid():
  71.             form.instance.author = request.user
  72.             form.save()
  73.             url = reverse('index')
  74.             return redirect(url)
  75.     form = PostForm()
  76.     labels = {
  77.         "title": "Новая запись",
  78.         "button": "Добавить новую запись"
  79.     }
  80.     return render(
  81.         request, "posts/new_post.html", {"form": form, "labels": labels}
  82.     )
  83.  
  84.  
  85. def profile_extract(username):
  86.     """ Get data for profile template """
  87.     author = get_object_or_404(User, username=username)
  88.     # Note that we swap followers and following
  89.     # because it is not ours profile but author's
  90.     following = author.follower.count()
  91.     followers = author.following.count()
  92.     posts_count = author.posts.count()
  93.     return {
  94.         "author": author,
  95.         "followers": followers,
  96.         "following": following,
  97.         "posts_count": posts_count
  98.     }
  99.  
  100.  
  101. # @cache_page(60 * 15)
  102. def profile(request, username):
  103.     user = request.user
  104.     author = get_object_or_404(User, username=username)
  105.     posts = author.posts.all()
  106.     paginator = Paginator(posts, 10)
  107.     page_number = request.GET.get("page")
  108.     page = paginator.get_page(page_number)
  109.     if Follow.objects.filter(user=user, author=author):
  110.         following = True
  111.     else:
  112.         following = False
  113.     return render(
  114.         request, "posts/profile.html",
  115.         {
  116.             "page": page,
  117.             "paginator": paginator,
  118.             "profile": profile_extract(username),
  119.             "author": author,
  120.             'following': following
  121.         }
  122.     )
  123.  
  124.  
  125. # @cache_page(60 * 15)
  126. def post_view(request, username, post_id):
  127.     post = get_object_or_404(Post, pk=post_id, author__username=username)
  128.     author = get_object_or_404(User, username=username)  # pass test
  129.     comments = post.post_comments.all()
  130.     form = CommentForm()
  131.     return render(
  132.         request, "posts/post.html",
  133.         {
  134.             "post": post,
  135.             "profile": profile_extract(username),
  136.             "username": author,  # pass test
  137.             "form": form,
  138.             "items": comments
  139.         }
  140.     )
  141.  
  142.  
  143. @login_required
  144. def post_edit(request, username, post_id):
  145.     template_name = "posts/new_post.html"
  146.     post = get_object_or_404(Post, pk=post_id, author__username=username)
  147.     url = reverse(
  148.         "post_single",
  149.         kwargs={"username": username, "post_id": post_id}
  150.     )
  151.     if post.author != request.user:
  152.         return redirect(url)
  153.  
  154.     form = PostForm(
  155.         request.POST or None,
  156.         files=request.FILES or None,
  157.         instance=post
  158.     )
  159.  
  160.     if request.POST and form.is_valid():
  161.         form.save()
  162.         return redirect(url)
  163.  
  164.     labels = {
  165.         "title": "Редактировать запись",
  166.         "button": "Сохранить"
  167.     }
  168.  
  169.     return render(
  170.         request,
  171.         template_name,
  172.         {
  173.             "form": form,
  174.             "labels": labels,
  175.             "post": post
  176.         }
  177.     )
  178.  
  179.  
  180. def page_not_found(request, exception):
  181.     # Переменная exception содержит отладочную информацию,
  182.     # выводить её в шаблон пользователской страницы 404 мы не станем
  183.     return render(
  184.         request,
  185.         "misc/404.html",
  186.         {"path": request.path},
  187.         status=404
  188.     )
  189.  
  190.  
  191. def server_error(request):
  192.     return render(request, "misc/500.html", status=500)
  193.  
  194.  
  195. @login_required
  196. def follow_index(request):
  197.     logged = request.user
  198.     followings = get_list_or_404(Follow, user=logged)
  199.     posts = []
  200.     for following in followings:
  201.         author = get_object_or_404(User, username=following.author)
  202.         posts += author.posts.all()
  203.     paginator = Paginator(posts, 10)
  204.     page_number = request.GET.get("page")
  205.     page = paginator.get_page(page_number)
  206.     return render(
  207.         request, "posts/follow.html",
  208.         {
  209.             "page": page,
  210.             "paginator": paginator,
  211.             'profile': profile_extract(logged)
  212.         }
  213.     )
  214.  
  215.  
  216. @login_required
  217. def profile_follow(request, username):
  218.     url = reverse('profile', args=[username])
  219.     user = request.user
  220.     author = get_object_or_404(User, username=username)
  221.     if Follow.objects.filter(user=user, author=author) or author == user:
  222.         return redirect(url)
  223.     Follow.objects.create(
  224.             user=user, author=author
  225.         )
  226.     return redirect(url)
  227.  
  228.  
  229. @login_required
  230. def profile_unfollow(request, username):
  231.     url = reverse('profile', args=[username])
  232.     user = request.user
  233.     author = get_object_or_404(User, username=username)
  234.     instance = get_object_or_404(Follow, user=user, author__exact=author)
  235.     instance.delete()
  236.     return redirect(url)
  237.  
Advertisement
Add Comment
Please, Sign In to add comment