##// END OF EJS Templates
Using opening post ID from cache, not passing it to the post view
Using opening post ID from cache, not passing it to the post view

File last commit:

r617:e22f203b default
r621:59a1deab default
Show More
thread.py
121 lines | 4.0 KiB | text/x-python | PythonLexer
neko259
Rewriting views to class-based
r542 import string
from django.core.urlresolvers import reverse
from django.db import transaction
from django.http import Http404
from django.shortcuts import get_object_or_404, render, redirect
from boards import utils
from boards.forms import PostForm, PlainErrorList
from boards.models import Post, Ban, Tag
from boards.views.banned import BannedView
from boards.views.base import BaseBoardView, PARAMETER_FORM
from boards.views.posting_mixin import PostMixin
import neboard
MODE_GALLERY = 'gallery'
MODE_NORMAL = 'normal'
class ThreadView(BaseBoardView, PostMixin):
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 def get(self, request, post_id, mode=MODE_NORMAL, form=None):
neko259
Rewriting views to class-based
r542 opening_post = get_object_or_404(Post, id=post_id)
# If this is not OP, don't show it as it is
if not opening_post.is_opening():
raise Http404
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 if not form:
form = PostForm(error_class=PlainErrorList)
neko259
Rewriting views to class-based
r542
neko259
Made getting post thread more generic and scalable
r617 thread_to_show = opening_post.get_thread()
neko259
Rewriting views to class-based
r542
context = self.get_context_data(request=request)
context[PARAMETER_FORM] = form
context["last_update"] = utils.datetime_to_epoch(
thread_to_show.last_edit_time)
context["thread"] = thread_to_show
if MODE_NORMAL == mode:
context['bumpable'] = thread_to_show.can_bump()
if context['bumpable']:
neko259
Fixed PPD cache. Optimized thread view a little bit
r569 context['posts_left'] = neboard.settings.MAX_POSTS_PER_THREAD \
- thread_to_show.get_reply_count()
neko259
Rewriting views to class-based
r542 context['bumplimit_progress'] = str(
float(context['posts_left']) /
neboard.settings.MAX_POSTS_PER_THREAD * 100)
neko259
Fixed PPD cache. Optimized thread view a little bit
r569 context['opening_post'] = thread_to_show.get_opening_post()
neko259
Rewriting views to class-based
r542
document = 'boards/thread.html'
elif MODE_GALLERY == mode:
neko259
Fixed PPD cache. Optimized thread view a little bit
r569 posts = thread_to_show.get_replies()
neko259
Rewriting views to class-based
r542 context['posts'] = posts.filter(image_width__gt=0)
document = 'boards/thread_gallery.html'
else:
raise Http404
return render(request, document, context)
def post(self, request, post_id, mode=MODE_NORMAL):
opening_post = get_object_or_404(Post, id=post_id)
# If this is not OP, don't show it as it is
if not opening_post.is_opening():
raise Http404
neko259
Made getting post thread more generic and scalable
r617 if not opening_post.get_thread().archived:
neko259
Rewriting views to class-based
r542 form = PostForm(request.POST, request.FILES,
error_class=PlainErrorList)
form.session = request.session
if form.is_valid():
return self.new_post(request, form, opening_post)
if form.need_to_ban:
# Ban user because he is suspected to be a bot
self._ban_current_user(request)
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 return self.get(request, post_id, mode, form)
neko259
Rewriting views to class-based
r542
@transaction.atomic
def new_post(self, request, form, opening_post=None, html_response=True):
"""Add a new post (in thread or as a reply)."""
ip = utils.get_client_ip(request)
is_banned = Ban.objects.filter(ip=ip).exists()
if is_banned:
if html_response:
return redirect(BannedView().as_view())
else:
return
data = form.cleaned_data
title = data['title']
text = data['text']
text = self._remove_invalid_links(text)
if 'image' in data.keys():
image = data['image']
else:
image = None
tags = []
neko259
Made getting post thread more generic and scalable
r617 post_thread = opening_post.get_thread()
neko259
Rewriting views to class-based
r542
post = Post.objects.create_post(title=title, text=text, ip=ip,
thread=post_thread, image=image,
tags=tags,
user=self._get_user(request))
thread_to_show = (opening_post.id if opening_post else post.id)
if html_response:
if opening_post:
neko259
Minor style fixes to view classes. Fixed ban view
r561 return redirect(reverse(
'thread',
kwargs={'post_id': thread_to_show}) + '#' + str(post.id))