美文网首页
Python flask 学习笔记(一)

Python flask 学习笔记(一)

作者: 酷酷滴小爽哥 | 来源:发表于2018-12-08 19:03 被阅读0次

一、第一个 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) 

相关文章

网友评论

      本文标题:Python flask 学习笔记(一)

      本文链接:https://www.haomeiwen.com/subject/zshqhqtx.html