from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.models import User from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.views.generic import ( ListView, DetailView, CreateView, UpdateView, DeleteView, ) from django.http import HttpResponseRedirect from django.urls import reverse_lazy, reverse from .models import Article from users.models import Profile # Create your views here. @login_required def about (request): createProfileIfNotExist(request) if checkValues(request) is False: return redirect('values') return render (request, 'news/about.html') @login_required def howto (request): createProfileIfNotExist(request) if checkValues(request) is False: return redirect('values') return render (request, 'news/howto.html') def policy (request): return render (request, 'news/policy.html') @login_required def home (request): createProfileIfNotExist(request) if checkValues(request) is False: return redirect('values') profile = request.user.profile social = profile.socialScore economic = profile.economicScore A_L = 'authoritarian_left' A_R = 'authoritarian_right' L_L = 'libertarian_left' L_R = 'libertarian_right' if social > 0: # Auth if economic > 0: #AuthRight articles = Article.objects.exclude(tag=A_R) elif economic < 0: #AuthLeft articles = Article.objects.exclude(tag=A_L) else: #AuthCenter articles = Article.objects.exclude(tag=A_L).exclude(tag=A_R) elif social < 0: # Lib if social > 0: #LibRight articles = Article.objects.exclude(tag=L_R) elif social < 0: #LibLeft articles = Article.objects.exclude(tag=L_L) else: #LibCenter articles = Article.objects.exclude(tag=L_L).exclude(tag=L_R) else: #___Center if social > 0: # RightCenter articles = Article.objects.exclude(tag=L_L).exclude(tag=A_L) if social < 0: # LeftCenter articles = Article.objects.exclude(tag=L_R).exclude(tag=A_R) else: # Center articles = Article.objects.all() context = { 'articles': articles } return render (request, 'news/home.html', context) class ArticleListView(ListView): model = Article template_name = "news/home.html" context_object_name='articles' ordering = ['-date_published'] paginate_by = 8 class UserArticleListView(ListView): model = Article template_name = "news/user_article.html" context_object_name='articles' paginate_by = 8 def get_queryset(self): user = get_object_or_404(User, username=self.kwargs.get('username')) return Article.objects.filter(author=user).order_by('-date_published') class ArticleDetailView(DetailView): model = Article def get_context_data(self, *args, **kwargs): context = super(ArticleDetailView, self).get_context_data(**kwargs) article = get_object_or_404(Article, id=self.kwargs['pk']) total_likes = article.total_likes context["total_likes"] = total_likes return context class ArticleCreateView(LoginRequiredMixin, CreateView): model = Article fields=['headline','header','header_caption','content','tag'] def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form) class ArticleUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView): model = Article fields=['headline','header','header_caption','content','tag'] def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form) def test_func(self): article = self.get_object() return self.request.user == article.author class ArticleDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): model = Article success_url='/' def test_func(self): article = self.get_object() return self.request.user == article.author def LikeView (request, pk): article = get_object_or_404(Article, id=request.POST.get('article_id')) article.likes.add(request.user) return HttpResponseRedirect(reverse('article-detail', args=[str(pk)])) def createProfileIfNotExist (request): if request.user.is_authenticated and Profile.objects.filter(user=request.user).count() < 1: Profile.objects.create(user=request.user).save() def checkValues (request): if request.user.is_authenticated and Profile.objects.filter(user=request.user).count() is 1: profile = Profile.objects.filter(user=request.user).first() return profile.gaveValues return True