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

Django中检测用户名是否存在并在模板显示报错的实现方法

Django注册用户名重复检测解决方案

第一步:修正模型基础错误

首先你的自定义用户模型中,管理器属性名写错了,应该是objects而非object,否则会导致ORM查询失败:

# models.py 中的 MyAccount 类内
objects = MyAccountManager()  # 把 object 改成 objects

第二步:修改注册视图,添加用户名检测逻辑

更新views.py中的register视图,增加用户名存在性检查,并将错误信息传递到模板:

from django.contrib import messages

def register(request):
    if request.method == 'POST':
        first_name = request.POST.get('first_name')
        middle_name = request.POST.get('middle_name')
        last_name = request.POST.get('last_name')
        username = request.POST.get('username')
        password1 = request.POST.get('password1')
        password2 = request.POST.get('password2')
        email = request.POST.get('email')
        club_favorite = request.POST.get('club_favorite')

        # 检测用户名是否已存在
        if MyAccount.objects.filter(username=username).exists():
            messages.error(request, "用户名已被占用")
            return render(request, 'Account/register.html')
        
        # 可选:添加两次密码一致性检查
        if password1 != password2:
            messages.error(request, "两次输入的密码不一致")
            return render(request, 'Account/register.html')
        
        # 严格按照create_user方法的参数顺序传参
        user = MyAccount.objects.create_user(
            username=username,
            first_name=first_name,
            middle_name=middle_name,
            last_name=last_name,
            club_favorite=club_favorite,
            email=email,
            password=password1
        )
        return redirect('/account/login')
    
    return render(request, 'Account/register.html')

第三步:在HTML模板中显示错误提示

修改register.html模板,添加错误信息展示区域:

<!-- 在表单上方添加错误提示区域 -->
{% if messages %}
    {% for message in messages %}
        <div style="color: red; margin-bottom: 10px;">{{ message }}</div>
    {% endfor %}
{% endif %}

<form method="POST">
    {% csrf_token %}  <!-- 必须添加CSRF令牌,否则POST请求会被拦截 -->
    <input type="text" name="first_name" placeholder="名" required>
    <input type="text" name="middle_name" placeholder="中间名">
    <input type="text" name="last_name" placeholder="姓">
    <input type="text" name="username" placeholder="用户名" required>
    <input type="email" name="email" placeholder="邮箱">
    <input type="text" name="club_favorite" placeholder="最喜欢的俱乐部" required>
    <input type="password" name="password1" placeholder="密码" required>
    <input type="password" name="password2" placeholder="确认密码" required>
    <button type="submit">注册</button>
</form>

额外说明

  • 使用Django内置messages框架传递错误信息,自动处理会话存储,无需手动管理
  • 模板必须包含{% csrf_token %},否则会触发403权限错误
  • 密码一致性检查属于优化项,能提升用户注册体验

内容的提问来源于stack exchange,提问作者Endricho Folabessy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:52:24