• 博客之富文本编辑器


    富文本编辑器

    下载地址:https://github.com/kindsoft/kindeditor/releases/download/v4.1.11/kindeditor-4.1.11-zh-CN.zip
    文档说明:http://kindeditor.net/doc.php
    把下载 kindeditor 文件夹放到静态目录 static 目录下

    前端html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                margin: 0;
            }
    
            .header {
                 100%;
                height: 60px;
                background-color: #369;
            }
    
            .content {
                 80%;
                margin: 20px auto;
            }
        </style>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
         <script src="/static/jquery-3.3.1.js"></script>
    </head>
    <body>
    
    <div class="header"></div>
    <div class="content">
        <h3>添加文章</h3>
        <form action="" method="post">
            {% csrf_token %}
            <div>
                <label for="">文章标题</label>
                <input type="text" name="title" class="form-control" style=" 200px">
            </div>
    
            <div>
                <p>内容(TinyMCE编辑器,支持拖放/粘贴上传图片) </p>
                <textarea name="article_content" id="article_content" cols="60" rows="20"></textarea>
            </div>
            <input type="submit" class="btn btn-info">
        </form>
    </div>
    
    <script charset="utf-8" src="/static/kindeditor/kindeditor-all.js"></script>
    <script>
            /* uploadJson 后面接的是后端url, json表示后端必须返回json数据,否则会报错  */
            /* uploadJson 返回的json需要带 url 的key  */
            /* extraFileUploadParams 表示post 上传的时候需要额外带一些参数  */
            /* filePostName 是指定上传文件的名称  */
            KindEditor.ready(function(K) {
                    window.editor = K.create('#article_content',{
                        "800",
                        height:"500px",
                        resizeType:0,
                        uploadJson:"/upload/",
                        extraFileUploadParams:{
                                csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val()
                        },
                        filePostName:"upload_img"
                    });
            });
    </script>
    
    </body>
    </html>
    

    上传图片的urls.py

    url(r"backend/add_article/",views.add_article),
    url(r'^upload/', views.upload)

    视图views.py

    from bbs import settings
    import os,json
    def upload(request):
        obj = request.FILES.get("upload_img")
        path=os.path.join(settings.MEDIA_ROOT,"add_article_img",obj.name)
        with open(path,"wb") as f:
            for line in obj:
                f.write(line)
        res = {
            "error": 0,
            "url": "/media/add_article_img/"+obj.name
        }
        return HttpResponse(json.dumps(res))
    
    def add_article(request):
        if request.method=="POST":
            title=request.POST.get('title')
            article_content=request.POST.get('article_content')
            user=request.user
    
            from bs4 import BeautifulSoup
    
            bs=BeautifulSoup(article_content,"html.parser")
            # 因为article_content 不是文本字符串,而是包含标签的html字符串
            # 但是文章描述 desc 只需要拿文本字符串,不拿标签字符串
            desc=bs.text[0:150]+"..."
    
            # 过滤非法标签, decompose() 会删除script和link标签
            # 为什么要删除这些标签,因为kineditor保存的不是单纯的文本
            # kineditor保存的是html字符串,要想前端显示用了safe
            # 因为有了safe ,所以script标签也会正常显示,所以我们需要把script标签删除掉
            for tag in bs.find_all():
                print(tag.name)
                if tag.name in ["script", "link"]:
                    tag.decompose()
            article_obj=models.Article.objects.create(user=user,title=title,desc=desc)
            models.ArticleDetail.objects.create(content=str(bs),article=article_obj)
            return HttpResponse("添加成功")
        return render(request,"add_article.html")
    
  • 相关阅读:
    进程和线程
    VC中使对话框全屏的方法
    初为项目经理
    Sqlite知识小记
    ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    RTX51.LIB NOT FOUND
    Virtual Villagers 攻略
    专业术语常用名词缩写中英文对照
    Eric的四个无刷新(异步更新)示例
    ASP.NET 安全认证(一)—— 如何运用 Form 表单认证 .
  • 原文地址:https://www.cnblogs.com/longyunfeigu/p/9193115.html
Copyright © 2020-2023  润新知