欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Flask教程(五)GET和POST

Flask Web 迷途小书童 4年前 (2020-03-18) 5199次浏览 1个评论

软硬件环境

  • Windows 10 64bit
  • Anaconda3 with python 3.7
  • PyCharm 2019.3
  • Flask 1.1.1

视频看这里

此处是youtube的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

HTTP简介

HTTPHyperText Transfer Protocol的缩写,它是互联网数据传输的基础。在Flask框架中,同样提供了进行数据交互的HTTP方法。

HTTP方法

常用的HTTP请求方法如下表所示

HTTP方法 描述
GET 请求指定的资源,被认为是不安全的方法
POST 会向服务器提交数据,请求服务器进行处理,如表单提交、文件上传
HEAD 与GET方法一样,但是服务器不会回传响应主体,常用来查看服务器的性能
PUT 向服务器上传内容
DELETE 请求服务器删除所请求URI

Flask处理GET和POST

在实际场景中,应用最多的就是GETPOST方法了。在Flask中,我们可以在Flask对象的route方法中指定HTTP方法,如果不写的话,默认的就是GET。为了在服务器端处理POST请求,让我们先创建一个表单来获取用户的输入。来看实例

index.html文件内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GET and POST</title>
</head>
<body>
    <form action = "http://localhost:5000" method = "post">
         <table>
            <tr>
                <td>Name</td>
                <td><input type ="text" name ="username"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type ="password" name ="password"></td>
            </tr>
            <tr>
                <td><input type = "submit"></td>
            </tr>
        </table>
    </form>
</body>
</html>

这里我们在form中指定的是POST方法。接下来在run.py文件中处理请求

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def index():
    username = request.form['username']
    password = request.form['password']
    if username == "xugaoxiang" and password == "xugaoxiang":
        return f"<html><body>Welcome {username}</body></html>"
    else:
        return f"<html><body>Welcome!</body></html>"

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

可以看到,在@app.route中,我们也指定了POST方法,然后通过flask中的request对象来获取form表单的数据,接着进行一个简单判断,返回不同的网页内容。

我们用浏览器打开index.html,在用户名和密码框中都输入xugaoxiang,点击提交,就会跳转到显示Welcome xugaoxiang的页面,否则跳转到显示Welcome的页面,如下图

flask

flask

flask

接下来看看客户端采用GET请求的实例,我们在上面的基础上进行修改即可。

index.html文件,将原来的post改为get

<form action = "http://localhost:5000" method = "get">
    <table>
            <tr>
                <td>Name</td>
                <td><input type ="text" name ="username"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type ="password" name ="password"></td>
            </tr>
            <tr>
                <td><input type = "submit"></td>
            </tr>
    </table>
</form>

run.py中将原来的POST改为GET,表单的接收也适当修改下

@app.route('/', methods=['GET'])
def index():
    username = request.args.get('username')
    password = request.args.get('password')
    if username == "xugaoxiang" and password == "xugaoxiang":
        return f"<html><body>Welcome {username}</body></html>"
    else:
        return f"<html><body>Welcome!</body></html>"

整个运行的结果是一模一样的,但是注意到表单提交之后的地址栏信息,如下

flask

后面多出了?username=xugaoxiang&password=xugaoxiangGET请求会将表单的数据以键值对的形式拼接到URL后发送给服务器。这就是GETPOST最重要的区别,对于一些敏感信息,GET方法是及其不安全的,千万不要这样使用。

源码下载

https://github.com/xugaoxiang/FlaskTutorial

Flask系列教程

更多 Flask 教程,请移步

https://xugaoxiang.com/category/python/flask/

喜欢 (0)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.