首页 > 解决方案 > 我们可以在不使用 django 中的 forms.py 的情况下编辑用户配置文件吗?

问题描述

如何使用 django 为注册用户创建视图以在用户仪表板中编辑那里的配置文件?请提供观点。我在没有使用 forms.py 的情况下创建了注册配置文件,现在我只想在不使用 forms.py 的情况下创建用户配置文件编辑。是否可以再次将数据提交到数据库。

(不要使用forms.py)

帐户/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')

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


我认为不使用 forms.py 就不可能在同一个视图中编辑配置文件和更改密码,但是 django.contrib.auth.forms 有一个 PasswordChangeForm 和一个 UserChangeForm 供您使用。

在文档中查看更多信息:https ://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/forms/

在你的意见.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})

推荐阅读