一、第一个 flask 程序
#!/usr/bin/python
#coding=utf-8
from flask import Flask # 1. 从使用pip命令安装的flask中引入Flask
app = Flask(__name__) # 2. 创建一个Flask的实例
@app.route("/") # 3. 将网页访问的根路径路由到index方法处理
def index(): # 4. 定义一个方法index,用来处理业务逻辑
return "Hello World!" # 5. 处理业务逻辑
if __name__ == '__main__': # 6. 使用run方法启动Flask集成的开发Web服务器
app.run(debug=True) # 7. 以debug模式启动,方便调试
二、请求响应流程
- 请求的上下文
- 请求调度
- 请求的前后进行操作
- 请求响应
- 小技巧
1. 请求的上下文示例:
#!/usr/bin/python
#coding=utf-8
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
# 打印请求来源信息
agent = request.headers.get('User-Agent', None)
return "From: %s" % agent
@app.route('/head/')
def head():
# 打印headers信息
headers = request.headers
response = ""
for k, v in headers.items():
response += "%s: %s<br/>" % (k, v)
return response
if __name__ == '__main__':
app.run(debug=True)
#!/usr/bin/python
#coding=utf-8
from flask import Flask, session, request
app = Flask(__name__)
@app.route("/")
def index():
""" 首页 """
user = session.get('user', None)
# 如果用户已经登录,此处打印用户信息
print("User In index: %s" % user)
return "Hello World!"
@app.route("/login/<user>/")
def login(user):
""" 模拟登录 """
session['user'] = user
# 将用户信息存入到session
print("login user: %s" % user)
return "Login success"
@app.route("/logout/")
def logout():
""" 模拟登出 """
user = session['user']
print("logout user: %s" % user)
# 将用户信息从session删除
session['user'] = None
return "logout Success!"
# 使用session必须要设置改key,随机的字符串即可
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
if __name__ == '__main__':
app.run(debug=True)
2. 请求调度示例:
#!/usr/bin/python
#coding=utf-8
from flask import Flask, request
app = Flask(__name__)
@app.route('/', ) # 只能POST方式访问
def index():
# 打印headers信息
agent = request.headers.get('User-Agent', None)
return "From: %s" % agent
@app.route('/data/', methods=['GET', 'POST', 'HEAD', 'OPTIONS'])
def data():
""" 处理不同类型的请求
curl -i -X POST "http://127.0.0.1:5000/data/"
curl -i -X GET "http://127.0.0.1:5000/data/"
curl -i -X OPTIONS "http://127.0.0.1:5000/data/"
"""
# 处理post 请求
if request.method == 'POST':
return 'From Post'
# 处理GET请求
elif request.method == 'GET':
return 'From GET'
return "From other"
if __name__ == '__main__':
# print(app.url_map) # 打印调度/路由信息
app.run(debug=True)
3. 在请求前后进行操作:
#!/usr/bin/python
#coding=utf-8
from flask import Flask, session, request
app = Flask(__name__)
@app.route("/")
def index():
""" 首页 """
user = session.get('user', None)
# 如果用户已经登录,此处打印用户信息
print("User In index: %s" % user)
return "Hello World!"
@app.route("/login/<user>/")
def login(user):
""" 模拟登录 """
session['user'] = user
# 将用户信息存入到session
print("login user: %s" % user)
return "Login success"
@app.route("/logout/")
def logout():
""" 模拟登出 """
user = session['user']
print("logout user: %s" % user)
# 将用户信息从session删除
session['user'] = None
return "logout Success!"
@app.route("/error/")
def get_error():
""" 触发异常 """
raise
@app.before_request
def before_request():
""" 在每个请求之前执行 """
print('>>>>>>>>>>starting...')
@app.after_request
def after_request(response):
""" 如果没有未处理的异常抛出,在每次请求之后运行
http://flask.pocoo.org/docs/0.11/api/#flask.Flask.after_request
"""
print('<<<<<<<<<<<<ending...')
return response
@app.teardown_request
def teardown_request(exception):
""" 即使有未处理的异常抛出,也在每次请求之后运行。 """
print('###########teardown###########')
app.secret_key = 'Your_key'
if __name__ == '__main__':
app.run(debug=True)
4. 请求的响应示例:
#!/usr/bin/python
#coding=utf-8
from flask import Flask, request, make_response, redirect, url_for, abort
app = Flask(__name__)
# RESTFUL
@app.route('/')
def index():
# 打印请求来源信息
return '<h1>Bad Request</h1>', 400
@app.route('/test/')
def test():
""" 在response中设置其他值 """
# 打印headers信息
response = make_response('<h1>This document carries a cookie!</h1>')
# 设置一个cookie
response.set_cookie('answer', 'false')
return response
@app.route('/go/')
def go_where():
""" 重定向 """
# 重定向到百度
# return redirect('http://www.baidu.com')
# 重定向到test页面
return redirect(url_for('test'))
@app.route('/down/')
def down():
""" 直接返回状态码 """
# abort(404)
abort(500)
if __name__ == '__main__':
app.run(debug=True)
5. 小技巧:
from test_route.py import app
app.url_map # 查看 app 对应的路由规则
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True) #使用这样的方式,可以在局域网内的另一台电脑上访问页面。
三、使用 flask 插件
首先到 http://flask.pocoo.org/extensions/ 这里找你想要的功能的插件,然后找到对应的 GitHub 项目,里面会有 README.md
教你如何使用。一个简单的发邮件的例子如下:
#!/usr/bin/python
#coding=utf-8
from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)
# 设置邮箱的配置信息
app.config['MAIL_USERNAME'] = 'from@example.com'
app.config['MAIL_SERVER'] = 'smtp.exmail.qq.com'
app.config['MAIL_PASSWORD'] = 'password'
# 初始化邮箱实例
mail = Mail(app)
@app.route('/', )
def index():
# 邮件消息对象
msg = Message(
"Hello",
body="testing",
sender="from@example.com",
recipients=["to@example.com"]
)
# 发送邮件
mail.send(msg)
return "Send Success!"
if __name__ == '__main__':
app.run(debug=True)
网友评论