Можем ли мы редактировать профиль пользователя без использования forms.py в django? - PullRequest
0 голосов
/ 18 марта 2020

Как создать представление для зарегистрированного пользователя, чтобы отредактировать там свой профиль в панели пользователя с помощью django? Пожалуйста, предоставьте вид. Я создал профиль реестра без использования forms.py, теперь я хочу создать редактирование userprofile только без использования forms.py. И можно ли снова отправить данные в базу данных.

(не использовать forms.py)

Accounts / views.py

def register(request):
if request.method == 'POST':
    #get form values
    first_name = request.POST['first_name']

    last_name = request.POST['last_name']

    username = request.POST['username']

    email = request.POST['email']

    password = request.POST['password']

    password2 = request.POST['password2']

     #Check if passwords match
    if password == password2:
        #check username
        if User.objects.filter(username = username).exists():
            messages.error(request,'That username is taken')
            return redirect('register')
        else:
            if User.objects.filter(email=email).exists():
                messages.error(request,'That email is being used')
                return redirect('register')
            else:
                #looks good
                user = User.objects.create_user(username = username, password = password, email = email, first_name = first_name, last_name = last_name)

                #login after register
                # auth.login(request, user)
                # messages.success(request, 'You are now logged in')
                # return redirect('index')

                user.save()
                messages.success(request, 'You are now registered and can log in')
                return redirect('login')

    else:
         messages.error(request,'passwords do not match')
         return redirect('register')

else:
    return render(request, 'accounts/register.html')

1 Ответ

1 голос
/ 18 марта 2020

Я не думаю, что есть возможность отредактировать профиль и изменить пароль в том же виде без использования forms.py, но django .contrib.auth.forms имеет PasswordChangeForm и UserChangeForm, которые вы можете используйте.

См. больше в документации: https://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/forms/

В ваших views.py

from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm

def edit_profile(request):
    if request.method == "POST":
        form = UserChangeForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            messages.info(request, "Ok")
            return redirect("main:homepage")
        else:
            messages.error(request, "Error")
            return redirect("main:edit_profile")
    else:
        form = UserChangeForm(instance=request.user)
        return render(request, "main/edit-profile.html", {'form': form})

def change_password(request):
    if request.method == "POST":
        form = PasswordChangeForm(data=request.POST, user=request.user)
        if form.is_valid():
            form.save()
            messages.info(request, "ok")
            update_session_auth_hash(request, form.user)
            return redirect("main:edit_profile")
        else:
            messages.error(request, "error")
            return redirect("main:change_password")
    else:
        form = PasswordChangeForm(user=request.user)
        return render(request, "main/change-password.html", {'form': form})
...