Python Flask Web第一个程序解析和post简说

一、Flask 第一个程序
1.flask默认目录说明

static和templates目录是默认配置。
static用来存放静态资源,例如图片、js、css文件等。
templates存放模板文件。

2.Hello World
from flask import Flask

app = Flask(__name__)


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


if __name__ == '__main__':
    app.run()
3.分析第一个程序

变量app是一个Flask实例,功能就是接受来自web服务器的请求。
1.浏览器将请求给web服务器,web服务器将请求给app ,
2.app收到请求,通过路由找到对应的视图函数,然后将请求处理,得到一个响应response
3.然后app将响应返回给web服务器,
4.web服务器返回给浏览器,
5.浏览器展示给用户观看,流程完毕。


"""第一部分,初始化:所有的Flask都必须创建程序实例,
程序实例是Flask的对象,一般情况下用如下方法实例化
Flask类只有一个必须指定的参数,即程序主模块或者包的名字,__name__是系统变量,该变量指的是本py文件的文件名"""
 
from flask import Flask
app = Flask(__name__)
 
#  第二部分,路由和视图函数:
#  客户端发送url给web服务器,web服务器将url转发给flask程序实例,程序实例
#  需要知道对于每一个url请求启动那一部分代码,所以保存了一个url和python函数的映射关系。
#  处理url和函数之间关系的程序,称为路由
#  在flask中,定义路由最简便的方式,是使用程序实例的app.route装饰器,把装饰的函数注册为路由
 
@app.route('/')
def hello_world():
    return __name__
 
 
#  第三部分:程序实例用run方法启动flask集成的开发web服务器
#  __name__ == '__main__'是python常用的方法,表示只有直接启动本脚本时候,才用app.run方法
#  如果是其他脚本调用本脚本,程序假定父级脚本会启用不同的服务器,因此不用执行app.run()
#  服务器启动后,会启动轮询,等待并处理请求。轮询会一直请求,直到程序停止。
 
if __name__ == '__main__':
    print('dd',__name__)
    app.run()
3.调整模式

以app.run()方式运行,如果服务器端出现错误是不会在客户端显示的。但是在开发环境中,显示错误信息是很有必要的,要显示错误信息,应该以下面的方式运行Flask:

app.run(debug=True)

debug=True的另一个好处是,程序启动后,会自动检测源码是否发生变化,若有变化则自动重启程序。

4.绑定ip和端口
app.run(host='0.0.0.0', port=80, debug=True)

0.0.0.0代表电脑所有的IP。80是HTTP网站服务的默认端口。

二,POST方法
1.获取POST方法传送的数据

作为一种HTTP请求方法,POST用于向指定的资源提交要被处理的数据。我们在某网站注册用户、写文章等时候,需要将数据传递到网站服务器中。并不适合将数据放到URL参数中,密码放到URL参数中容易被看到,文章数据又太多,浏览器不一定支持太长长度的URL。这时,一般使用POST方法。此时要加入requests哭。

pip install requests
2.查看POST数据内容

以用户注册为例子,我们需要向服务器/register传送用户名name和密码password。
创建post_data.py

from flask import Flask, request
 
app = Flask(__name__)
 
 
@app.route('/')
def hello_world():
    return 'hello world'
 
 
@app.route('/register', methods=['POST'])  #url/register只接受POST方法
def register():
    print(request.headers)
    print(request.stream.read())
    return 'hello'
 
 
if __name__ == '__main__':
    app.run( debug=True)

在创建一个check.py,内容:

import requests
 
user_info = {'name': 'hello', 'password': '123'}
r = requests.post("http://127.0.0.1:5000/register", data=user_info)
 
print(r.text)

运行两个文件将得到

hello

print(request.stream.read())

这个得到的结果为

b’name=hello&password=123’

3.解析POST数据

上面可知我们得到的结果为
b’name=hello&password=123’
我们如何获得我们想要的name、password呢?
这时就要借用Flask内置的解析器:request.form

from flask import Flask, request
 
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'hello world'
 
 
@app.route('/register', methods=['POST'])
def register():
    print(request.headers)
    # print(request.stream.read()) # 不要用,否则下面的form取不到数据
    print(request.form)
    print(request.form['name'])
    print(request.form.get('name'))
    print(request.form.getlist('name'))
    return 'hello'
 
 
if __name__ == '__main__':
    app.run(port=5000, debug=True)

运行结果

ImmutableMultiDict([(‘name’, ‘hello’), (‘password’, ‘123’)])
hello
hello
[‘hello’]

request.form会自动解析数据。
request.form[‘name’]和request.form.get(‘name’)都可以获取name对应的值。
如果name有多个值,可以使用request.form.getlist(‘name’),该方法将返回一个列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值