{"id":6264,"date":"2022-04-06T13:50:40","date_gmt":"2022-04-06T05:50:40","guid":{"rendered":"https:\/\/egonlin.com\/?p=6264"},"modified":"2022-04-26T13:52:05","modified_gmt":"2022-04-26T05:52:05","slug":"%e7%ac%ac%e5%85%ab%e8%8a%82%ef%bc%9a%e5%90%8e%e5%8f%b0%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=6264","title":{"rendered":"\u7b2c\u516b\u8282\uff1a\u540e\u53f0\u7ba1\u7406"},"content":{"rendered":"<h1>\u540e\u53f0\u7ba1\u7406<\/h1>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u540e\u53f0\u7ba1\u74061.jpg'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u540e\u53f0\u7ba1\u74061.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<p>\u672c\u529f\u80fd\u9700\u6c42:<\/p>\n<p>-\u5c55\u793a\u767b\u5f55\u7528\u6237\u7684\u6240\u6709\u6587\u7ae0<\/p>\n<p>-\u6587\u7ae0\u65b0\u589e\uff08\u9632\u6b62xss\u653b\u51fb\uff09<\/p>\n<p>-\u6587\u7ae0\u65b0\u589e\u65f6\u652f\u6301\u4e0a\u4f20\u56fe\u7247<\/p>\n<p>\u62d3\u5c55\u9700\u6c42:<\/p>\n<p>-\u4fee\u6539\u4e2a\u4eba\u4fe1\u606f(\u5305\u62ec\u5934\u50cf,\u5bc6\u7801,\u7ad9\u70b9\u80cc\u666f)<\/p>\n<p>-\u4f7f\u7528md\u7f16\u8f91\u5668\u4e0a\u4f20\u6587\u7ae0<\/p>\n<p>-\u6587\u7ae0\u7f16\u8f91<\/p>\n<p>-\u6587\u7ae0\u5220\u9664<\/p>\n<h2>\u4e00\u3001\u6dfb\u52a0\u8def\u7531<\/h2>\n<p>\u540e\u53f0\u7ba1\u7406urls.py<\/p>\n<pre><code class=\"language-python\">    path(&#039;backend\/&#039;, views.backend, name=&#039;backend&#039;)<\/code><\/pre>\n<p>\u540e\u53f0\u6dfb\u52a0\u6587\u7ae0 urls.py<\/p>\n<pre><code class=\"language-python\">    path(&#039;add_article\/&#039;, views.add_article, name=&#039;add_article&#039;)<\/code><\/pre>\n<p>\u6587\u672c\u7f16\u8f91\u5668\u4e0a\u4f20\u56fe\u7247 urls.py<\/p>\n<pre><code class=\"language-python\">    path(&#039;upload_img\/&#039;, views.upload_img, name=&#039;upload_img&#039;)<\/code><\/pre>\n<h2>\u4e8c\u3001\u6dfb\u52a0\u89c6\u56fe\u51fd\u6570<\/h2>\n<p>\u5728views.py\u4e2d\u6dfb\u52a0<\/p>\n<p>\u540e\u53f0\u7ba1\u7406 \u89c6\u56fe\u51fd\u6570 backend<\/p>\n<pre><code class=\"language-python\">def backend(request):\n    article_num = models.Article.objects.filter(blog=request.user.blog).count()\n    category_num = models.Category.objects.filter(blog=request.user.blog).count()\n    tag_num = models.Tag.objects.filter(blog=request.user.blog).count()\n    article_list = models.Article.objects.filter(blog=request.user.blog)\n    page_num_int = int(request.GET.get(&#039;page&#039;, 1))\n    paginator = Paginator(article_list, 10)\n    if paginator.num_pages &gt; 9:\n        if page_num_int - 4 &lt; 1:\n            page_range = range(1, 9)\n        elif page_num_int + 4 &gt; paginator.num_pages:\n            page_range = range(paginator.num_pages - 8, paginator.num_pages + 1)\n        else:\n            page_range = range(page_num_int - 4, page_num_int + 4)\n    else:\n        page_range = paginator.page_range\n    page = paginator.page(page_num_int)\n    category_list = models.Category.objects.filter(blog=request.user.blog)\n    tag_list = models.Tag.objects.filter(blog=request.user.blog)\n    start = 1\n    end = paginator.num_pages\n    blog = request.user.blog\n    category_list = models.Category.objects.filter(blog=blog)\n    tag_list = models.Tag.objects.filter(blog=blog)\nreturn render(request, &#039;user\/Backend.html&#039;, locals())<\/code><\/pre>\n<p>\u540e\u53f0\u6dfb\u52a0\u6587\u7ae0 \u89c6\u56fe\u51fd\u6570add_article<\/p>\n<pre><code class=\"language-python\">@login_required(login_url=&#039;\/login\/&#039;)\ndef add_article(request):\n    res = {&#039;code&#039;: 100, &#039;msg&#039;: &#039;\u53d1\u5e03\u6210\u529f&#039;}\n    if request.method == &#039;POST&#039;:\n        title = request.POST.get(&#039;title&#039;)\n        content = request.POST.get(&#039;html_doc&#039;)\n        markdown = request.POST.get(&#039;mark_doc&#039;)\n        category = request.POST.get(&#039;category&#039;)\n        tags = request.POST.get(&#039;tags&#039;)\n        head_img = request.FILES.get(&#039;head_img&#039;)\n        tags1 = tags.split(&#039;,&#039;)\n        soup = BeautifulSoup(content, &#039;html.parser&#039;)\n        description = soup.text[0:120]\n        res_script = soup.find_all(&#039;script&#039;)\n        for script in res_script:\n            script.decompose()\n        article = models.Article.objects.create(\n            title=title,\n            blog=request.user.blog,\n            description=description,\n            content=str(soup),\n            markdown=markdown,\n            category_id=category,\n            head_img=head_img\n        )\n        ll = []\n        for tag in tags1:\n            ll.append(models.Tag2Article(article_id=article.pk, tag_id=tag))\n        models.Tag2Article.objects.bulk_create(ll)\n        return JsonResponse(res)<\/code><\/pre>\n<p>\u4e0a\u4f20\u56fe\u7247\u89c6\u56fe\u51fd\u6570 upload_img(\u4f7f\u7528md\u7f16\u8f91\u5668)<\/p>\n<pre><code class=\"language-python\">@login_required(login_url=&#039;\/login\/&#039;)\ndef upload_img(request):\n    img_obj = request.FILES.get(&#039;editormd-image-file&#039;)\n    img = Image.open(img_obj)\n    uid = &#039;&#039;.join(str(uuid.uuid4()).split(&#039;-&#039;))[::4]\n    tmp = img_obj.name.rsplit(&#039;.&#039;, 1)[-1]\n    t = str(time.time()).split(&#039;.&#039;)\n    img_name = &#039;&#039;.join([t[0], t[-1], &#039;_&#039;, uid, &#039;.&#039;, tmp])\n    img.save(&#039;media\/article_img\/&#039; + img_name)\n    return JsonResponse({&#039;success&#039;: 1, &#039;msg&#039;: &#039;\u4e0a\u4f20\u6210\u529f&#039;, &#039;url&#039;: f&quot;\/media\/article_img\/{img_name}&quot;})<\/code><\/pre>\n<h2>\u4e09\u3001\u540e\u53f0\u7ba1\u7406\u529f\u80fd\u6d89\u53ca\u7684\u6a21\u578b\u5c42\u64cd\u4f5c<\/h2>\n<p>\u540e\u53f0\u7ba1\u7406\u4e3b\u8981\u662f\u6d89\u53ca\u6dfb\u52a0\u6587\u7ae0,\u4ee5\u53ca\u4e0a\u4f20\u6587\u7ae0\u4e2d\u7684\u56fe\u7247,\u6240\u4ee5\u4e3b\u8981\u64cd\u4f5c\u6587\u7ae0\u8868Article<\/p>\n<p>\u540e\u53f0\u7ba1\u7406\u529f\u80fd\u8fd8\u6d89\u53ca\u5230\u4fee\u6539\u7528\u6237\u7684\u4e2a\u4eba\u4fe1\u606f,\u6240\u4ee5\u4e5f\u4f1a\u64cd\u4f5cUserInfo\u8868<\/p>\n<h2>\u56db\u3001\u540e\u53f0\u7ba1\u7406\u524d\u7aef\u6a21\u677f<\/h2>\n<p>\u540e\u53f0\u7ba1\u7406\u9875\u9762\u524d\u7aef <\/p>\n<p>\u5728templates\u6587\u4ef6\u5939\u4e2d\u7684user\u6587\u4ef6\u5939\u4e2d\u65b0\u5efaBackend.html(\u4e5f\u8981\u7ee7\u627f\u57fa\u7840\u6a21\u677fbase.html)<\/p><div id=\"rml_readmorelogin_placeholder\" style=\"position:relative;\"><div id=\"rml_fade_content\" style=\"position: absolute;\r\ntop:-10em;\r\nwidth:100%;\r\nheight:10em;\r\nbackground: -webkit-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -moz-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -o-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\r\nbackground-image: -ms-linear-gradient(rgba(255, 255, 255, 0) 0%,#ffffff 100%);\"><\/div><div class=\"wpf-controller aru_rml_from_in_post\" style=\"background-color:#eeeeee;border:5px solid #cce6ff;\" id=\"ARU_ReadMoreLogin_ReadMoreLoginController\"><h2 id=\"Header\">\u67e5\u770b\u66f4\u591a<\/h2><div id=\"Message\"><p>\u8054\u7cfb\u7ba1\u7406\u5458\u5fae\u4fe1tutu19192010\uff0c\u6ce8\u518c\u8d26\u53f7<\/p>\n<\/div><div id=\"StatusBarHeader\"><\/div><form id=\"ARU_ReadMoreLogin_ReadMoreLoginController\"><input name=\"post_id\" value=\"6264\" type=\"hidden\"\/><input name=\"_init_callback\" value=\"InitLogin\" type=\"hidden\"\/><input name=\"post_id\" value=\"6264\" type=\"hidden\"\/><input name=\"rt_ype\" value=\"1\" type=\"hidden\"\/><input name=\"nonce\" value=\"250109b4dc\" type=\"hidden\"\/><input name=\"_wpnonce\" value=\"7755f0f36d\" type=\"hidden\"\/><input name=\"_controller\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginController\" type=\"hidden\"\/><input name=\"_proxy_controller\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginController\" type=\"hidden\"\/><input name=\"_view\" value=\"ARU_ReadMoreLogin\\ReadMoreLoginView\" type=\"hidden\"\/><table class=\"wpf-table-placeholder\"><tbody class=\"wpf-table-placeholder\"><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\" width=\"400px\"><table class=\"wpf-table-placeholder\"><tbody class=\"wpf-table-placeholder\"><tr class=\"wpf-table-placeholder\"><th class=\"wpf-table-placeholder-input\"><label class=\"wpf-label\">Username:<\/label><\/th><\/tr><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\"><input class=\"regular-text text_input\" name=\"username\" value=\"\" type=\"text\"\/><\/td><\/tr><tr class=\"wpf-table-placeholder\"><th class=\"wpf-table-placeholder-input\"><label class=\"wpf-label\">Password:<\/label><\/th><\/tr><tr class=\"wpf-table-placeholder\"><td class=\"wpf-table-placeholder-input\"><input class=\"regular-text text_input\" name=\"password\" value=\"\" type=\"password\"\/><\/td><\/tr><\/tbody><\/table><p class=\"wpf-table-placeholder submit\"><button class=\"wp_plugin_framework_ajax_button\" type=\"button\" style=\"background-color:#4D90FE;;color:#ffffff;;border:1px solid #3079ed;\" name=\"_event\" value=\"ButtonLogin\">Log in<\/button><\/p><\/td><td class=\"wpf-table-placeholder-input\"><\/td><\/tr><\/tbody><\/table><\/form><div id=\"ButtonStartRegister\"><a href=\"https:\/\/egonlin.com\/wp-login.php?action=register\">Register<\/a><\/div><div id=\"Link1\"><a href=\"https:\/\/egonlin.com\/wp-login.php?action=lostpassword\">Forgotten username or password?<\/a><\/div><div id=\"StatusBarFooter\"><\/div><\/div><\/div><div id=aru_remaining_content><\/div>","protected":false},"excerpt":{"rendered":"<p>\u540e\u53f0\u7ba1\u7406 \u672c\u529f\u80fd\u9700\u6c42: -\u5c55\u793a\u767b\u5f55\u7528\u6237\u7684\u6240\u6709\u6587\u7ae0 -\u6587\u7ae0\u65b0\u589e\uff08\u9632\u6b62xss\u653b\u51fb\uff09 -\u6587\u7ae0\u65b0\u589e\u65f6\u652f\u6301\u4e0a\u4f20\u56fe\u7247 \u62d3\u5c55 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":6816,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,406],"tags":[],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/6264"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6264"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/6264\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/media\/6816"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}