一、前言
参考:http://www.imooc.com/wiki/flasklesson/flaskhttp.html
上篇我们创建了第一个 Flask 程序,并且在浏览器中成功看到了 Flask 程序给我们返回的 Hello World。但是你有没有注意到,我们看到的内容只是在后台进行写死的,也就是说无论你怎么请求,看到的永远是 Hello World,无法根据自己的需求让 Flask 程序返回给你想要的内容?这该怎么办呢?不要急,我们有 HTTP 协议,HTTP 协议提供了多种方法访问服务端资源
二、常用的HTTP方法
浏览器向 Web 服务器发出请求时,它向服务器传递了一个请求信息,HTTP 请求信息由 3 部分组成:
- 请求行;
- 请求头;
- 请求正文。
根据 HTTP 标准,常用的 HTTP 请求如下所示:
三、Flask中的HTTP方法
1、GET方法
from flask import Flask app = Flask(__name__) # 不指定 methods,默认就是 GET @app.route('/') def hello_world(): # 返回字符串 return '<b>Hello World</b>' @app.route('/get', methods=["GET"]) def get_(): # 返回字符串 return '这是get请求' if __name__ == '__main__': app.run()
默认的 app.route() 是仅支持 GET 请求的,如果想通过 POST、PUT、DELTE 等方法正常请求的话,需要添加 methods 参数
2、POST方法
from flask import Flask app = Flask(__name__) @app.route('/post', methods=["POST"]) def post_(): # 返回字符串 return {"message":"请求成功","code":"200"} if __name__ == '__main__': app.run()
如果 return 的是字典,那么请求得到的响应数据是 Json 格式哦
四、URL组成部分
1、URL组成详解
一个常见的url:https://www.cnblogs.com/Chilam007/
由以下几部分组成:scheme://host:port/path?key=value
- scheme:代表的是访问的协议,一般为 http 或者 https。例如,https://www.baidu.com 的协议是 https;
- host:主机名、域名,例如,https://www.baidu.com 的 host 为 www.baidu.com;
- port:端口号,http 协议默认使用 80 端口,https 协议默认使用 443 端口。通常情况下,使用默认值,不需要显式的写明端口号,例如,https://www.baidu.com 的端口是 443。某些情况下,可以显式的写明端口号,例如,http://localhost:5000 的端口号是 5000;
- path:页面路径,例如:https://www.cnblogs.com/Chilam007/p/16991728.html的 path 是 Chilam007/p/16991728
- key=value:查询字符串,例如:https://www.baidu.com/s?wd=python,查询字符串是 wd=python,查询字符串包括两部分:参数名和参数值,这个例子中,参数名是 wd,参数值是 python
2、在Flask中分析URL参数
- 服务端收到将客户端发送的数据后,封装形成一个请求对象,在 Flask 中,请求对象是一个模块变量 flask.request
- request 对象包含了众多的属性
- 假设 URL 等于 http://localhost/query?userId=123,则与 URL 参数相关的属性如下:
3、实际例子
from flask import Flask,request app = Flask(__name__) def echo(key, value): print('%-10s = %s' % (key, value)) # 定义路径 /query 的处理函数 query() @app.route('/query') def query(): '''打印 request 对象中和 URL 相关的属性;URL 中的查询参数保存在 request.args 中''' echo('url', request.url) echo('base_url', request.base_url) echo('host', request.host) echo('host_url', request.host_url) echo('path', request.path) echo('full_path', request.full_path) print() print(request.args) # 打印查询参数 userId 的值 print('userId = %s' % request.args['userId']) return 'hello' if __name__ == '__main__': app.run()
浏览器访问:http://127.0.0.1:5000/query?userId=123
控制台输出结果: