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

Django注册系统:如何验证用户输入的年龄为纯数字?

问题分析

你的年龄验证失效是因为布尔值与字符串直接比较:age.isnumeric()返回的是Python布尔类型的True或False,但你却把它和字符串"False"做相等判断——这永远不会成立,所以错误提示永远不会触发。

顺带一提,用户名的判断逻辑也存在同样的潜在问题:username.isnumeric() == "True"也是布尔值和字符串比较,只是你测试时没暴露出来而已。

修复代码

修改views.py里的判断逻辑,直接使用布尔值进行判断:

def Registration(request):
    if request.method == "POST":
        username = request.POST["username"]
        age = request.POST["age"]

        ...

        # 修正用户名判断:直接用布尔值
        if username.isnumeric():
            messages.error(request, "Username can't be all number!")
            return redirect("/")
        # 修正年龄判断:检查是否非数字
        if not age.isnumeric():
            messages.error(request, "Age must be all numbers!")
            return redirect("/")
        
        ...

        messages.success(request, "Your account has been succesfully created")
        return redirect("/Login/")
    return render(request, "Registration.html")
额外优化建议
  • 前端输入限制:把年龄输入框的type="text"改成type="number",浏览器会自动限制用户输入数字,减少后端验证压力:
    <input class="" type="number" id="age" name="age" placeholder="Enter your age" Required>
    
  • 空值防护:即使前端有Required约束,后端也可以先检查输入是否为空,再验证格式:
    if not age or not age.isnumeric():
        messages.error(request, "Age must be all numbers!")
        return redirect("/")
    
  • 年龄范围校验:可以额外添加合理的年龄范围判断,比如限制在13-120岁之间:
    if not age.isnumeric():
        messages.error(request, "Age must be all numbers!")
        return redirect("/")
    age_num = int(age)
    if age_num < 13 or age_num > 120:
        messages.error(request, "Age must be between 13 and 120!")
        return redirect("/")
    

内容的提问来源于stack exchange,提问作者Lubomir.kunc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:25:11