如何在HTML路径上使用装饰器来逃避其输出。也就是说,我如何在这里编写html_escape
函数:
@app.route('/')
@html_escape
def index():
return '<html></html>'
(我觉得应该有这个和其他简单的装饰者的扩展名)
答案 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 = {
"&": "&",
'"': """,
"'": "'",
">": ">",
"<": "<",
}
def html_escape(text):
return "".join(html_escape_table.get(c,c) for c in text)
print html_escape("<a>test</a>")
result -> <a>test</a>