在 Flask 中,装饰器用于修饰(装饰)函数或方法,其中最常见的用途之一是修饰视图函数。装饰器允许你在执行视图函数之前或之后执行一些额外的逻辑,例如身份验证、日志记录、缓存控制等。以下是一些常用的 Flask 视图装饰器:

1. @route

@route 装饰器用于将视图函数与指定的 URL 路由关联起来。
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello, World!'

2. @methods

@methods 装饰器用于指定视图函数接受的 HTTP 方法。
from flask import Flask

app = Flask(__name__)

@app.route('/submit', methods=['POST'])
def submit_form():
    return 'Form submitted successfully!'

3. @template

@template 装饰器用于指定渲染的模板。
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/dashboard')
@template('dashboard.html')
def dashboard():
    data = get_dashboard_data()
    return {'data': data}

4. @before_request 和 @after_request

@before_request 装饰器用于在每个请求之前执行一些逻辑,例如身份验证检查。
from flask import Flask, g

app = Flask(__name__)

@app.before_request
def before_request():
    g.user = get_authenticated_user()

@after_request 装饰器用于在每个请求之后执行一些逻辑,例如添加响应头。
from flask import Flask

app = Flask(__name__)

@app.after_request
def after_request(response):
    response.headers['X-Frame-Options'] = 'DENY'
    return response

5. @errorhandler

@errorhandler 装饰器用于处理指定 HTTP 错误码的错误。
from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404

6. 自定义装饰器

你还可以自定义装饰器,用于执行特定的逻辑。例如,下面是一个简单的性能日志装饰器:
from flask import Flask
import time

app = Flask(__name__)

def log_execution_time(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f'{func.__name__} executed in {end_time - start_time:.4f} seconds')
        return result
    return wrapper

@app.route('/')
@log_execution_time
def home():
    return 'Hello, World!'

这只是一些 Flask 视图装饰器的示例。你可以根据需要使用这些装饰器或创建自定义装饰器,以更好地组织和处理你的视图函数逻辑。


转载请注明出处:http://www.zyzy.cn/article/detail/7325/Flask