##// END OF EJS Templates
Even more refactoring
Even more refactoring

File last commit:

r2005:00eae4e7 default
r2005:00eae4e7 default
Show More
all_threads.py
137 lines | 4.4 KiB | text/x-python | PythonLexer
neko259
Throw error 404 when trying to open invalid page in threads list
r977 from django.core.paginator import EmptyPage
from django.http import Http404
neko259
Rewriting views to class-based
r542 from django.shortcuts import render, redirect
neko259
Adapt to django-2.0
r1986 from django.urls import reverse
neko259
Use CSRF protection
r1422 from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_protect
neko259
Rewriting views to class-based
r542
neko259
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)
r1997 from boards import settings
neko259
Even more refactoring
r2005 from boards.abstracts.constants import PARAM_PAGE
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596 from boards.abstracts.paginator import get_paginator
neko259
Adapt to django-2.0
r1986 from boards.abstracts.settingsmanager import get_settings_manager, \
SETTING_ONLY_FAVORITES
neko259
Rewriting views to class-based
r542 from boards.forms import ThreadForm, PlainErrorList
neko259
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)
r1997 from boards.models import Post, Thread
neko259
Code cleanup part 2
r722 from boards.views.base import BaseBoardView, CONTEXT_FORM
neko259
Adapt to django-2.0
r1986 from boards.views.mixins import FileUploadMixin, PaginatedMixin, \
DispatcherMixin, PARAMETER_METHOD
neko259
Some more constant extracts
r2003 from boards.settings import SECTION_VIEW, SECTION_FORMS
neko259
Views refactoring
r900
neko259
Even more refactoring
r2005 ORDER_BUMP = 'bump'
PARAM_ORDER = 'order'
neko259
Code cleanup part 2
r722 FORM_TAGS = 'tags'
FORM_TEXT = 'text'
FORM_TITLE = 'title'
FORM_IMAGE = 'image'
neko259
Added a form field for additional threads list in multi-thread posts
r1077 FORM_THREADS = 'threads'
neko259
Code cleanup part 2
r722
neko259
Refactoring in all threads view
r634 TAG_DELIMITER = ' '
neko259
Rewriting views to class-based
r542 PARAMETER_CURRENT_PAGE = 'current_page'
PARAMETER_PAGINATOR = 'paginator'
PARAMETER_THREADS = 'threads'
neko259
Added ability to get page urls of paginators
r1377 PARAMETER_ADDITIONAL = 'additional_params'
neko259
Show max file size in the posting templates
r1396 PARAMETER_MAX_FILE_SIZE = 'max_file_size'
neko259
New RSS url model with proper links (no page attribute)
r1399 PARAMETER_RSS_URL = 'rss_url'
neko259
Show max file number in the forms
r1771 PARAMETER_MAX_FILES = 'max_files'
neko259
Rewriting views to class-based
r542
neko259
Renamed posting_general.html to all_threads.html to clarify its purpose
r1164 TEMPLATE = 'boards/all_threads.html'
neko259
Rewriting views to class-based
r542 DEFAULT_PAGE = 1
neko259
Re-added the functionality of 'add the tag we are standing on to the form'
r1738
neko259
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)
r1997 class AllThreadsView(FileUploadMixin, BaseBoardView, PaginatedMixin,
DispatcherMixin):
neko259
Rewriting views to class-based
r542
neko259
Re-added the functionality of 'add the tag we are standing on to the form'
r1738 tag_name = ''
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 def __init__(self):
self.settings_manager = None
super(AllThreadsView, self).__init__()
neko259
Added hidden tags functionality
r635
neko259
Use CSRF protection
r1422 @method_decorator(csrf_protect)
neko259
Use GET parameter to specify a page instead of different url reversers
r1204 def get(self, request, form: ThreadForm=None):
neko259
Even more refactoring
r2005 page = request.GET.get(PARAM_PAGE, DEFAULT_PAGE)
neko259
Use GET parameter to specify a page instead of different url reversers
r1204
neko259
Fixed tag threads view
r919 params = self.get_context_data(request=request)
neko259
Rewriting views to class-based
r542
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 if not form:
neko259
Re-added the functionality of 'add the tag we are standing on to the form'
r1738 form = ThreadForm(error_class=PlainErrorList,
neko259
Even more refactoring
r2005 initial={FORM_TAGS: self.tag_name})
neko259
Rewriting views to class-based
r542
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 self.settings_manager = get_settings_manager(request)
neko259
Added link to the pub-time sorted thread list
r1376
threads = self.get_threads()
neko259
Even more refactoring
r2005 order = request.GET.get(PARAM_ORDER, ORDER_BUMP)
if order == ORDER_BUMP:
neko259
Added link to the pub-time sorted thread list
r1376 threads = threads.order_by('-bump_time')
else:
neko259
Removed multitread posts 'feature'
r1704 threads = threads.filter(replies__opening=True)\
.order_by('-replies__pub_time')
neko259
Added 'interesting' url for viewing threads from favorite tags only
r1472 threads = threads.distinct()
neko259
Added link to the pub-time sorted thread list
r1376
neko259
Even more refactoring
r2005 paginator = get_paginator(threads, settings.get_int(
SECTION_VIEW, 'ThreadsPerPage'))
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596 paginator.current_page = int(page)
neko259
Rewriting views to class-based
r542
neko259
Throw error 404 when trying to open invalid page in threads list
r977 try:
threads = paginator.page(page).object_list
except EmptyPage:
raise Http404()
neko259
Rewriting views to class-based
r542
neko259
Fixed calls to render shortcut to use dict instead of context instance
r918 params[PARAMETER_THREADS] = threads
params[CONTEXT_FORM] = form
neko259
Show max file size in the posting templates
r1396 params[PARAMETER_MAX_FILE_SIZE] = self.get_max_upload_size()
neko259
New RSS url model with proper links (no page attribute)
r1399 params[PARAMETER_RSS_URL] = self.get_rss_url()
neko259
Some more constant extracts
r2003 params[PARAMETER_MAX_FILES] = settings.get_int(SECTION_FORMS, 'MaxFileCount')
neko259
Rewriting views to class-based
r542
neko259
Added ability to get page urls of paginators
r1377 paginator.set_url(self.get_reverse_url(), request.GET.dict())
neko259
Moved pagination related stuff to the mixin
r1854 params.update(self.get_page_context(paginator, page))
neko259
Rewriting views to class-based
r542
neko259
Fixed calls to render shortcut to use dict instead of context instance
r918 return render(request, TEMPLATE, params)
neko259
Rewriting views to class-based
r542
neko259
Use CSRF protection
r1422 @method_decorator(csrf_protect)
neko259
Use GET parameter to specify a page instead of different url reversers
r1204 def post(self, request):
neko259
Switch to show only favorite tags (BB-94)
r1691 if PARAMETER_METHOD in request.POST:
self.dispatch_method(request)
neko259
Even more refactoring
r2005 return self.get_reverse_url()
neko259
Switch to show only favorite tags (BB-94)
r1691
neko259
Rewriting views to class-based
r542 form = ThreadForm(request.POST, request.FILES,
error_class=PlainErrorList)
form.session = request.session
if form.is_valid():
neko259
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)
r1997 return Post.objects.create_from_form(request, form, None)
neko259
Rewriting views to class-based
r542 if form.need_to_ban:
# Ban user because he is suspected to be a bot
self._ban_current_user(request)
neko259
Use GET parameter to specify a page instead of different url reversers
r1204 return self.get(request, form)
neko259
Rewriting views to class-based
r542
neko259
Added ability to get page urls of paginators
r1377 def get_reverse_url(self):
return reverse('index')
neko259
Small refactoring of threads view
r1374
neko259
Rewriting views to class-based
r542 def get_threads(self):
neko259
Refactoring in all threads view
r634 """
Gets list of threads that will be shown on a page.
"""
neko259
Show only favorite tags' threads in index view, not tag view
r1692 threads = Thread.objects\
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 .exclude(tags__in=self.settings_manager.get_hidden_tags())
neko259
Show only favorite tags' threads in index view, not tag view
r1692 if self.settings_manager.get_setting(SETTING_ONLY_FAVORITES):
fav_tags = self.settings_manager.get_fav_tags()
if len(fav_tags) > 0:
threads = threads.filter(tags__in=fav_tags)
return threads
neko259
New RSS url model with proper links (no page attribute)
r1399
def get_rss_url(self):
return self.get_reverse_url() + 'rss/'
neko259
Switch to show only favorite tags (BB-94)
r1691
def toggle_fav(self, request):
settings_manager = get_settings_manager(request)
settings_manager.set_setting(SETTING_ONLY_FAVORITES,
not settings_manager.get_setting(SETTING_ONLY_FAVORITES, False))