flask_二、简单应用(请求说明+钩子函数)

简单应用实例

一、app.py文件内容

app.py文件内容
from flask import Flask, request
import flask

app = Flask(__name__)


@app.route("/hello/")
def hello():
    name = request.args.get('name', 'flask')  # 获取查询参数name的值
    return '<h1>Hello,%s<h1>' % name  # 替换到返回值中


if __name__ == '__main__':
    # with app.test_request_context():   # 上下文管理
    # print("url_for('hello_world1'): %s" % url_for('hello_world1'))
    app.run(debug=True)

1.1说明:

request.args.get('name', 'flask')中:

flask是一个end值

,从args找到了属性值,就去找name,找不到就默认用flask返回

1.2运行结果

http://127.0.0.1:5000/hello/?name=GoodBoy

 

 

 

 

http://127.0.0.1:5000/hello/

 

 

 二、Flaskrequest对象

 

@app.route('/hello/')
def hello():

    print("request: %s" % request )
    print("request.path: %s" % request.path)
    print("request.full_path: %s" % request.full_path)
    print("request.host: %s" % request.host)
    print("request.host_url: %s" % request.host_url)
    print("request.base_url: %s" % request.base_url)
    print("request.url: %s" % request.url)
    print("request.url_root: %s" % request.url_root)
    print("request.args: %s" %request.args)
    print("request.args.items(): %s" % request.args.items())
    print("request.headers:\n %s" % request.headers)
    print("请求数据request.data:  %s" % request.data)
    print("request.endpoint: %s" % request.endpoint)
    print("request.json: %s" % request.json)
    print("request.method: %s" % request.method)
    print("请求的url模式(http或https)request.scheme: %s" % request.scheme)
    print("request.user_agent:\n %s" % request.user_agent)

    name = request.args.get('name','Flask') #获取查询参数name的值
    return '<h1>Hello, %s</h1>' % name  # 替换到返回值中

 

 

2.1查看路由信息

flask routes(端点和url的关系)

三、Flask中处理请求,指定方法

@app.route('/hi',methods=['GET','POST'])  # 指定请求方法
def hi():
    return '<h1>Hello, Flask!</h1>'
 
if __name__ == '__main__':
    app.run(debug=True)

四、url变量转换器

 

@app.route('/goback/<int:year>')  # url变量转换器
def go_back(year):
    return '<p>Welcom to %s ! </p>' %(2019-year)
 
if __name__ == '__main__':
    app.run(debug=True)
 
 

 
@app.route('/colors/<any(blue,white,red):color>')#any转换器,任意一个都可以访问
def three_colors(color):
    return '<p> life is coloful!</p>'
 
if __name__ == '__main__':
    app.run(debug=True)

 

 

 

五、请求钩子

app.py文件内容

 

from flask import Flask
import flask
app = Flask(__name__)
# @app.route('/colors/<any(blue,white,red):color>')#any转换器,任意一个都可以访问
# def three_colors(color):
#     return '<p> life is coloful!</p>'
# if __name__ == '__main__':
#     app.run(debug=True)
@app.before_request # 处理每个请求前运行(记录请求时间)
def before_request():
    print("before request")
@app.before_first_request # 处理第一个请求前运行(初始化,添加数据库,建立连接)
def before_first_request():
    print("before first request")
@app.after_request # 若没有未处理的异常抛出,会在每个请求结束后运行(请求后,更新数据库表)
def per_request_callbacks(response):
    print("after request")
    return response
@app.teardown_request # 若没有未处理的异常抛出,会在每个请求结束后运行
                      # 若发生异常会传入一场对象作为参数到注册的函数中
def teardown_request(e): # 最后一步执行的函数(譬如:关闭连接)
    print("teardown request")
    print("e: %s" % e)

@app.route('/A')
def A():
    return '<p> this is function AA</p>'
@app.route('/B')
def B():
    return '<p>this is function B</p>'
@app.route('/C')
def C():
    @flask.after_this_request # 处理这个请求之后来运行下面的函数
    def after_this_request(response):
        print("after this request")
        # raise ValueError
        response.status_code = 208
        return response
    return "<p>after this request</p>"
if __name__ == '__main__':
    app.run(debug=True)

 

5.1原理图解

 

 

 

最后一步:发出响应

六、指定返回码

from flask import Flask
import flask
app = Flask(__name__)

@app.route('/hello/',methods=['post','get'])
def hello():
    return '<h1>Hello RenYc</h1>',201
if __name__ == '__main__':
    app.run(debug=True)

运行结果:

 

 七、Flask中生成响应

from flask import Flask,make_response
import flask
app = Flask(__name__)

@app.route('/foo')
def foo():
    response = make_response("Hello,make a respnse by yourself")
    response.mimetype = 'application/json'
    return response
if __name__ == '__main__':
    app.run(debug=True)


############################################################

from flask import Flask, make_response
import flask

app = Flask(__name__)


@app.route('/foo')
def foo():
    d = [1, 2, 3]
    response = make_response("Hello,make a respnse by yourself")
    # response.mimetype = 'application/json'
    response.mimetype = 'text/plain'
    return response


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

运行结果:

 

 

 

 

 

posted @ 2022-04-20 00:14  翻滚的小强  阅读(70)  评论(0)    收藏  举报