##// END OF EJS Templates
Added thread bumping.
Added thread bumping.

File last commit:

r24:bb515fee default
r25:beac4c3a default
Show More
views.py
124 lines | 3.6 KiB | text/x-python | PythonLexer
from django.template import RequestContext
from boards import forms
import boards
from boards.forms import NewThreadForm
from boards.models import Post, Admin, Tag
from django.shortcuts import render, get_list_or_404, redirect
from django.http import HttpResponseRedirect, Http404
def index(request):
context = RequestContext(request)
if request.method == 'POST':
return new_post(request)
else:
threads = Post.objects.get_threads()
context['threads'] = None if len(threads) == 0 else threads
context['form'] = forms.NewThreadForm()
return render(request, 'posting_general.html',
context)
def new_post(request, thread_id=boards.models.NO_PARENT):
"""Add a new post (in thread or as a reply)."""
form = NewThreadForm(request.POST, request.FILES)
title = request.POST['title']
text = request.POST['text']
if 'image' in request.FILES.keys():
image = request.FILES['image']
else:
image = None
ip = request.META['REMOTE_ADDR']
tags = []
if thread_id == boards.models.NO_PARENT:
tag_strings = request.POST['tags']
if tag_strings:
tag_strings = tag_strings.split(',')
for tag_name in tag_strings:
tag_name = tag_name.strip()
if len(tag_name) > 0:
tag, created = Tag.objects.get_or_create(name=tag_name)
tags.append(tag)
# TODO Add a possibility to define a link image instead of an image file.
# If a link is given, download the image automatically.
post = Post.objects.create_post(title=title, text=text, ip=ip,
parent_id=thread_id, image=image,
tags=tags)
thread_to_show = (post.id if thread_id == boards.models.NO_PARENT else
thread_id)
return redirect(thread, post_id=thread_to_show)
def tag(request, tag_name):
"""Get all tag threads (posts without a parent)."""
tag = Tag.objects.get(name=tag_name)
threads = get_list_or_404(Post, tags=tag)
if request.method == 'POST':
return new_post(request)
else:
context = RequestContext(request)
context['threads'] = None if len(threads) == 0 else threads
context['tag'] = tag_name
context['form'] = forms.NewThreadForm(initial={'tags': tag_name})
return render(request, 'posting_general.html',
context)
def thread(request, post_id):
"""Get all thread posts"""
if request.method == 'POST':
return new_post(request, post_id)
else:
# TODO Show 404 if there is no such thread
posts = Post.objects.get_thread(post_id)
context = RequestContext(request)
context['posts'] = posts
context['form'] = forms.NewThreadForm()
return render(request, 'thread.html', context)
def login(request):
"""Log in as admin"""
if 'name' in request.POST and 'password' in request.POST:
request.session['admin'] = False
isAdmin = len(Admin.objects.filter(name=request.POST['name'],
password=request.POST[
'password'])) > 0
if isAdmin:
request.session['admin'] = True
response = HttpResponseRedirect('/')
else:
response = render(request, 'login.html', {'error': 'Login error'})
else:
response = render(request, 'login.html', {})
return response
def logout(request):
request.session['admin'] = False
return HttpResponseRedirect('/')