Flask快速入门

很明显Flask是一个轻量级框架

安装Flask

进入D:\Python\Scripts输入

1
pip install Flask

第一个Hello World

创建一个demo0.py文件

1
2
3
4
5
6
7
8
9
10
from flask import Flask

app = Flask(__name__)

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

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

运行

1
py demo0.py

好的, 第一个Hello World就成功运行起来了

接下来手搓一个后台管理系统吧^_^

run()函数

1
app.run(host, port, debug, options)

host就是主机名, 默认127.0.0.1, 设置成0.0.0.0可以暴露给其他主机访问
port就是端口
debug表示调试模式, 在程序运行时, 如果修改了代码, 调试模式就类似于热部署了
options表示要转发给底层的服务器

路由

@app.route后面就是访问的路径
http://127.0.0.1:666/hello

1
2
3
@app.route('/hello')
def hello_world():
return 'hello world'

也可以改写成如下的形式

1
2
3
4
5
# @app.route('/hello')
def hello_world():
return 'Hello World!!'

app.add_url_rule('/hello', 'hello', hello_world)

app.add_url_rule用来绑定URL和函数, 中间的参数是路由的端点, 唯一标识路由的字符串

接收参数

1
2
3
@app.route('/hello/<name>')
def hello_world(name):
return 'Hello%s World!!' % name

路由上定义一个参数, 然后函数上接收这个参数, 最后将这个参数返回给页面

一般来说默认是字符串类型的, 当然也可以指定类型
比如int, float

1
2
3
4
5
6
7
8
9
@app.route('/num/<int:num>')
def get_num(num):
# return num # 不要写成这样, 会被当成字符串的
return '%d' % num

@app.route('/float/<float:num>')
def get_float(num):
# return num # 不要写成这样, 会被当成字符串的
return '%f' % num

http://127.0.0.1:666/num/1
http://127.0.0.1:666/float/1.0

1
2
3
4
5
6
7
@app.route('/flask')
def hello_flask():
return 'Hello Flask'

@app.route('/python/')
def hello_python():
return 'Hello Python'

http://127.0.0.1:666/flask 可以正常请求
http://127.0.0.1:666/flask/ 不可以正常请求

http://127.0.0.1:666/python 正常请求
http://127.0.0.1:666/python/ 正常请求

url_for

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
# Flask URL构建

from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/admin')
def hello_admin():
return 'Hello Admin'


@app.route('/guest/<guest>')

def hello_guest(guest):
return 'Hello %s as Guest' % guest


@app.route('/user/<name>')
def hello_user(name):
if name =='admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guest', guest = name))


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

url_for是用来生成url的
url_for(‘hello_admin’) => /user/admin => /admin
url_for(‘hello_guest’, guest = name) => /user/123 => /guest/123

当请求的是 http://127.0.0.1:5000/user/123 => http://127.0.0.1:5000/guest/12
返回的Hello 12 as Guest

请求http://127.0.0.1:5000/admin 返回Hello Admin

HTTP方法

创建一个html页面

1
2
3
4
5
6
7
8
9
<html>
<body>
<form action = "http://localhost:5000/login" method = "post">
<p>Enter Name:</p>
<p><input type = "text" name = "nm" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>

然后http-server运行这个页面

1
http-server -o .\login.html

然后编写如下Python代码

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
from flask import Flask, redirect, url_for, request, render_template

app = Flask(__name__)

@app.route('/')
def index():
return render_template("login.html")

@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name

@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
print(1)
user = request.form['nm']
return redirect(url_for('success',name = user))
else:
print(2)
user = request.args.get('nm')
return redirect(url_for('success',name = user))

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

当method为post时, 控制台输出的是1
当method为get时, 控制台输出的是2

1
<form action = "http://localhost:5000/login" method = "post">

模板引擎

Flask 是使用 Jinja2 这个模板引擎来渲染模板

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
我的模板html内容
</body>
</html>
1
2
3
4
5
6
7
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
return render_template('hello.html')

当有人请求 http://localhost:5000/ 将会呈现我的模板html内容

1
2
3
```

```html

Flask快速入门
https://xiamu.icu/Python/Flask快速入门/
作者
肉豆蔻吖
发布于
2023年5月23日
许可协议