Python---Flask框架笔记<贰>

传参

Flask的本质是渲染网页,是渲染写好的html,css,js。如果我们要进行数据可视化的操作的话,我们就需要把数据传递给html,或者可能一个网页需要用到另外一个网页的信息,比如说登录时,登录需要用户填写信息在登录页面,那么登录后的网页就可能需要显示登录页面时用户填写的信息,那么如何把数据进行一个跨页面的传递呢?

一般渲染传参

app.py代码:

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route("/")
def index():
    a = 10
# 定义变量a = 10
    return render_template("my_index.html", ra=a)
# ra是a在html文件中的变量名称,名称可以随便起也可以叫rb或a等其他


if __name__ == "__main__":
    app.run(debug=True)
# 调试模式开启后 不需要重新运行py文件 
# 只需要刷新网页即可看到代码改动的样子

my_index.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>参数传递到html</title>
</head>
<body>
    <h1>
        您传的参数是{{ra}}
<!--从python文件传递过来的参数是要用{{}}括起来用的!-->
    </h1>
</body>
</html>

网页效果:

一般渲染传参:直接在视图函数里面创建变量a,直接添加到render_template函数中并给a起个在html文件中的别名叫做ra,当然这个别名也可以是其他的名字。

路由渲染传参

app.py代码:

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route("/<int:user_id>")
def index(user_id):
    return render_template("my_index.html", id=user_id)


if __name__ == "__main__":
    app.run(debug=True)

my_index.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>路由参数传递到html</title>
</head>
<body>
    <h1>
        您传的参数是{{id}}
    </h1>
</body>
</html>

网页效果:
 

路由渲染传参:是在路由路径里面加入<数据类型:变量名称>就可以得到对应的变量,然后再通过一般渲染传参的方式传参。若不写数据类型和:,那么默认为string。此外还有float类型。

网页之间传参

app.py代码:

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route("/login")
def login():
    return render_template("login.html")


@app.route("/user/", methods=["POST", 'GET'])
def user():
    if request.method == "POST":
# 如果请求的方式是POST
        form = request.form
# 获取发送POST请求页面的form中的内容
# 这个form是类字典类型 可以用get方法获取属性
        return render_template("my_index.html", id=form.get('age'))



if __name__ == "__main__":
    app.run(debug=True)


my_index.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>路由参数传递到html</title>
</head>
<body>
    <h1>
        您传的参数是{{id}}
    </h1>
</body>
</html>


login.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
</head>
<body>
  <h1>
    图书馆登录界面
  </h1>
  <form action="{{url_for('user')}}" method="post">
    <p>姓名:<input type="text" name="name"></p>
    <p>年龄:<input type="text" name="age"></p>
    <p><input type="submit" value="提交"></p>
  </form>
</body>
</html>

网页效果:

网页之间传参:我们看login.html中是有form组件的,form里面有两个输入框一个叫姓名,一个叫年龄,还有一个叫提交的按钮,当我们按下按钮后,就会向action里的路由发送post请求,这个action里面的路由可以对应到app.py里面的@app.route("/user/"),也就是说按下这个按钮就给我跳到 域名/user/ 这个网址。我们再看app.py里的@app.route("/user/")那一行,有个method,意为方法,默认是GET,只接受获取请求,现在给它多写个POST,意为传递,可接受传递请求。具体解释请看代码注释。

渲染传参但是对象和字典

app.py代码:

from flask import Flask, render_template, request

app = Flask(__name__)


class User:
    def __init__(self, name=" ", age=0):
        self.name = name
        self.age = int(age)


@app.route("/jude/")
def jude():
    a = User(name="小王", age=18)
    # books = {"西游记": "吴承恩", "水浒传": "施耐庵", "红楼梦": "曹雪芹", "三国演义": "罗贯中"}
    books = [
        {"name": "西游记",
         "person": "吴承恩"},
        {"name": "水浒传",
         "person": "施耐庵"},
        {"name": "红楼梦",
         "person": "曹雪芹"},
        {"name": "三国演义",
         "person": "罗贯中"}
    ]
    return render_template("jude.html", user_a=a, books=books)




if __name__ == "__main__":
    app.run(debug=True)


jude.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>条件判断和循环输出</title>
</head>
<body>
{% if user_a.age >= 18 %}
<h1>
    尊敬的{{user_a.name}},您已成年,可阅读本图书室的图书
<!-- 可以通过.来访问对象的属性-->
</h1>
<p>
    本图书室的图书有:
</p>
<table border="1"> <!--表格-->
    <thead><!--表头-->
    <tr>
        <td>图书名称</td>
        <td>图书作者</td>
    </tr>
    </thead>
    <tbody><!--表体-->
        {% for book in books %}
        <tr>
            <td>{{book.name}}</td>
            <td>{{book.person}}</td>
<!-- books里面放的是一堆字典 -->
<!-- book 是字典类型 -->
<!-- 可以通过.来访问字典的属性 -->
        </tr>
        {% endfor %}
    </tbody>
</table>
{% elif user_a.age<18 %}
<h1>尊敬的{{user_a.name}},您未成年,不可阅读本图书室的图书</h1>
{% endif %}
</body>
</html>


网页效果:

渲染传参但是对象和字典:字典和对象传入html文件的方式与一般变量没有区别,主要是在传入html文件后的使用语法。在把字典和对象传入html文件后,我们可以通过.的方式访问字典或者对象的属性,当然也可以通过[]来访问字典的属性,但是.更方便一点

flask在html中的循环和判断语句

在jude.html文件中我们可以看到{% for book in books %},{% if user_a.age >= 18 %}和{% elif user_a.age<18 %}这样的语句,这正是在flask在html中的循环和判断语句,跟Python的循环和判断语句差不多但是要带上{% %}这样的符号,并且不论是循环还是判断都需要一个终止语句,如果是循环那么就是{% endfor %},如果是判断就是{% endif %},这很符合html的风格无论是啥都是有始有终。

html的页码---随记

app.py代码:

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route("/book")
def book_page():
    # args: 参数
    rpage = request.args.get("page", default=1, type=int)
# 名字叫做 page
# default 初始值为 1 页
# type 是 整型
    return f"您获取的网页是第{rpage}页"


if __name__ == "__main__":
    app.run(debug=True)

网页效果:

我们根据网址的变化不难发现当我们的page等于几时就会显示第几页。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没问题哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值