Flask框架(二)

本文介绍Flask框架中的自定义异常处理方法,包括abort与errorhandler的使用,以及请求钩子如before_request、after_request的功能与实践。同时,文章涵盖状态码设置、Cookie与Session管理等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义异常

"""

abort(code):主动抛出异常状态码

参数code:HTTP的错误状态码

例如:abort(404)

errorhandler(code_or_exception):用来监听捕捉异常,然后返回自定义的页面处理

参数:code_or_exception – HTTP的错误状态码或指定异常

场景: 二者配合使用,自定义异常页面

"""""

@app.route('/<int:age>')

def play_game(age):

    if age > 18:

        return "可以享受成年人的待遇啦!"

    elif age >15:

        raise Exception("快要成年啦!")

    else:

        abort(404)

    return "hello world"

 

#捕捉异常并且处理

@app.errorhandler(404)

def error(e):(这里的e接收的是异常状态信息,且必须设置接收)

    return "快快长大吧!"

@app.errorhandler(Exception)

def error2(e):

    print(e)

    return "服务器出现错误了"

 

状态码

直接返回响应体的同时设置状态码

1. 直接返回, 响应体 + 状态码

    return "hello",888

    

2. 手动创建响应体对象

    response =make_response(响应体内容)

    response.status = "888"

return response

 

请求钩子

请求钩子是通过装饰器来实现的,flask支持四种请求钩子:
1.before_first_request:在处理第一个请求前执行,只有第一次访问的时候才执行,适合做:初始化操作,数据库的链接和表的创建。

@app.before_first_request

 

  1. before_request :在每次请求前执行,在该装饰器函数中一旦return视图函数不在执行。适合对请求参数做校验,访问统计。

@app.before_request

def before_request():

    #获取请求参数

    token = request.args.get("token")

  #进行解密之后,值是否登陆123, 证明非法请求,校验请求参数

    if token == "123":

        return "非法请求,你是坏蛋"

 

  1. after_request :如果没有抛出错误,每次请求后执行,接收一个参数,视图函数做出响应,适合做数据类型的统一设

@app.after_request

def after_request(resp):

    print("after_request")

    resp.headers["Content-Type"] = "application/json"

return resp

 

  1. teardown_request:在每次请求销毁后执行,接收一个参数:用来接收错误信息服务器内部记录异常信息

@app.teardown_request

def teardown_request(e):  print(e)

request

request请求对象,里面封装了浏览器请求的所有参数信息

request.data: 获取的是浏览器提交的json数据

request.form: 获取浏览器提交的表单数据

request.cookies: 拿到浏览器中所有的cookie

request.headers: 获取到浏览器所有请求头信息

request.method : 获取浏览器请求方式

request.url: 获取请求路径

request.files: 获取浏览器传递的文件, 一般是input标签中的type=file

request.args: 获取地址中问号后面的参数

print(request.args.get("name10"))# 以后都使用这个方法,如果有值去对应的值,如果没值返回None

指定请求方式:

如果给视图函数指定请求方式

格式: @app.route("路径",methods=[方式1,方式2])

常见请求方式: GET,POST,PUT,DELETE

注意点: 如果不指定,默认是GET请求

app.run的参数

可以指定运行的主机IP地址,端口,是否开启调试模式

app.run(host="0.0.0.0", port=5000, debug = True)

url_map: 可以查看当前应用程序绑定了哪些路由路径,和视图函数之间的映射关系

格式: app.url_map, 返回的是map集合,里面存放着所有的路由表

Cookie:

cookie:用来记录服务器和浏览器的交互记录,由服务端设置,存储浏览器

设置方式(key value必须为双引号)

response = make_response(这里的内容显示在页面)

response.set_cookie(key,value,max_age)

    max_age: 有效时间,如果不设置,默认就是一次浏览器会话结束   

获取方式:

    value = request.cookies.get(key)

session:

用来保存客户端和服务器重要的交互数据,由服务端创建,存储在服务器

设置方式:

    session[key] = value

获取方式:

value = session.get(key)

删除方式:

sesssion.pop(key)

del session[key]

注意点:

1.session的存储依赖于cookie,将sessionID存储到浏览器

2.sessionID由于存在浏览器需要加密,设置SECRET_KEY

app.config["SECRET_KEY"] = "fhdk^fk#djefkj&*&*&"

3.具体内容存在服务器

请求上下文

request: 和每个请求相关,封装的每次请求相关的数据

session: 和每个用户相关(浏览器),里面存储的是用户的敏感信息

应用上下文:

current_app: app的代理对象,在模块开发中可以获取到app所有的配置信息

g: 在一次完成的请求中有效,可以使用g对象做登陆装饰器,封装用户数据

g 作为 flask 程序全局的一个临时变量,充当者中间媒介的作用,我们可以通过它传递一些数据,g 保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过不同的thread id区别

注意:不同的请求,会有不同的全局变量

请求上下文:保存了客户端和服务器交互的数据

应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、 数据库连接、应用信息等

 

flask_script: 扩展包

作用:

    1.动态运行程序,可以在终端运行传入参数

    2.配合flask_migrate做数据库迁移   

如何使用:

1. 安装,导入Manager类

2. 使用Manager管理app

3. 启动: python xxx.py runserver -h IP地址 -p port端口

from flask_script import Manager

manager = Manager(app)

manager.run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值