《小技巧》解决表单提交后,遇到抛错重定向返回,表单清空后避免重填

需求来源:

我们在提交表单的时候,有时候会遇到填写的子串会遇到错误,而正好我们后台验证是重定向返回页面,并抛出相关错误。针对这种问题题主给出2种可行的方法

方法1:基于flask-wtf,使用flask-wtf进行表单验证时,提交表单请求,后台会记录当初数据,我们需要把他保存到页面上。该方法发仅需要在表单提交页面进行修改,相对改动最少,效率最高

步骤1:
配置:model

class Category(db.Model): #标签词
    id = db.Column(db.Integer, primary_key=True)  #文章类别id
    name = db.Column(db.String(30))    #文章类别名字
    article_id = db.Column(db.Integer, db.ForeignKey('article.id'))
    status = db.Column(db.Integer)  #1启用,2禁用
    article = db.relationship('Article', back_populates='category')

forms:

    class CategoryForm(FlaskForm):
name = StringField("关键词名字", validators=[DataRequired(message= u'关键词不能为空'), Length(2, 10,message="长度在2-10之间哦!!")])
status = IntegerField("状态", validators=[NumberRange(0,1,message='状态不在范围内'),InputRequired()])

路由:

  @admin_bp.route("/category/new", methods=['GET', 'POST'])
  @login_required
 def new_category():
    form = CategoryForm(request.form)
    if request.method == 'POST' and form.validate_on_submit():
        name = form.name.data
        if not Category.query.filter(Category.name == name).first():
            status = form.status.data
            category = Category(name=name, status=status)  # 创建记录
            db.session.add(category)  # 添加到数据库会话
            db.session.commit()  # 提交数据库会话
            flash('关键词创建成功!',"success")  # 显示成功创建的提示
            return redirect(url_for('admin.ma_category'))  # 重定向回主页
        else:
            flash('输入的关键词已存在','error')
    return render_template('xadmin/category/new_category.html',form=form)

表单:

<form class=“layui-form” method=“post” >
{{ form.csrf_token }}
<div class=“layui-form-item”>
<label for=“username” class=“layui-form-label”>
<span class=“x-red”>*</span>名字</label>
<div class=“layui-input-inline”>
<input type=“text” id=“username” name=“name” required="" lay-verify=“required” autocomplete=“off” class=“layui-input” value="{{form.name.data }}"></div>
</div>
</form>

方法二:
没有使用flask-wtf的,用原生的方式获取到表单提交的数据,并把该数据返回到页面

路由配置:

@admin_bp.route("/category/new", methods=['GET', 'POST'])
@login_required
def new_category():
name = ""
if request.method == 'POST' :
   name = request.form.get("name")
return render_template('xadmin/category/new_category.html',name=name)

表单:

<form class=“layui-form” method=“post” >
{{ form.csrf_token }}
<div class=“layui-form-item”>
<label for=“username” class=“layui-form-label”>
<span class=“x-red”>*</span>名字</label>
<div class=“layui-input-inline”>
<input type=“text” id=“username” name=“name” required="" lay-verify=“required” autocomplete=“off” class=“layui-input” value="{{name }}"></div>
</div>
</form>

以上结束。

2 个赞

感谢分享~下次发帖可以考虑给代码设置语法高亮。

尝试了多次用格式化文本,貌似并不是很理想

帮你格式化了第一个代码块,可以点击编辑按钮参考下。

知道怎么操作了,不能再文字模块直接使用预制格式化,需要空一行之后再继续使用格式化编辑才能有效果。我说我怎么一直用不了:rofl::rofl::rofl::rofl: