NewViewsNews/news/views.py
2020-08-15 19:59:01 -04:00

84 lines
2.3 KiB
Python

from django.shortcuts import render, get_object_or_404
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import (
ListView,
DetailView,
CreateView,
UpdateView,
DeleteView,
)
from .models import Article
from users.models import Profile
# Create your views here.
def about (request):
createProfileIfNotExist(request)
return render (request, 'news/about.html')
def home (request):
createProfileIfNotExist(request)
context = {
'articles': Article.objects.all()
}
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
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 createProfileIfNotExist (request):
if request.user.is_authenticated and Profile.objects.filter(user=request.user).count() < 1:
Profile.objects.create(user=request.user).save()