很明显Flask是一个轻量级框架
安装Flask
进入D:\Python\Scripts输入
第一个Hello World
创建一个demo0.py文件
| 12
 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()
 
 | 
运行
好的, 第一个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
| 12
 3
 
 | @app.route('/hello')def hello_world():
 return 'hello world'
 
 | 
也可以改写成如下的形式
| 12
 3
 4
 5
 
 | def hello_world():
 return 'Hello World!!'
 
 app.add_url_rule('/hello', 'hello', hello_world)
 
 | 
app.add_url_rule用来绑定URL和函数, 中间的参数是路由的端点, 唯一标识路由的字符串
接收参数
| 12
 3
 
 | @app.route('/hello/<name>')def hello_world(name):
 return 'Hello%s World!!' % name
 
 | 
路由上定义一个参数, 然后函数上接收这个参数, 最后将这个参数返回给页面

一般来说默认是字符串类型的, 当然也可以指定类型
比如int, float
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | @app.route('/num/<int:num>')def get_num(num):
 
 return '%d' % num
 
 @app.route('/float/<float:num>')
 def get_float(num):
 
 return '%f' % num
 
 | 
http://127.0.0.1:666/num/1
http://127.0.0.1:666/float/1.0
| 12
 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
| 12
 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
 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页面
| 12
 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代码
| 12
 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 这个模板引擎来渲染模板
| 12
 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>
 
 | 
| 12
 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内容