Browse Source

Рефакторинг комментов.

Вынес операции в отдельный модуль.
master
Дмитрий 3 years ago
parent
commit
e208fb293e
  1. 14
      blog/comments/services.py
  2. 7
      blog/comments/views.py
  3. 10
      blog/posts/views.py

14
blog/comments/services.py

@ -0,0 +1,14 @@
import base64
def encode_nickname(nickname: str) -> bytes:
"""Кодирует nickname в base64."""
return base64.b64encode(bytes(nickname, "utf-8"))
def decode_nickname(encoded_nickname: str) -> str:
"""Декодирует base64, содержащийся в строке encoded_nickname. """
# пришлось отрезать кусок b из самой строки, потому что байты были
# всунуты в строку, и base64 не понимал
return base64.b64decode(encoded_nickname[1:]).decode()

7
blog/comments/views.py

@ -8,6 +8,7 @@ from django.db import IntegrityError
import hashlib
from typing import Union
from . import services
def leave_comment(request, post_id):
@ -36,7 +37,7 @@ def leave_comment(request, post_id):
# если секрет не совпал, то польозхватель Anonym
author = get_or_create_author(request.POST["name"], request.POST["secret"])
nickname = request.POST["name"]
nickname = request.POST["name"].strip()
if not author:
post.comment_set.create(
@ -52,7 +53,7 @@ def leave_comment(request, post_id):
reply=parent,
)
response = HttpResponseRedirect(reverse("posts:detail", args=(post.id,)))
response.set_cookie("nickname", nickname, max_age=300)
response.set_cookie("nickname", services.encode_nickname(nickname), max_age=300)
return response
@ -66,7 +67,7 @@ def get_or_create_author(name: str, secret: str) -> Union[CommentAuthor, None]:
try:
author, result = CommentAuthor.objects.get_or_create(
author_name=name, author_secret_hash=hash
author_name=name.strip(), author_secret_hash=hash
)
except IntegrityError:
# если имя/хеш не совпадают, то игнорируем такого автора и отображаем ником

10
blog/posts/views.py

@ -4,7 +4,7 @@ from django.http import HttpResponse
from .models import Post
from comments.models import Comment
import re
from comments import services as comments_services
def index(request):
@ -16,12 +16,14 @@ def index(request):
def detail(request, post_id):
"""Страница с просмотром поста."""
# вынести отсюда все. Также надо обработать текст поста тут.
post = get_object_or_404(Post, pk=post_id)
comments = post.comment_set.all()
comments_count = comments.count()
nickname = (
request.COOKIES.get("nickname") if request.COOKIES.get("nickname") else ""
)
_nickname = request.COOKIES.get("nickname")
nickname = comments_services.decode_nickname(_nickname) if _nickname else ""
return render(
request,
"posts/post.html",

Loading…
Cancel
Save