Django 用户创建表单在身份验证后不创建用户

问题描述 投票:0回答:1

我目前正在学习 Django 并正在开发一个项目来帮助我学习,我创建了自定义用户创建表单,一切似乎都正常,除了当我填写表单时它不会创建新用户,当我打开注册页面时它似乎将其视为创建新用户的请求,并且没有创建新用户,因为表单已填写且无效,即使我填写了,它似乎仍然不认为其有效并再次呈现注册表单。

我在views.py的注册函数中放置了两个打印语句,一个在if语句中,一个在外面,只是为了知道用户是否实际上是从控制台创建的,并且每次它都说用户未创建,这意味着表单永远无效

views.py:

def signup(request):
    form = RegisterForm(request.POST)
    if request.method == 'POST':
        if form.is_valid():
            print("User is valid")
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password1')
            form.save()
            new_user = authenticate(username=username, password=password)
            if new_user is not None:
                authlogin(request, new_user)
                redirect('home/')
                print("User created")
    form = RegisterForm()
    print("User not created")
    return render(request, 'registration/signup.html', {'form': form})

forms.py:

class RegisterForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].widget.attrs.update({
            'id':'RegisterUsername',
            'type':"text",
            'required':'',
            'maxlength':'16',
            'minlength':'4   ',
        })
        self.fields['email'].widget.attrs.update({
            'id':'RegisterEmail',
            'type':"email",
            'required':'',
        })
        self.fields['password1'].widget.attrs.update({
            'id':'RegisterPassword',
            'type':"password",
            'required':'',
        })
        self.fields['password2'].widget.attrs.update({
            'id':'RegisterPassword2',
            'type':"password",
            'required':'',
        })
    email = forms.EmailField(required=True)
    
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

signup.html:

<div class="wrapper">
        <div class="form-box login">
            <h2>Register</h2>
            <form method='POST' id='signup-form' novalidate>
                {% csrf_token %}
                <div class="input-box">
                    <span class='icon'><ion-icon name="person"></ion-icon></span>
                    {{form.username}}
                    <label>Username</label>
                </div>
                <div class="input-box">
                    <span class='icon'><ion-icon name="mail"></ion-icon></span>
                    {{form.email}}
                    <label>Email</label>
                </div>
                <div class="input-box">
                    <span class='icon'><ion-icon name="lock-closed"></ion-icon></span>
                    {{form.password1}}
                    <label>Password</label>
                </div>
                <div class="input-box">
                    <span class='icon'><ion-icon name="lock-closed"></ion-icon></span>
                    {{form.password2}}
                    <label>Confirm Password</label>
                </div>
                <button type='submit' class='btn'>Register</button>
            </form>
python django django-views django-forms
1个回答
0
投票

您需要填写以下表格,

if request.method == 'POST': form = RegisterForm(request.POST)

当您添加新用户时,您应该发送请求参数作为第一个参数

new_user = authenticate(request,username=username, password=password)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.