鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ flask WTF : 'StringField' object has no

flask WTF : 'StringField' object has no attribute 'content'

問題描述

在提交數(shù)據(jù)時,報錯
AttributeError: 'StringField' object has no attribute 'content'

問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法

form表單渲染正常,但是在填入數(shù)據(jù)后報錯,

相關(guān)代碼

// 請把代碼文本粘貼到下方(請勿用圖片代替代碼)
Form 代碼

class WeiboForm(FlaskForm):

''' 微博表單 '''
content = StringField(label='微博內(nèi)容:',
                      validators=[DataRequired("請輸入微博內(nèi)容")],
                      description="請輸入微博內(nèi)容",
                      render_kw={"required": "required", "class": "form-controal"})
submit = SubmitField(
    label='發(fā)布',)


def validate_content(self,field):
    """限制微博文字長度"""
    content = field.content
    if len(content) < 5:
        raise ValidationError("長度不能小于5個字")
    if len(content) > 140:
        raise ValidationError("長度不能大于140個字")
    return content

def publish(self,user,db):
    """ 發(fā)送微博 """
    data=self.data
    #創(chuàng)建對象
    weibo=Weibo(
        content=data['content'],
        user_id=user.id,
        is_valid=datetime.new(),
        created_at=datetime.new()
    )
    db.session.add(weibo)
    db.session.commit()
    return weibo

views代碼
@app.route('/home/weibo',methods=['GET','POST'])
@login_required
def weibo_publish():

''' 發(fā)布微博 '''
form=WeiboForm()
if form.validate_on_submit():
    #新增記錄
    form.publish(user=current_user)
    #提示用戶
    flash('發(fā)布成功')
    #跳轉(zhuǎn)
    return redirect(url_for('index'))
return render_template('/home/weibo.html',form=form)

模板templates

{% block content %}
<div class="contanier">

<div class="col-md-6 col-md-offset-3">
<form class="form-weibo" role="form" method="post" action="{{ url_for('weibo_publish') }}">
    <div class="form-inner clearfix">
        <div class="form-header clearfix">
            <span class="pull-left">有什么新鮮事告訴大家?</span>
            <span class="pull-right">已輸入21字</span>
        </div>
        {{ form.content }}
        <ul class="text-danger">
        {% for err in form.content.errors %}
        <li>{{ err }}</li>
        {% endfor %}
        </ul>
        <div class="pull-right">
        {{ form.csrf_token }}
        {{ form.submit }}
        </div>
    </div>
</form>
</div>

</div>
{% endblock %}

你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?

求大神幫忙找問題?

回答
編輯回答
撥弦

你應(yīng)該把詳細的異常棧貼出來。

出問題的可能是這一段

def validate_content(self,field):
    """限制微博文字長度"""
    content = field.content

應(yīng)該改成

xxx = field.data

參考 https://wtforms.readthedocs.i...

2017年10月25日 20:42