Python Flask Web开发笔记(一)

由于项目需要,需要学习Python Flask Web开发,下面是学习的记录(参考博客

首先在pycharm中安装flask包,然后新建一个py文件,文件中插入以下代码,进行测试:

from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello World!'
 
if __name__ == '__main__':
    app.run()

然后运行程序,会出现

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

在浏览器打开上面网址,会出现“Hello World”字样,表示flask包调用成功。

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

当客户端访问/时,将响应hello_world()函数返回的内容。注意,这里返回的是HTTP报文,Hello World!只是HTTP响应报文的实体部分,状态码等信息既可以由Flask自动处理,也可以通过编程来制定。

app = Flask(__name__)

这局代码为了程序命名__name__在python 中默认为字符串“__main__”

完整的使用方法如下:path1存放静态资源,path2存放模板。 

下面的app.run代码,默认情况下,Flask绑定IP为127.0.0.1,端口为5000。我们也可以通过下面的方式自定义:

app = Flask("my-app", static_folder="path1", template_folder="path2")

app.run(host='0.0.0.0', port=80, debug=True)

0.0.0.0代表电脑所有的IP。80是HTTP网站服务的默认端口。什么是默认?比如,我们访问网站http://www.example.com,其实是访问的http://www.example.com:80,只不过:80可以省略不写。由于绑定了80端口,需要使用root权限运行server.py

列出所有的URL参数,输入一下代码:

from flask import Flask, request
 
app = Flask(__name__)
 
 
@app.route('/')
def hello_world():
    return request.args.__str__()
 
 
if __name__ == '__main__':
    app.run(port=5000, debug=True)

在电脑浏览器中运行网址 http://127.0.0.1:5000/?user=Flask&time&p=7&p=8

会出现一下结果

浏览器传给我们的Flask服务的数据长什么样子呢?可以通过request.full_pathrequest.path来看一下:

from flask import Flask, request
 
app = Flask(__name__)
 
 
@app.route('/')
def hello_world():
    print(request.path)
    print(request.full_path)
    return request.args.__str__()
 
 
if __name__ == '__main__':
    app.run(port=5000, debug=True)

查看Post中的数据,以用户注册为例子,我们需要向服务器/register传送用户名name和密码password。代码如下编写

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())
    return 'welcome'
 
 
if __name__ == '__main__':
    app.run(port=5000, debug=True)

`@app.route(‘/register’, methods=[‘POST’])是指url/register只接受POST方法。可以根据需要修改methods`参数,同时接收“GET”和Post两种方式。

运行成功以后,我们可以从之前的运行结果看到一下结果:

Host: 127.0.0.1:5000
User-Agent: python-requests/2.25.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 24
Content-Type: application/x-www-form-urlencoded


b'name=letian&password=123'

接下来解析POST中的数据,其中 b'name=letian&password=123'  我们从中提取出name 和password,可以使用python中的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'))
    print(request.form.get('nickname', default='little apple'))
    return 'welcome'
 
 
if __name__ == '__main__':
    app.run(port=5000, debug=True)

可以在flask文件中出现一下数据:

ImmutableMultiDict([('name', 'letian'), ('password', '123')])
letian
letian
['letian']
little apple

request.form会自动解析数据。request.form['name']request.form.get('name')都可以获取name对应的值。对于request.form.get()可以为参数default指定值以作为默认值。

使用 HTTP POST 方法传到网站服务器的数据格式可以有很多种。我们也可以用JSON格式、XML格式。相比XML的重量、规范繁琐,JSON显得非常小巧和易用。如果POST的数据是JSON格式,request.json会自动将json数据转换成Python类型(字典或者列表)。代码如下:

from flask import Flask, request
 
app = Flask("my-app")
 
 
@app.route('/')
def hello_world():
    return 'Hello World!'
 
 
@app.route('/add', methods=['POST'])
def add():
    print(request.headers)
    print(type(request.json))
    print(request.json)
    result = request.json['a'] + request.json['b']
    return str(result)
 
 
if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000, debug=True)

附python文件代码如下:

import requests
 
json_data = {'a': 1, 'b': 2}
 
r = requests.post("http://127.0.0.1:5000/add", json=json_data)
 
print(r.text)

运行结果如下:

Host: 127.0.0.1:5000
User-Agent: python-requests/2.19.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 16
Content-Type: application/json
 
<class 'dict'>
{'a': 1, 'b': 2}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值