decorators.py 891 B

12345678910111213141516171819202122
  1. from functools import wraps
  2. from misago.utils import slugify
  3. from misago.views import error404
  4. from misago.users.models import User
  5. def profile_view(fallback='user'):
  6. def outer_decorator(f):
  7. def inner_decorator(request, user, username, *args, **kwargs):
  8. request = request
  9. user_pk = int(user)
  10. user_slug = username
  11. try:
  12. user = User.objects.get(pk=user_pk)
  13. if user.username_slug != user_slug:
  14. # Force crawlers to take notice of updated username
  15. return redirect(reverse(fallback, args=(user.username_slug, user.pk)), permanent=True)
  16. return f(request, user, *args, **kwargs)
  17. except User.DoesNotExist:
  18. return error404(request)
  19. return wraps(f)(inner_decorator)
  20. return outer_decorator