本文仍以银行付款为例进行实践flask表单的实现 一、骨干的实现与验证 (1)定义表单模型
from flask import Flask,render_template,request
from wtforms import StringField,SelectField,SubmitField
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config["SECRET_KEY"] = "good"
class Paystate(FlaskForm):
payment_no = StringField(label="订单号",validators=[DataRequired("不能为空")])
bank_flow_no = StringField(label="流水号", validators=[DataRequired("不能为空")])
receipt_code = StringField(label="回单号", validators=[DataRequired("不能为空")])
amt_debit = StringField(label="金额", validators=[DataRequired("不能为空")])
failure_reason = StringField(label="失败/退票原因")
tag = SelectField(label= "动作",validators=[DataRequired("请选择要做的操作")],render_kw={"class":"form-control"},choices=[(1,"付款成功"),(2,"付款退票")],default= 1,coerce = int)
submit =SubmitField(label="提交")
@app.route(rule= "/",methods= ["GET","POST"])
def paystate():
form = Paystate()
if request.method == "GET":
return render_template("index2.html",form=form)
if request.method == "POST":
if request.form.get("tag") == "1":
print("调用成功的场景")
return render_template("index2.html", form=form)
if request.form.get("tag") == "2":
print("调用退票的场景")
return render_template("index2.html", form=form)
if __name__ =="__main__":
app.run()
(2)编写html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>进行付款</title>
</head>
<body>
<form action = "" method="post">
{{ form.payment_no.label }}
{{ form.payment_no }}
<br>
{{ form.bank_flow_no.label }}
{{ form.bank_flow_no }}
<br>
{{ form.receipt_code.label }}
{{ form.receipt_code }}
<br>
{{ form.amt_debit.label }}
{{ form.amt_debit }}
<br>
{{ form.tag.label }}
{{ form.tag }}
<br>
{{ form.failure_reason.label }}
<br>
{{ form.failure_reason }}
<br>
{{ form.submit }}
<br>
此处写一些备注
</form>
</body>
</html>
(3)运行查看,查看效果 启动服务后,访问链接: 运行一个付款成功: 运行一个付款退票: 二、实现中遇到的问题 (1)表单设计,查找相应的方法,及校验有效性 (2)tag的判断逻辑类型,开始用数字1报错,后改为“1”通过 (3)jinja2中{{}}的使用 jinja2的基本语法: {{}}:用来装载表达式,比如变量、运算表达式、比较表达式
{{% %}}:用来装载控制语句。比如:if控制语句、for循环控制语句 {{##}}:用来装载注释,模版文件被渲染后,注释不会包含在最终生成的文件中
|