views.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from django import http
  2. from django.utils import translation
  3. from . import forms
  4. from .. import views
  5. def set_language(request):
  6. """
  7. Redirect to a given url while setting the chosen language in the user
  8. setting. The url and the language code need to be specified in the request
  9. parameters.
  10. Since this view changes how the user will see the rest of the site, it must
  11. only be accessed as a POST request. If called as a GET request, it will
  12. redirect to the page in the request (the 'next' parameter) without changing
  13. any state.
  14. """
  15. next = request.REQUEST.get('next', None)
  16. if not next:
  17. next = request.META.get('HTTP_REFERER', None)
  18. if not next:
  19. next = '/'
  20. response = http.HttpResponseRedirect(next)
  21. if request.method == 'POST':
  22. lang_code = request.POST.get('language', None)
  23. if lang_code and translation.check_for_language(lang_code):
  24. # We reload to make sure user object is recent
  25. request.user.reload()
  26. request.user.language = lang_code
  27. request.user.save()
  28. return response
  29. class RegistrationView(views.RegistrationView):
  30. form_class = forms.RegistrationForm
  31. def object_data(self, form):
  32. data = super(RegistrationView, self).object_data(form)
  33. data.update({
  34. 'gender': form.cleaned_data['gender'],
  35. 'birthdate': form.cleaned_data['birthdate'],
  36. })
  37. return data
  38. class AccountChangeView(views.AccountChangeView):
  39. form_class = forms.AccountChangeForm
  40. def form_valid(self, form):
  41. user = self.request.user
  42. user.gender = form.cleaned_data['gender']
  43. user.birthdate = form.cleaned_data['birthdate']
  44. return super(AccountChangeView, self).form_valid(form)
  45. def get_initial(self):
  46. initial = super(AccountChangeView, self).get_initial()
  47. initial.update({
  48. 'gender': self.request.user.gender,
  49. 'birthdate': self.request.user.birthdate,
  50. })
  51. return initial