• Flask框架学习:模板渲染与Get,Post请求


    模板渲染

    所谓模板渲染就是让flask渲染一个html文档,比如你有一个html文件,想要在网站上加载出来,你就要渲染它。

    首先把这个文件,叫做模板渲染.html,放在templates文件夹下面,
    在这里插入图片描述
    然后代码中,导入render_template

    from flask import Flask,render_template
    
    • 1

    另外也可以修改模板文件的渲染路径,使用template_folder来修改

    app = Flask(__name__,template_folder='../fdf')
    
    • 1

    这里我们不修改。

    模板渲染.html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>模板渲染title>
    head>
    <body>
    <p>你好p>
    <h3>How are youh3>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    模板渲染.py

    from flask import Flask,render_template
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return render_template('模板渲染.html')
    
    if __name__ == '__main__':
        app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行这个flask项目,在根路径下/,执行对应的视图函数,渲染对应的html文件,显示如下:
    在这里插入图片描述

    GET和POST请求

    在设置路由的时候,可以设置访问url的时候,接受的请求方式。
    GET请求表示浏览器需要get某一个文件,服务器就把这个url对应的资源发给浏览器,默认情况下,我们输入url地址,就是在使用GET请求的方式请求资源。比如:

    @app.route('/',methods=["GET"])
    def index():
        return render_template('模板渲染.html')
    
    • 1
    • 2
    • 3

    methods=["GET"]限定访问方式,不写,默认就是GET方式。

    表示在访问根路径/时,只接受get方式的请求,那我们输入url,按回车就是get方式,是可以访问的。
    在这里插入图片描述
    如果修改成:@app.route('/',methods=["POST"])
    当我们点击这个链接后:
    在这里插入图片描述
    就会发现:
    在这里插入图片描述
    这就是因为我们限制了根路径/的访问只能用POST,当然也可以修改为GET,POST都可以的形式

    @app.route('/',methods=["GET","POST"])
    
    • 1

    POST请求,表示的是我现在不是要获取某个资源,而是我有数据需要提交给服务器,让服务器来处理。

    首先,我们的html页面为,这里有一个表单,需要我们填写数据,然后我们把数据交给服务器来处理,设置表单的action="http://localhost:5000/datahandle",也就意味着数据提交到/datahandle这个页面来处理

    test.html

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>post请求title>
    head>
    <body>
        <form action = "http://localhost:5000/datahandle" method = "post">
             <table>
                <tr>
                    <td>Nametd>
                    <td><input type ="text" name ="username">td>
                tr>
                <tr>
                    <td>Passwordtd>
                    <td><input type ="password" name ="password">td>
                tr>
                <tr>
                    <td><input type = "submit">td>
                tr>
            table>
        form>
    form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    然后是py文件,

    from flask import Flask,render_template,request
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return render_template('test.html')
        
    #post数据到这个页面来处理,直接输入url是get方式访问,访问不了,这里限定了只能用POST方式访问
    @app.route('/datahandle',methods=["POST"])
    def handle():
        #获取提交到的数据
        name = request.form['username']
        pwd  = request.form['password']
        return f'name: {name}, password: {pwd}'
    
    
    if __name__ == '__main__':
        app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    进入到根路径后会渲染模板文件test.html,然后在表单中输入name,password后,提交给/datahandle页面来处理,它对应的视图函数handle()处理数据。但是这里涉及到如何拿到表单中的数据,需要使用request

    from flask import Flask,render_template,request
    
    name = request.form['username']
    pwd  = request.form['password']
    
    • 1
    • 2
    • 3
    • 4

    实际上,在form表单中输入的数据都被flask以字典的形式存储起来了,使用print(request.form)可以查看
    表单中输入以下数据:提交,
    在这里插入图片描述
    在控制台中输出ImmutableMultiDict([('username', '123'), ('password', '456')])
    键值对username='123',password = '456'

    然后使用request.form['username']拿到key对应的value,或者使用request.form.get('username')一样可以拿到数据。

    提交后页面跳转到了/datahandle中,处理完的数据返回出来:
    在这里插入图片描述
    成功的拿到了post方式提交的数据。

  • 相关阅读:
    初识Docker
    华为OD机试真题【食堂供餐】
    imagettftext(): Could not find/open font 解决办法
    关于EMC的这些经典问题,你必须知道
    大数据教程-01HDFS的基本组成和原理
    一文搞定Pandas核心概念之Series
    PHP自己的框架2.0结合容器技术(重构篇二)
    从零开始搭建Vue2.0项目(一)之快速开始
    【LeetCode】45. 跳跃游戏 II
    internet download manager2024中文绿色版(IDM下载器)
  • 原文地址:https://blog.csdn.net/weixin_42576837/article/details/126166577