decorators.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  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
  21. def user_view(f):
  22. def inner_decorator(request, user, *args, **kwargs):
  23. request = request
  24. user_pk = int(user)
  25. try:
  26. user = User.objects.get(pk=user_pk)
  27. return f(request, user, *args, **kwargs)
  28. except User.DoesNotExist:
  29. return error404(request)
  30. return wraps(f)(inner_decorator)