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

如何修复web.py中'RegisterModel'无'Users'属性及500服务器错误

问题排查:AttributeError: 'RegisterModel' object has no attribute 'Users'

问题描述

使用web.py开发简单Web项目时,用户注册功能触发以下错误,同时返回500 Internal Server Error:

AttributeError: 'RegisterModel' object has no attribute 'Users'

完整报错栈

Traceback (most recent call last):
  File "C:\Users\Fahim\AppData\Local\Programs\Python\Python38\lib\site-packages\web\application.py", line 280, in process
    return self.handle()
  File "C:\Users\Fahim\AppData\Local\Programs\Python\Python38\lib\site-packages\web\application.py", line 271, in handle
    return self._delegate(fn, self.fvars, args)
  File "C:\Users\Fahim\AppData\Local\Programs\Python\Python38\lib\site-packages\web\application.py", line 517, in _delegate
    return handle_class(cls)
  File "C:\Users\Fahim\AppData\Local\Programs\Python\Python38\lib\site-packages\web\application.py", line 495, in handle_class
    return tocall(*args)
  File "F:\Programs\Python\Python 3 Beginner to Advanced\10 Project 5 - Web Development Project Using Web.py\CodeWizard\Controller.py", line 30, in POST
    reg_model.insert_user(data)
  File "F:\Programs\Python\Python 3 Beginner to Advanced\10 Project 5 - Web Development Project Using Web.py\CodeWizard\Models\RegisterModel.py", line 15, in insert_user
    id = self.Users.insert({"username": data.username, "name": data.name, "password": data.password, "email": data.email})
AttributeError: 'RegisterModel' object has no attribute 'Users'
127.0.0.1:13919 - - [28/Nov/2022 01:30:44] "HTTP/1.1 POST /postregistration" - 500 Internal Server Error

相关代码

Register.html

<div class="container">
    <h2>Register Account</h2>
    <br/><br/>
    <form id="register-form">

        <div class="form-group has-info label-static is-empty">
            <label for="username" class="control-label">Username</label>
            <input id="username" name="username" class="form-control" type="text" placeholder="Choose a username"/>
        </div>
        <div class="form-group has-info label-static is-empty">
            <label for="display_name" class="control-label">Full Name</label>
            <input id="display_name" name="name" class="form-control" type="text" placeholder="Enter your full name"/>
        </div>
        <div class="form-group has-info label-static is-empty">
            <label for="email" class="control-label">Email Address</label>
            <input id="email" name="email" class="form-control" type="email" placeholder="Enter your email"/>
        </div>
        <div class="form-group has-info label-static is-empty">
            <label for="password" class="control-label">Password</label>
            <input id="password" name="password" class="form-control" type="password" placeholder="Make a password"/>
        </div>

        <button type="submit" class="btn btn-raised btn-info">Submit<div class="ripples-container"></div></button>

    </form>

</div>

RegisterModel.py(原错误代码)

import pymongo
from pymongo import MongoClient


class RegisterModel:
    def __int__(self):
        self.client = MongoClient()
        self.db = self.client.codewizard
        self.Users = self.db.users

    def insert_user(self, data):

        id = self.Users.insert({"username": data.username, "name": data.name, "password": data.password, "email": data.email})
        print("uid is", id)

解决方案

核心问题修正

错误根源是类构造函数拼写错误:Python类的构造函数必须是__init__(双下划线开头和结尾),而你写成了__int__,导致实例化RegisterModel时,初始化逻辑完全没执行,self.Users从未被定义,调用insert_user时自然抛出属性不存在的错误。

修正后的RegisterModel.py代码:

import pymongo
from pymongo import MongoClient


class RegisterModel:
    def __init__(self):  # 修正构造函数名称
        self.client = MongoClient()
        self.db = self.client.codewizard
        self.Users = self.db.users

    def insert_user(self, data):
        # 额外提示:pymongo 3.x+版本中insert方法已被弃用,推荐使用insert_one
        id = self.Users.insert_one({"username": data.username, "name": data.name, "password": data.password, "email": data.email}).inserted_id
        print("uid is", id)

额外优化提示

  • pymongo的insert方法在新版本中已被标记为过时,建议使用insert_one(插入单条数据)或insert_many(插入多条数据),后者会返回包含插入ID的对象,通过.inserted_id可以获取插入文档的ID。
  • 确保MongoDB服务正在运行,MongoClient()默认连接本地27017端口,若你的MongoDB使用了非默认端口或需要认证,需传入对应参数(如MongoClient('mongodb://user:pass@host:port/'))。

内容的提问来源于stack exchange,提问作者Fahim Yusuf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:42:49