需求来源:
我们在提交表单的时候,有时候会遇到填写的子串会遇到错误,而正好我们后台验证是重定向返回页面,并抛出相关错误。针对这种问题题主给出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>
以上结束。