Flask NoneType Object之谜

在尝试访问/wf_register.html时,遇到了一个AttributeError,指出'NoneType'对象没有'method'属性。问题根源在于模型类错误地继承了'Model',而应从'db.Model'继承。修复此问题的关键是确保所有模型类都包含'db.'前缀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板wf_register.html:

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Register{% endblock %}
 
{% block page_content %} 
<div class="page-header"> 
    <h1>Register</h1>
</div> 
<div class="col-md-4"> 
    {{ wtf.quick_form(form) }} 
</div> 
{% endblock %}

试图函数: 

@web.route('/wf_register', methods=['POST', 'GET'])
def register():
    form = RegisterForm()
    if form.validate_on_submit:
        user = User.query.filter_by(username=form.username.data).first()
        email = User.query.filter_by(email=form.email.data).first()
        if user is None and email is None:
            user = User(username=form.username.data,
                        password=form.username.data,
                        email=form.email.data)
            db.session.add(user)
            db.session.commit()
    return render_template('wf_register.html', form=form)

当访问 /wf_register.html时,报错:

AttributeError: 'NoneType' object has no attribute 'filter_by'

堆栈信息:

Traceback (most recent call last):
  ...
  File "E:\python\flaskp\venv\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "E:\python\flaskp\venv\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "E:\python\flaskp\venv\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "E:\python\flaskp\venv\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request    
    rv = self.dispatch_request()
  File "E:\python\flaskp\venv\lib\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "E:\python\flaskp\waffle\app\web\main.py", line 32, in register
    user = User.query.filter_by(username=form.username.data).first()
AttributeError: 'NoneType' object has no attribute 'filter_by'

 

经反复核对。模型类应该继承自db.Model,而非Model,只有列才可以省略db。切记!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值