##// END OF EJS Templates
Moved 404 page to class-based views
Moved 404 page to class-based views

File last commit:

r555:89908dc2 1.7-dev
r555:89908dc2 1.7-dev
Show More
__init__.py
172 lines | 4.5 KiB | text/x-python | PythonLexer
neko259
Moved views to a folder-based model to split it into different files
r443 __author__ = 'neko259'
import hashlib
from django.core import serializers
from django.core.urlresolvers import reverse
neko259
Rewriting views to class-based
r542 from django.http import HttpResponseRedirect
neko259
Moved views to a folder-based model to split it into different files
r443 from django.http.response import HttpResponse
from django.template import RequestContext
from django.shortcuts import render, redirect, get_object_or_404
from django.utils import timezone
from django.db import transaction
from django.views.decorators.cache import cache_page
from django.views.i18n import javascript_catalog
import boards
neko259
Made settings view class-based
r547 from boards.forms import PlainErrorList
neko259
Rewriting views to class-based
r542 from boards.models import Post, Tag, Ban, User
neko259
Moved login view to a separate class. Refactored thread and all threads views
r544 from boards.models.post import SETTING_MODERATE
neko259
Moved views to a folder-based model to split it into different files
r443 from boards.models.user import RANK_USER
from boards import authors
import neboard
neko259
Rewriting views to class-based
r542
neko259
Moved views to a folder-based model to split it into different files
r443
BAN_REASON_SPAM = 'Autoban: spam bot'
neko259
Using django paginator instead of manual pagination
r493 DEFAULT_PAGE = 1
neko259
Moved views to a folder-based model to split it into different files
r443
neko259
Using django paginator instead of manual pagination
r493
neko259
Moved views to a folder-based model to split it into different files
r443
@transaction.atomic
def tag_subscribe(request, tag_name):
"""Add tag to favorites"""
user = _get_user(request)
tag = get_object_or_404(Tag, name=tag_name)
if not tag in user.fav_tags.all():
user.add_tag(tag)
return _redirect_to_next(request)
@transaction.atomic
def tag_unsubscribe(request, tag_name):
"""Remove tag from favorites"""
user = _get_user(request)
tag = get_object_or_404(Tag, name=tag_name)
if tag in user.fav_tags.all():
user.remove_tag(tag)
return _redirect_to_next(request)
def static_page(request, name):
"""Show a static page that needs only tags list and a CSS"""
context = _init_default_context(request)
return render(request, 'boards/staticpages/' + name + '.html', context)
neko259
Added a todo to the post api method
r546 # TODO This has to be moved under the api module
neko259
Moved views to a folder-based model to split it into different files
r443 def api_get_post(request, post_id):
"""
Get the JSON of a post. This can be
used as and API for external clients.
"""
post = get_object_or_404(Post, id=post_id)
json = serializers.serialize("json", [post], fields=(
"pub_time", "_text_rendered", "title", "text", "image",
"image_width", "image_height", "replies", "tags"
))
return HttpResponse(content=json)
@cache_page(86400)
def cached_js_catalog(request, domain='djangojs', packages=None):
return javascript_catalog(request, domain, packages)
neko259
Rewriting views to class-based
r542 # TODO This method is deprecated and should be removed after switching to
# class-based view
neko259
Moved views to a folder-based model to split it into different files
r443 def _get_theme(request, user=None):
"""Get user's CSS theme"""
if not user:
user = _get_user(request)
theme = user.get_setting('theme')
if not theme:
theme = neboard.settings.DEFAULT_THEME
return theme
neko259
Rewriting views to class-based
r542 # TODO This method is deprecated and should be removed after switching to
# class-based view
neko259
Moved views to a folder-based model to split it into different files
r443 def _init_default_context(request):
"""Create context with default values that are used in most views"""
context = RequestContext(request)
user = _get_user(request)
context['user'] = user
context['tags'] = user.get_sorted_fav_tags()
context['posts_per_day'] = float(Post.objects.get_posts_per_day())
theme = _get_theme(request, user)
context['theme'] = theme
context['theme_css'] = 'css/' + theme + '/base_page.css'
# This shows the moderator panel
moderate = user.get_setting(SETTING_MODERATE)
if moderate == 'True':
context['moderator'] = user.is_moderator()
else:
context['moderator'] = False
return context
neko259
Rewriting views to class-based
r542 # TODO This method is deprecated and should be removed after switching to
# class-based view
neko259
Moved views to a folder-based model to split it into different files
r443 def _get_user(request):
"""
Get current user from the session. If the user does not exist, create
a new one.
"""
session = request.session
if not 'user_id' in session:
request.session.save()
md5 = hashlib.md5()
md5.update(session.session_key)
new_id = md5.hexdigest()
neko259
Added some security to prevent generation of the same user ids
r485 while User.objects.filter(user_id=new_id).exists():
md5.update(str(timezone.now()))
new_id = md5.hexdigest()
neko259
Moved views to a folder-based model to split it into different files
r443 time_now = timezone.now()
user = User.objects.create(user_id=new_id, rank=RANK_USER,
registration_time=time_now)
neko259
Rewriting views to class-based
r542 # TODO This is just a test. This method should be removed
# _delete_old_users()
neko259
Deleting old users when the new are created. Only empty users without posts and tags are removed
r486
neko259
Moved views to a folder-based model to split it into different files
r443 session['user_id'] = user.id
else:
user = User.objects.get(id=session['user_id'])
return user
def _redirect_to_next(request):
"""
If a 'next' parameter was specified, redirect to the next page. This is
used when the user is required to return to some page after the current
view has finished its work.
"""
if 'next' in request.GET:
next_page = request.GET['next']
return HttpResponseRedirect(next_page)
else:
neko259
Added a todo to the post api method
r546 return redirect('index')