context_processors.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.contrib.auth import REDIRECT_FIELD_NAME
  2. from django.utils.functional import SimpleLazyObject
  3. from django.utils.http import urlquote
  4. try:
  5. from django.utils.functional import empty as _empty
  6. empty = _empty
  7. except ImportError: # django < 1.4
  8. empty = None
  9. from social_core.backends.utils import user_backends_data
  10. from .utils import Storage, BACKENDS
  11. class LazyDict(SimpleLazyObject):
  12. """Lazy dict initialization."""
  13. def __getitem__(self, name):
  14. if self._wrapped is empty:
  15. self._setup()
  16. return self._wrapped[name]
  17. def __setitem__(self, name, value):
  18. if self._wrapped is empty:
  19. self._setup()
  20. self._wrapped[name] = value
  21. def backends(request):
  22. """Load Social Auth current user data to context under the key 'backends'.
  23. Will return the output of social_core.backends.utils.user_backends_data."""
  24. return {'backends': LazyDict(lambda: user_backends_data(request.user,
  25. BACKENDS,
  26. Storage))}
  27. def login_redirect(request):
  28. """Load current redirect to context."""
  29. value = request.method == 'POST' and \
  30. request.POST.get(REDIRECT_FIELD_NAME) or \
  31. request.GET.get(REDIRECT_FIELD_NAME)
  32. if value:
  33. value = urlquote(value)
  34. querystring = REDIRECT_FIELD_NAME + '=' + value
  35. else:
  36. querystring = ''
  37. return {
  38. 'REDIRECT_FIELD_NAME': REDIRECT_FIELD_NAME,
  39. 'REDIRECT_FIELD_VALUE': value,
  40. 'REDIRECT_QUERYSTRING': querystring
  41. }