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.
 
 
 
pokercc/news/views.py

129 lines
4.3 KiB

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import loader
from django.urls import reverse
from django.core.paginator import Paginator
from django.conf import settings
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout, update_session_auth_hash
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordChangeForm
from .models import Post, Comment
from .forms import PostForm, CustomUserCreationForm, SigninForm
from datetime import datetime
import logging
import uuid
#Users
def register(request):
if request.method == 'POST':
f = CustomUserCreationForm(request.POST)
if f.is_valid():
f.save()
messages.success(request, 'Account created successfully')
return redirect('register')
else:
f = CustomUserCreationForm()
return render(request, 'news/user/register.html', {'form': f})
def signin(request):
if request.method == 'POST':
f = SigninForm(request.POST)
if f.is_valid():
username = f.cleaned_data['username']
password = f.cleaned_data['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return HttpResponseRedirect(reverse('news:index'))
else:
messages.success(request, 'Sign-in failed')
return HttpResponseRedirect(reverse('news:signin'))
else:
f = SigninForm()
return render(request, 'news/user/signin.html', {'form': f})
@login_required
def logout_view(request):
logout(request)
return HttpResponseRedirect(reverse('news:index'))
@login_required
def account(request):
return render(request, 'news/user/account.html', {})
@login_required
def password_change(request):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
update_session_auth_hash(request, user) # Important!
messages.success(request, 'Your password was successfully updated!')
return render(request, 'news/user/account.html', {})
else:
messages.error(request, 'Please correct the error below.')
else:
form = PasswordChangeForm(request.user)
return render(request, 'news/user/change_password.html', {'form': form})
#Post
def index(request):
latest_post_list = Post.objects.filter(state=1).order_by('-date')
paginator = Paginator(latest_post_list, 25)
page = request.GET.get('page')
posts = paginator.get_page(page)
context = { 'latest_post_list' : posts }
return render(request, 'news/index.html', context)
def post(request, post_id):
post = get_object_or_404(Post, pk=post_id)
return render(request, 'news/post.html', {'post': post})
@login_required
def submission(request):
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = Post.objects.create(author=request.user,date=datetime.today())
post.title = form.cleaned_data['title']
post.body = form.cleaned_data['body']
post.url = form.cleaned_data['url']
filename = str(uuid.uuid4())
handle_uploaded_file(filename, request.FILES['image'])
post.image_url = filename
post.state = 1
post.save()
return HttpResponseRedirect(reverse('news:submitted'))
# if a GET (or any other method) we'll create a blank form
else:
form = PostForm()
return render(request, 'news/submission.html', {'form': form})
def handle_uploaded_file(filename, f):
with open(settings.MEDIA_ROOT + filename, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def submitted(request):
return render(request, 'news/submitted.html', {})
def comment(request, post_id):
comment = Comment(author=request.user,date=datetime.today())
comment.post = get_object_or_404(Post, pk=post_id)
comment.body = request.POST['body']
comment.save()
return HttpResponseRedirect(reverse('news:post', args=(post_id,)))