You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用Django Forms实现自定义用户注册表单并入库

解决HTML注册表单数据存入Django数据库的问题

问题核心

当前无法保存数据的原因集中在三点:

  • SignupForm 未覆盖前端提交的密码、地址等字段,也没处理密码加密逻辑
  • 缺少专门处理注册请求的signup视图函数
  • HTML表单中地址字段名adress与User模型的address不匹配

分步解决代码

1. 完善注册表单(forms.py)

更新表单,添加密码确认校验,并重写保存逻辑加密密码:

from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.hashers import make_password

class LoginForm(forms.Form):
    email = forms.EmailField(max_length=50)
    password = forms.CharField(
        max_length=50, label="mot de passe ", widget=forms.PasswordInput)

class SignupForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput, label="Mot de passe")
    password2 = forms.CharField(widget=forms.PasswordInput, label="Confirmer le Mot de passe")
    
    class Meta:
        model = get_user_model()
        fields = ('username', 'email', 'phone', 'country', 'address')

    def clean_password2(self):
        # 校验两次密码一致性
        password = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password2')
        if password and password2 and password != password2:
            raise forms.ValidationError("Les mots de passe ne correspondent pas")
        return password2

    def save(self, commit=True):
        # 创建用户并加密密码
        user = super().save(commit=False)
        user.password = make_password(self.cleaned_data['password'])
        if commit:
            user.save()
        return user

2. 添加注册视图函数(views.py)

在views文件中新增处理注册请求的逻辑:

from django.shortcuts import render, redirect
from user.forms import SignupForm
from django.contrib.auth import login

def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save()
            # 注册完成自动登录(可选)
            login(request, user)
            return redirect('account')  # 跳转到用户账户页
    else:
        form = SignupForm()
    return render(request, 'user/signup.html', {'form': form})

3. 修正HTML表单字段名

将地址字段的name="adress"改为name="address",与模型字段对齐:

<div class="form-group">
    <label>Adresse</label>
    <input name="address" type="text" class="form-control" value="">
</div>

4. 验证URL配置

你的urls.py已配置path('signup/', views.signup, name='signup'),无需修改,确保前端表单提交路径正确即可。

验证步骤

  1. 访问/signup/页面填写所有字段
  2. 提交表单后检查数据库是否新增用户记录
  3. 测试新用户是否能正常登录

内容的提问来源于stack exchange,提问作者Roy Akany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:02:46