Flask和Django是python的两大主流web框架,两者的欢迎程度不相上下。
今天来简单介绍和实践下Flask,Django后面再谢
老规矩,搭配Pycharm进行集成开发,选择new -create project -Flask
你会发现会有一个默认生成的app.py
@app.route('/')
def hello_world():
return 'Hello World!'
是的,启动它,你可以直接看到效果
是不是觉得很熟悉,对他就像Java的后端controller服务访问一样。
下面简单罗列下几种常见的传值方式
get请求带参数
直接在在route后面加入请求路径,参数用代替,在方法中直接输出参数名(和java类似)
例如:带入name和age参数,int类型或者其他类型可以加上类型,看自己的需要咯,如果不加默认是String
@app.route("/index/<name>/<int:age>")
def index(name, age):
return name + str(age)
看下效果
post请求带表单
如果是页面访问后端时一定要定义post或者get请求,不然会报404,定义的方式时在路径后面加上methods= 的定义
下面时一个获取表单数据的请求
# 要定义方法请求方式,否则默认是get
@app.route('/register', methods=['POST', 'GET'])
def hello_world2():
if request.method == 'POST':
# 直接提取出form表单的数据
result = request.form
return render_template("register.html", formResult=result)
请求跳转到页面并传值
py后端如何跳转到html页面?可能你有思考过,这是有方法的,python中用render_template方式就让前后端建立联系。
我们一般在templates下简易html。这个和springboot下thymeleaf模板很像,做过这方面的程序媛们可能会很轻易上手
例如:我们定一个服务方法,取名index2,在这个方法中我们自己定义了值,time, name, task, time是一个普通变量, name是list变量, task是字典型,这三种是常规使用到的值,将这些值传到html中,用于页面展示。
# 向页面传参数
@app.route('/you')
def index2():
time = datetime.date.today() # 普通变量
name = ["tom", "小狗"] # list类型
task = {"时间": "明天下午", "任务": "撩妹"} # 字典类型
return render_template("index.html", var=time, list=name, job=task)
html页面怎么接受呢。来说一下,我们可以看到time对应的是var, name对应的是list, task对应的是job,那么html这三个值就是后端方法传过来的值,我们就解析它,
普通值得解析和vue很类似,就是{{ var }},
欢迎光临,今天是:{{ var }}<br>
list我们用的是for循环方式解析,在html中有特定的for循环语句
for循环开始语句:{% for data in list %}
list是后端传过来用于解析的值,data是自己取名得知,in表示从list中循环取值
for循环结束语句:{% endfor %}
固定结束语句
{% for data in list %}
{{ data }}
{% endfor %}
<br>
字典类型也是类似的解析方式,只不过list是解析一个值,字典是解析多个值,大同小异。我们就以table形式去解析
要做的事情: <!-- 如何在页面做表格,以及如何迭代 -->
<table border="1">
{% for key, value in job.items() %}
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
来看一下效果:
form表单传值案例
我们定义一个register,随便取名,用来接收表单信息,和上面截图一直
app.py定义个register方法,用于接收html传递表单值,这里一定要定义post或get请求方式,也可以两者一起定义
# 要定义方法请求方式,否则默认是get
@app.route('/register', methods=['POST', 'GET'])
def hello_world2():
if request.method == 'POST':
# 直接提取出form表单的数据
result = request.form
return render_template("register.html", formResult=result)
在index.html中写个表单
<form action="http://127.0.0.1:5000/register" method="post">
<p>姓名:<input type="text" name="姓名"></p>
<p>性别:<input type="text" name="男"></p>
<p><input type="submit" value="提交"></p>
</form>
跳转得register.html用于展示结果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
欢迎光临,今天是:{{ var }}<br>
今天来了: <!-- 用大括号和百分号括起来的是控制结构 -->
{% for data in list %}
{{ data }}
{% endfor %}
<br>
要做的事情: <!-- 如何在页面做表格,以及如何迭代 -->
<table border="1">
{% for key, value in job.items() %}
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
<form action="http://127.0.0.1:5000/register" method="post">
<p>姓名:<input type="text" name="姓名"></p>
<p>性别:<input type="text" name="性别"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
看下最终效果
python的form表单有强大的功能,不需要定义id,只需要name以及输入值,就可以将数据自动传递过去。
赶紧动手试试吧