123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from functools import wraps
- from django.conf import settings
- from django.core.urlresolvers import reverse
- from django.shortcuts import redirect
- from misago.acl.exceptions import ACLError403, ACLError404
- from misago.apps.errors import error403, error404
- from misago.models import User
- from misago.utils.strings import slugify
- def profile_view(fallback='user'):
- def outer_decorator(f):
- def inner_decorator(request, user, username, *args, **kwargs):
- request = request
- user_pk = int(user)
- user_slug = username
- try:
- user = User.objects
- if settings.PROFILE_EXTENSIONS_PRELOAD:
- user = user.select_related(*settings.PROFILE_EXTENSIONS_PRELOAD)
- user = user.get(pk=user_pk)
- if user.username_slug != user_slug:
- # Force crawlers to take notice of updated username
- return redirect(reverse(fallback, args=(user.username_slug, user.pk)), permanent=True)
- return f(request, user, *args, **kwargs)
- except User.DoesNotExist:
- return error404(request)
- except ACLError404:
- return error404(request)
- except ACLError403 as e:
- return error403(request, e.message)
- return wraps(f)(inner_decorator)
- return outer_decorator
- def user_view(f):
- def inner_decorator(request, user, *args, **kwargs):
- request = request
- user_pk = int(user)
- try:
- user = User.objects.get(pk=user_pk)
- return f(request, user, *args, **kwargs)
- except User.DoesNotExist:
- return error404(request)
- return wraps(f)(inner_decorator)
|