pythonFlask框架钩子函数和小项目实践

常用的钩子函数

before_first_request_处理第一次请求之前执行

pythonFlask框架钩子函数和小项目实践_第1张图片

from flask import Flask

app =Flask(__name__)


@app.route('/')
def index():
    print('首页')
    return '首页1'

# 在处理第一次请求前执行
@app.before_first_request
def before_first_request():
    print('在我访问路由之前访问的第一个函数')



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

先访问before_first_request(先打印)才访问根目录路由(后打印)

在这里插入图片描述

before_request_在每次请求之前执行。通常可以用这个装饰器来给视图函数增加一些变量

pythonFlask框架钩子函数和小项目实践_第2张图片
pythonFlask框架钩子函数和小项目实践_第3张图片

teardown_appcontext:不管是否有异常,注册的函数都会在每次请求之后执行

context_processor:上下文处理器。返回的字典中的键可以在模板上下文中使用

pythonFlask框架钩子函数和小项目实践_第4张图片

上下文处理器作用:

不用这个的做法:

pythonFlask框架钩子函数和小项目实践_第5张图片
pythonFlask框架钩子函数和小项目实践_第6张图片
pythonFlask框架钩子函数和小项目实践_第7张图片

用了context_processor后,即使这里注释了,只要有渲染出来就会显示

pythonFlask框架钩子函数和小项目实践_第8张图片
pythonFlask框架钩子函数和小项目实践_第9张图片
pythonFlask框架钩子函数和小项目实践_第10张图片
pythonFlask框架钩子函数和小项目实践_第11张图片
pythonFlask框架钩子函数和小项目实践_第12张图片
pythonFlask框架钩子函数和小项目实践_第13张图片
pythonFlask框架钩子函数和小项目实践_第14张图片

errorhandler:errorhandler接收状态码,可以自定义返回这种状态码的响应的处理方法

pythonFlask框架钩子函数和小项目实践_第15张图片
pythonFlask框架钩子函数和小项目实践_第16张图片

pythonFlask框架钩子函数和小项目实践_第17张图片

500 服务器错误——需要关闭debug才可以显示,不然debug会显示错误,就看不到这条了

pythonFlask框架钩子函数和小项目实践_第18张图片
pythonFlask框架钩子函数和小项目实践_第19张图片
在这里插入图片描述
pythonFlask框架钩子函数和小项目实践_第20张图片

开了debug会这样:

pythonFlask框架钩子函数和小项目实践_第21张图片

abort()主动抛出异常(在正常页面也可做)——需要导入——from flask import abort

pythonFlask框架钩子函数和小项目实践_第22张图片
pythonFlask框架钩子函数和小项目实践_第23张图片
pythonFlask框架钩子函数和小项目实践_第24张图片

Restful API规范——方便迭代更新

pythonFlask框架钩子函数和小项目实践_第25张图片
pythonFlask框架钩子函数和小项目实践_第26张图片
pythonFlask框架钩子函数和小项目实践_第27张图片

API需要导库——flask-restful,导入Api和Resource

pythonFlask框架钩子函数和小项目实践_第28张图片
pythonFlask框架钩子函数和小项目实践_第29张图片
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
pythonFlask框架钩子函数和小项目实践_第30张图片

reqparse的作用跟flask的request类似

pythonFlask框架钩子函数和小项目实践_第31张图片
pythonFlask框架钩子函数和小项目实践_第32张图片

post中不添加username和value值——parse.add_argument(‘username’, type=str, help=‘用户名错误’, required=True),会出现help内容

pythonFlask框架钩子函数和小项目实践_第33张图片

传递了

pythonFlask框架钩子函数和小项目实践_第34张图片

再加一个password

pythonFlask框架钩子函数和小项目实践_第35张图片
pythonFlask框架钩子函数和小项目实践_第36张图片

加上required的话

pythonFlask框架钩子函数和小项目实践_第37张图片
pythonFlask框架钩子函数和小项目实践_第38张图片
pythonFlask框架钩子函数和小项目实践_第39张图片

args = parse.parse_args()这个是参数的显示

在这里插入图片描述

type换成int类型,只能输入数字而不能是其他

在这里插入图片描述
pythonFlask框架钩子函数和小项目实践_第40张图片
pythonFlask框架钩子函数和小项目实践_第41张图片

枚举类型是choices=[’’,’’]

pythonFlask框架钩子函数和小项目实践_第42张图片
pythonFlask框架钩子函数和小项目实践_第43张图片
pythonFlask框架钩子函数和小项目实践_第44张图片

网址url的type类型是inputs.url,inputs需要导包,from flask_restful import inputs

在这里插入图片描述
pythonFlask框架钩子函数和小项目实践_第45张图片
pythonFlask框架钩子函数和小项目实践_第46张图片

案例展示

from flask import Flask
from flask_restful import Api, Resource, reqparse, inputs, fields, marshal_with

app = Flask(__name__)

# 使用Api绑定app
api = Api(app)


class IndexView(Resource):
    resource_fields = {
     
        'title': fields.String,
        'content': fields.String
    }

    # @marshal_with(resource_fields)
    def get(self):
        return {
     }
        # return {'username': 'engine'}
        # return {'title': 'pythn'}

    def post(self):
        
        return {
     'infos': '登录成功'}


# api.add_resource(IndexView, '/', endpoint='index')
api.add_resource(IndexView, '/article/', endpoint='article')

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

pythonFlask框架钩子函数和小项目实践_第47张图片

将resource_fields的内容放在article的路由,只用导入marshal库即可

pythonFlask框架钩子函数和小项目实践_第48张图片

pythonFlask框架钩子函数和小项目实践_第49张图片

在return中写出内容

pythonFlask框架钩子函数和小项目实践_第50张图片

pythonFlask框架钩子函数和小项目实践_第51张图片

config文件

pythonFlask框架钩子函数和小项目实践_第52张图片

中间文件exts

pythonFlask框架钩子函数和小项目实践_第53张图片

模型models文件

pythonFlask框架钩子函数和小项目实践_第54张图片

manage文件

pythonFlask框架钩子函数和小项目实践_第55张图片

cmd输入python manage.py db init(注意库的版本问题,此处版本为2.1.1)

pythonFlask框架钩子函数和小项目实践_第56张图片

python manage.py db migrate

pythonFlask框架钩子函数和小项目实践_第57张图片

取得了版本号

pythonFlask框架钩子函数和小项目实践_第58张图片

python manage.py db upgrade

在这里插入图片描述
pythonFlask框架钩子函数和小项目实践_第59张图片

结果

pythonFlask框架钩子函数和小项目实践_第60张图片
在这里插入图片描述
pythonFlask框架钩子函数和小项目实践_第61张图片

但在author查不出uid外键的内容(username和email)需要用fields.Nested({’’:’’,’’:’’})

pythonFlask框架钩子函数和小项目实践_第62张图片

pythonFlask框架钩子函数和小项目实践_第63张图片

重命名渲染出来的数据内容

pythonFlask框架钩子函数和小项目实践_第64张图片
pythonFlask框架钩子函数和小项目实践_第65张图片

你可能感兴趣的:(Flask框架,python)