decorators.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from functools import wraps
  2. from django.core.urlresolvers import reverse
  3. from django.shortcuts import redirect
  4. from misago.apps.errors import error404
  5. from misago.models import User
  6. from misago.utils.strings import slugify
  7. def profile_view(fallback='user'):
  8. def outer_decorator(f):
  9. def inner_decorator(request, user, username, *args, **kwargs):
  10. request = request
  11. user_pk = int(user)
  12. user_slug = username
  13. try:
  14. user = User.objects.get(pk=user_pk)
  15. if user.username_slug != user_slug:
  16. # Force crawlers to take notice of updated username
  17. return redirect(reverse(fallback, args=(user.username_slug, user.pk)), permanent=True)
  18. return f(request, user, *args, **kwargs)
  19. except User.DoesNotExist:
  20. return error404(request)
  21. return wraps(f)(inner_decorator)
  22. return outer_decorator
  23. def user_view(f):
  24. def inner_decorator(request, user, *args, **kwargs):
  25. request = request
  26. user_pk = int(user)
  27. try:
  28. user = User.objects.get(pk=user_pk)
  29. return f(request, user, *args, **kwargs)
  30. except User.DoesNotExist:
  31. return error404(request)
  32. return wraps(f)(inner_decorator)