Flask和Django是python的两大主流web框架,两者的欢迎程度不相上下。
今天来简单介绍和实践下Flask,Django后面再谢
老规矩,搭配Pycharm进行集成开发,选择new -create project -Flask
你会发现会有一个默认生成的app.py

@app.route('/')
def hello_world():
    return 'Hello World!'

是的,启动它,你可以直接看到效果

python flask html 模版 python flask demo_表单


是不是觉得很熟悉,对他就像Java的后端controller服务访问一样。

下面简单罗列下几种常见的传值方式

get请求带参数
直接在在route后面加入请求路径,参数用代替,在方法中直接输出参数名(和java类似)

例如:带入name和age参数,int类型或者其他类型可以加上类型,看自己的需要咯,如果不加默认是String

@app.route("/index/<name>/<int:age>")
def index(name, age):
    return name + str(age)

看下效果

python flask html 模版 python flask demo_表单_02


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>

来看一下效果:

python flask html 模版 python flask demo_python_03


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 flask html 模版 python flask demo_django_04

python flask html 模版 python flask demo_flask_05


python的form表单有强大的功能,不需要定义id,只需要name以及输入值,就可以将数据自动传递过去。

赶紧动手试试吧