Пример #1
0
def settings(request):
    user = request.user
    if request.method == 'GET':
        form = SettingsForm(instance=user)
        return render(request,
                      'users/settings.html',
                      context={
                          'form': form,
                          'showed_user': user,
                      })
    elif request.method == 'POST':
        user = request.user
        form = SettingsForm(request.POST, request.FILES, instance=user)
        form.set_user(user)
        if form.is_valid():
            form.image = request.FILES.get('image')
            form.save()
            return redirect(f'/accounts/account/{user.username}')
        else:
            return render(request,
                          'users/settings.html',
                          context={
                              'form': form,
                              'showed_user': user,
                          })
Пример #2
0
    def post(self, request):
        context = self.get_context_data()
        context["settingsform"] = SettingsForm(instance=request.user)
        context["avatarform"] = AvatarForm(instance=request.user)
        context['settingsform'].fields["main_department"].queryset = self.request.user.departments.all()

        if "language" in request.POST:
            request.user.language = request.POST["language"]
            request.user.save()
            translation.activate(request.POST["language"])
            request.session[translation.LANGUAGE_SESSION_KEY] = request.POST["language"]
            return HttpResponseRedirect(reverse("usersettings"))
        elif "pagelength" in request.POST or "timezone" in request.POST:
            form = SettingsForm(request.POST)
            if form.is_valid():
                if request.user.pagelength != form.cleaned_data["pagelength"]:
                    request.user.pagelength = form.cleaned_data["pagelength"]
                    request.user.save()
                if request.user.timezone != form.cleaned_data["timezone"]:
                    request.user.timezone = form.cleaned_data["timezone"]
                    request.user.save()
                if request.user.main_department != form.cleaned_data["main_department"]:
                    request.user.main_department = form.cleaned_data["main_department"]
                    request.user.save()
                messages.success(self.request, _('Settings were successfully updated'))
            context["settingsform"] = form
        elif "avatar" in request.FILES or "avatar" in request.POST:
            if request.user.avatar:
                tempavatar = request.user.avatar
            else:
                tempavatar = None
            form = AvatarForm(request.POST, request.FILES, instance=request.user)
            if form.is_valid():
                if form.cleaned_data["avatar_clear"] and request.user.avatar != None:
                    request.user.avatar.delete()
                    request.user.avatar = None
                    request.user.save()
                if tempavatar != None:
                    tempavatar.storage.delete(tempavatar)
                form.save()
            context["avatarform"] = form
        return render(request, self.template_name, context)
Пример #3
0
    def test_save_email(self):
        form_data = {'email': '*****@*****.**'}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()

        user = form.save()

        self.assertEqual(user.email, '*****@*****.**')
Пример #4
0
    def test_save_username(self):
        form_data = {'username': '******'}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()

        user = form.save()

        self.assertEqual(user.username, 'newusername')
Пример #5
0
    def test_save_all_empty_string(self):
        form_data = {'username': '', 'email': '', 'password': ''}

        form = SettingsForm(data=form_data,
                            user=self.user,
                            request=self.request)
        form.is_valid()

        user = form.save()

        self.assertEqual(user.email, self.user.email)
        self.assertTrue(user.check_password('password'))
Пример #6
0
class UserSettingsView(TemplateView):
    template_name = 'users/settings.html'

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        action = request.POST.get('action')
        self.profile_form = SettingsForm(
            (request.POST if action == 'profile' else None),
            (request.FILES if action == 'profile' else None),
            prefix='profile', instance=request.user
        )
        self.password_form = UserPasswordChangeForm(request.user, (request.POST if action == 'password' else None),
                                                    prefix='password')
        self.email_form = UserEmailChangeForm(request.user, (request.POST if action == 'email' else None),
                                              prefix='email')
        return super(UserSettingsView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(UserSettingsView, self).get_context_data(**kwargs)
        context['profile_form'] = self.profile_form
        context['password_form'] = self.password_form
        context['email_form'] = self.email_form
        return context

    def post(self, request, *args, **kwargs):
        if self.profile_form.is_valid():
            self.profile_form.save()
            messages.success(request, _(u'Profile success update.'))
            return redirect(request.path)
        elif self.password_form.is_valid():
            self.password_form.save()
            request.user.backend = request.session[BACKEND_SESSION_KEY]
            login(request, request.user)
            messages.success(request, _(u'Password success update.'))
            return redirect(request.path)
        elif self.email_form.is_valid():
            self.email_form.save()
            messages.success(request, _(u'Email success update.'))
            return redirect(request.path)
        return self.get(request, *args, **kwargs)
Пример #7
0
def home(request, note=""):
    """ The settings page for users
    
    If you post a SettingsForm to this, it will be saved. In all cases, it renders index.html to provide the user some
    account managment things.
    
    This view may also take a note, in which case the note will be displayed at the top of the page and the request
    will run as if it were a GET.
    """
    if request.method == "POST" and not note:
        form = SettingsForm(request.POST, instance=request.user.settings)
        if form.is_valid():
            form.save()
            note = "Settings Updated Successfully"
        
    else:
        form = SettingsForm(instance=request.user.settings)
    
    ctx = _make_context(request, "settings_form", form)
    ctx["note"] = note
    
    return TemplateResponse(request, "users/index.html", ctx)
Пример #8
0
def settings(request):
  logging.info("** users.views.settings ")
  user = request.user
  form = SettingsForm(instance=request.user)
  if request.method == 'POST':
    form = SettingsForm(request.POST, instance=request.user)
    if form.is_valid():
      user_ref = form.save()
      avatar = request.FILES.get('avatarfield')
      if avatar is not None:
        user_ref.create_avatar(avatar)
      util.set_flash(request, "success_users_settings")
      return redirect(reverse('users_settings'))
      
  c = template.RequestContext(request, locals())
  return render_to_response('users_settings.html', c)
Пример #9
0
    def post(self, request):
        context = self.get_context_data()
        context["settingsform"] = SettingsForm(instance=request.user)
        context["avatarform"] = AvatarForm(instance=request.user)
        context['settingsform'].fields[
            "main_department"].queryset = self.request.user.departments.all()

        # handle language settings and use saved settings of user as default
        if "language" in request.POST:
            request.user.language = request.POST["language"]
            request.user.save()
            translation.activate(request.POST["language"])
            request.session[
                translation.LANGUAGE_SESSION_KEY] = request.POST["language"]
            return HttpResponseRedirect(reverse("usersettings"))

        # handle pagelength/ timezone/ theme settings and use saved settings of user as default
        elif "pagelength" in request.POST or "timezone" in request.POST or "theme" in request.POST:
            form = SettingsForm(request.POST)
            if form.is_valid():
                changed_data = False

                # change of pagelength settings
                if request.user.pagelength != form.cleaned_data["pagelength"]:
                    request.user.pagelength = form.cleaned_data["pagelength"]
                    changed_data = True

                # change of timezone settings
                if request.user.timezone != form.cleaned_data["timezone"]:
                    request.user.timezone = form.cleaned_data["timezone"]
                    changed_data = True

                # change of main department settings
                if request.user.main_department != form.cleaned_data[
                        "main_department"]:
                    request.user.main_department = form.cleaned_data[
                        "main_department"]
                    changed_data = True

                # change of theme settings
                if request.user.theme != form.cleaned_data["theme"]:
                    request.user.theme = form.cleaned_data["theme"]
                    changed_data = True

                # save changes
                if changed_data:
                    request.user.save()

                # save success message
                messages.success(self.request,
                                 _('Settings were successfully updated'))
            context["settingsform"] = form

        # handle given avatar
        elif "avatar" in request.FILES or "avatar" in request.POST:
            if request.user.avatar:
                tempavatar = request.user.avatar
            else:
                tempavatar = None

            form = AvatarForm(request.POST,
                              request.FILES,
                              instance=request.user)

            if form.is_valid():
                if form.cleaned_data[
                        "avatar_clear"] and request.user.avatar is not None:
                    request.user.avatar.delete()
                    request.user.avatar = None
                    request.user.save()
                if tempavatar is not None:
                    tempavatar.storage.delete(tempavatar)
                form.save()
            context["avatarform"] = form

        return render(request, self.template_name, context)