cari

Rumah  >  Soal Jawab  >  teks badan

python - flask+jinja2+sqlite3,如何保存markdown格式的文章

  1. 背景:

    • 环境如题:win + python3 + flask + jinja。

    • 初学python,在做一个博客工具练习flask,sql目前只有入门知识。

    • 目标是想在发布文章的时候,支持markdown。

  2. 问题:标题/加粗等都没有问题,但是在插入图片/超链接的时候,拼接的sql语句会被文章(已经被转化为html)中的引号等符号破坏导致报错。

  3. 我做的尝试:

    • xxx.replace(""", "\"").replace("\\", "\"),实测并没有用。

    • 使用HTMLParser的时候,发现依赖的markupbase包没有(pip3 install 提示没找到,豆瓣源)。

  4. 想请教的是:

    • 是否需要把网页存到数据库中去?(或者只存markdown文本到数据库,展示的时候再渲染?)假如不应该,有什么好办法么?

    • 假如应该存数据库,有什么办法吧html代码转化成sql安全?比如还有需要替换的字符我没有注意到?或者有现成的库?

高洛峰高洛峰2887 hari yang lalu697

membalas semua(2)saya akan balas

  • 阿神

    阿神2017-04-17 17:40:35

    Anda boleh melihat jawapan saya kepada soalan serupa tentang Flask yang melaksanakan antara muka penyuntingan artikel

    FlaskSudah ada pemalam untuk memproses MD, Flask-Pagedown. Tetapi anda juga boleh menggunakan perpustakaan mardown. Untuk dua soalan:

    1. Adakah saya perlu menyimpan halaman web dalam pangkalan data? (Atau simpan sahaja teks penurunan harga ke pangkalan data dan kemudian berikannya apabila dipaparkan?) Jika tidak, adakah terdapat cara yang baik?
      Dalam buku "Flask Web Development: Practical Web Application Development Based on Python" yang ditulis oleh Flask pengarang, kedua-dua HTML dan teks markdown disimpan dalam pangkalan data HTML diambil secara langsung semasa menyemak imbas, dan markdown diambil apabila menyunting , apabila menyimpan turun ke pangkalan data, huraikannya ke dalam HTML dan simpan

    2. Jika ia perlu disimpan dalam pangkalan data, adakah terdapat sebarang cara untuk menukar kod html kepada sql dengan selamat? Sebagai contoh, adakah aksara yang perlu diganti yang saya tidak perasan? Atau adakah perpustakaan siap sedia?
      Jika anda menggunakan pustaka markdown, hubungi terus:

    html = markdown.markdown(md_text)

    Jika menggunakan pemalam:

    class Article(db.Model):
        ...
        @staticmethod
        def on_changed_body(target, value, oldvalue, initiator):
            # 需要转换的标签
            allowed_tags = [
                'a', 'abbr', 'acronym', 'b', 'blockquote', 'code',
                'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul',
                'h1', 'h2', 'h3', 'p', 'img'
            ]
            # 需要提取的标签属性,否则会被忽略掉
            attrs = {
                '*': ['class'],
                'a': ['href', 'rel'],
                'img': ['src', 'alt']
            }
            target.content_html = bleach.linkify(
                bleach.clean(
                    markdown(value, output_format='html'),
                    tags=allowed_tags,
                    attributes=attrs,
                    strip=True
                )
            )
    

    balas
    0
  • 黄舟

    黄舟2017-04-17 17:40:35

    Teks markdown disimpan dalam pangkalan data, dan pelayan melaksanakan penapis dalam jinja2 untuk memaparkan HTML dan memaparkan penurunan nilai. Penapis yang saya takrifkan adalah seperti berikut:

    from app import app
    from flask import Markup
    import markdown2
    
    @app.template_filter('neomarkdown')
    def neomarkdown(markdown_content):
        content=Markup(markdown2.markdown(markdown_content, extras=["tables"]))
        return content
    

    Gunakan:

    {{ html_content|neomarkdown }}

    balas
    0
  • Batalbalas