You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
4.2 KiB
102 lines
4.2 KiB
from django.contrib import messages |
|
from django.contrib.auth import authenticate, login |
|
from django.contrib.auth.decorators import login_required |
|
from django.contrib.auth.mixins import LoginRequiredMixin |
|
from django.http import HttpRequest, HttpResponseRedirect |
|
from django.shortcuts import render, redirect |
|
from django.urls import reverse |
|
from django.views import View |
|
from requests import request |
|
|
|
from cms import promoters |
|
from cms.forms import ArticleForm, UserForm |
|
from cms.models import Article |
|
from cms.tasks import delayed_post |
|
from datetime import datetime, timezone |
|
|
|
|
|
class ArticleView(LoginRequiredMixin, View): |
|
def post(self, request: HttpRequest): |
|
post_data = request.POST |
|
if 'publication_time' not in post_data or post_data['publication_time'] == "": |
|
# Значение publication_time не указано |
|
article = Article.objects.create(body=post_data['body'], |
|
link=post_data['link'], |
|
publication_time=datetime.now()) |
|
|
|
marketer = promoters.Marketer(article) |
|
try: |
|
marketer.promote() |
|
article.is_published = 1 |
|
message_type = messages.SUCCESS |
|
message_text = 'Продвижение статьи прошло успешно' |
|
article.is_published = True |
|
article.save() |
|
except promoters.PromoteError as exc: |
|
message_type = messages.ERROR |
|
message_text = 'Произошла ошибка: %s' % str(exc) |
|
messages.add_message(request=request, |
|
level=message_type, |
|
message=message_text) |
|
|
|
else: |
|
# Значение publication_time указано |
|
publication_time = post_data['publication_time'] |
|
publication_time = datetime.fromisoformat(publication_time) |
|
publication_time = publication_time.astimezone(timezone.utc) |
|
article = Article.objects.create(body=post_data['body'], |
|
link=post_data['link'], |
|
publication_time=publication_time) |
|
|
|
delayed_post.apply_async(args=(article.id, publication_time), eta=publication_time) |
|
return HttpResponseRedirect(reverse('new-article')) |
|
|
|
|
|
@login_required |
|
def new_article(request): |
|
article_form = ArticleForm() |
|
article_context = { |
|
'new_article_form': article_form |
|
} |
|
return render(request, |
|
template_name='articles/new.html', |
|
context=article_context) |
|
|
|
|
|
class AuthenticationView(View): |
|
def get(self, request, *args, **kwargs): |
|
user_form = UserForm() |
|
auth_context = { |
|
'user_form': user_form, |
|
} |
|
return render(request, |
|
'user/sign_in.html', |
|
context=auth_context) |
|
|
|
def post(self, request, *args, **kwargs): |
|
username = request.POST['username'] |
|
password = request.POST['password'] |
|
authenticated_user = authenticate(username=username, |
|
password=password) |
|
if authenticated_user is None: |
|
messages.add_message(request, |
|
messages.ERROR, |
|
'Неправильное имя пользователя и/или пароль') |
|
return HttpResponseRedirect(reverse('authenticate')) |
|
else: |
|
messages.add_message(request, |
|
messages.SUCCESS, |
|
'Поздравляю, вы вошли успешно') |
|
login(request, |
|
user=authenticated_user) |
|
return HttpResponseRedirect(reverse('new-article')) |
|
|
|
|
|
def plannedView(request): |
|
data = Article.objects.filter(is_published=False) |
|
return render(request, 'articles/planned.html', context={'post':data}) |
|
|
|
def articleDelete(request, id): |
|
article = Article.objects.get(id=id) |
|
article.delete() |
|
return redirect('planned') |