Flask HTML Escape装饰器

时间:2015-11-03 03:28:53

标签: python flask

如何在HTML路径上使用装饰器来逃避其输出。也就是说,我如何在这里编写html_escape函数:

@app.route('/')
@html_escape
def index():
    return '<html></html>'

(我觉得应该有这个和其他简单的装饰者的扩展名)

3 个答案:

答案 0 :(得分:7)

Flask有自己的escape,doc:flask.escape

所以,你可以:

from flask import escape

@app.route('/')
def index():
    return escape("<html></html>")

如果你坚持使用装饰器:

from functools import wraps
from flask import escape

def my_escape(func):
    @wraps(func)
    def wrapped(*args, **kwargs):
        return escape(func(*args, **kwargs))
    return wrapped

@app.route('/')
@my_escape
def index():
    return "<html></html>"

答案 1 :(得分:1)

您想使用cgi模块的escape功能进行转义。假设您的函数只返回一个字符串,它可以像下面这样简单:

import cgi


def html_escape(func):
    def wrapped(*args, **kwargs):
        return cgi.escape(func(*args, **kwargs))
    return wrapped


@html_escape
def index():
    return "<html></html>"

print index()

答案 2 :(得分:0)

html_escape_table = {
    "&": "&amp;",
    '"': "&quot;",
    "'": "&apos;",
    ">": "&gt;",
    "<": "&lt;",
}
def html_escape(text):
    return "".join(html_escape_table.get(c,c) for c in text)

print html_escape("<a>test</a>")

result -> &lt;a&gt;test&lt;/a&gt;