繁体   English   中英

Python/Flask:将 HTML 注入到页面

[英]Python/Flask: Inject HTML to page

我有一个页面,它从用户那里获取输入并将其存储在服务器端字典内的 object 中。

class post:
    def __init__(self, title, content, date, poster, desc):
        self.title = title
        self.content = content
        self.date = date
        self.poster = poster
        self.desc = desc

posts = {}

... 
    if request.method == "POST":
# NOTE: title and description is input, and content is textarea. 
# I only want to input html in content textarea.
                title = request.form["title"]
                content = request.form["content"]
                description = request.form["description"]
                if title in posts:
                    flash("A post with that title already exists!")
                    return redirect(url_for("post_content"))
                else:
                    posts[title] = post(title, content, date, session["user"], description)
                    flash("Posted successfully!")
                    return redirect(url_for("home"))
       
    else:
                return render_template("post.html")
...

然后我将帖子中的数据发送到另一个页面

@app.route("/post/<title>")
def post_page(title):
    data = posts[title]
    return render_template("content.html", post=data)

这是内容的模板。html

{% extends "base.html "%}
{% block title %}{{post.title}}{% endblock %}
{% block content %}
    <h1>{{post.title}}</h1>
    <p>By {{post.poster}}, {{post.date}}</p>
    <p><i>{{post.desc}}</i></p> <br>
    <p>{{post.content}}</p>
{% endblock %}

但是,当我尝试发送 HTML 时,它只是显示为输入(<h1>Hello</h1> 只是显示它而不是使其成为标题)。 此外,如果我尝试输入多行,它只会在 output 中显示为一长行。

如何将输入的文本显示为 HTML?

出于安全原因,您的 html 会被 jinja 自动转义。 将 {% autoescape %} 设置为 false 或 {{ something | 安全 }} 除非您是 escaping 是您自己创建的或您信任的人,否则您可能会将自己和用户置于 XSS 等攻击之下。 您需要的是所见即所得的工具,例如 Quill、Summernote、ckeditor 或您选择的任何产品,并使用漂白剂 package 等清洁和消毒 ZFC35FDC70D5FC69D23EZC 的任何部分。

我用所见即所得的编辑器 Quill 创建了一个 Flask-Blog,在后端使用漂白剂 package 进行消毒。 如果您想了解它们是如何实现的,请参阅此Flask-Blog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM