这几天打完了黑魂3,感觉黑魂3我都能通关,还有什么能难倒我的?

所以作为网站开发菜鸡的我,准备挑战实现给网站增加动态发布文章的需求,有点类似博客管理,构建一个可以发布文章的后台,然后通过循环的方式将数据库内容展示到前端。

终于把这个需求给完成了,开心之余将遇到的一些坑在这里记录一下。

一、写在前面

首先,如果单说我要构建一个文章后台管理系统,逻辑还是很简单的,Git clone……,就是构建后台数据库->构建后台->构建前端这三步走。

那么在已有网站上新增这样的功能,其实原理也是一样的。

但是,在这三步中,我遇到了很多的小坑,所以在这针对三个步骤进行坑的总结。

二、后台数据库设计

有的朋友要问了,数据库设计有啥好讲的,其实在这里算是一个tricks的分享吧。数据库表中的内容,是全部可以用于前端页面的,包括显式内容,就是我们打开网页能直接看到的内容;以及隐含内容,我们看不到的,比如网页的description、keywords这种,用于描述网站、优化网站检索结果排名的内容。那么,我们在构建数据库的时候,顺便,就可以把隐含和显式的内容全部存储到数据库中。这样,在我们后台获取数据库内容之后,可以通过js动态渲染和加载的方式,将内容加载到前端中,大大的提高网页的灵活度。

三、Ckeditor安装

3.1 无网络环境下ckeditor配置安装环境

后台我们采用Django自带的admin后台,搭配可以上传图片的富文本框Ckeditor,对其进行改造[1](https://blog.csdn.net/paul0926/article/details/93874640, 跟着这个博客一步步来,就能完成使用Ckeditor的使用)

图1 RichTextUploadingField直接一罩就完事儿,so easy

我的开发环境是断网的,访问的时候会做映射来访问,所以安装ckeditor需要离线。我们需要提前下载好django_ckeditor[2]https://pypi.org/project/django-ckeditor/#files和其所依赖的django_js_asset[3]https://pypi.org/project/django-js-asset/#files)。先安装django_js_asset,再安装django_ckeditorh。此外,有说pillow的依赖的俺不清楚,可能Anaconda安装的时候自带了,所以这个我没有重装。

3.2  Ckeditor的 JS、CSS文件的配置

Ckeditor的 RichTextUploadingField方法在网页中会使用到ckeditor自带的js文件和css文件,由于我托管给了apache,最简单方便的方式:直接将整个文件夹复制到项目的static文件中。

图2 复制的位置图

我的这个文件的原位置是:“D:\anaconda3\Lib\site-packages\ckeditor_uploader\static\ckeditor”,可以参考一下

3.3 Apache 配置media文件访问权限

如果没有配置Apache的conf文件,会只有图片目录,但是不能访问图片的情况,这是Apache的安全机制吧。

图3 加载图片一直转圈无法显示,说明是被Apache给ban了

图4 修改Apache配置文件

图5 修改media内容,如上

修改之后restart服务就好了。

图6 修改之后,重启Apache服务,图片加载成功

四、前端加载

4.1 标题生成

前端构造如下:

{% for item in wikis %}<li ><span class="date-list">{{ item.publish_date }}</span><a href="{% url 'showwiki' item.article_id %}" target="_blank" title="{{ item.title }}">{{ item.title }}</a></li>{% endfor %}

知识点:

1)构造超链接url标签,模板生成[4]:https://blog.csdn.net/chengcheng95588/article/details/78867957

2)wikis 是返回词典结构中的key的名字

后台返回数据如下:

def wiki(request):info = 表名.objects.order_by('id').all()content = {'wikis' : info,}return render(request, '网站名.html', content)

知识点:1)查表结果直接构造返回结果。根据需求可以进一步改造content。

4.2 富文本内容展示

直接使用{{}}方法加载ckeditor生成的html标签,是不能加载出html结构的,我们需要添加autoescape标签[5]如下:

 {% autoescape off %}{{ ckeditor产生的富文本结果 }}{% endautoescape %}

五、最后

简单把文章发布三步走的过程中遇到的问题都记录了了下来,网站需求也要随着毕业将近也要告一段落了,调通bug那一瞬间是真的爽歪歪啊。

最后,遇事而迎,希望接下来的答辩也顺顺利利。

参考

[1] django项目中富文本ckeditor的设置(图片上传、添加代码等功能): https://blog.csdn.net/paul0926/article/details/93874640

[2] django_ckeditor pip目录:https://pypi.org/project/django-ckeditor/#files

[3] django_js_asset pip目录:https://pypi.org/project/django-js-asset/#files

[4] 利用Django中的url方法实现地址动态拼接自动生成超链接地址:https://blog.csdn.net/chengcheng95588/article/details/78867957

[5] Built-in template tags and filters: https://docs.djangoproject.com/en/3.1/ref/templates/builtins/

[6] 最终效果:http://corpus.njau.edu.cn/wiki/

发布文章管理系统开发中遇到的问题整理 Django + Ckeditor + Apache相关推荐

  1. java开发常用jar包_Java开发中常用jar包整理及使用

    本文整理了我自己在Java开发中常用的jar包以及常用的API记录. 一.common-lang3 简介:一个现在最为常用的jar包,封装了许多常用的工具包 依赖: org.apache.common ...

  2. Halo 开源项目学习(四):发布文章与页面

    文章目录 基本介绍 管理员发布文章 用户端访问文章 元数据 自定义页面 基本介绍 博客最基本的功能就是让作者能够自由发布自己的文章,分享自己观点,记录学习的过程.Halo 为用户提供了发布文章和展示自 ...

  3. 小孔子文章管理系统V2.0发布测试

    小孔子文章管理系统V2.0 [感谢]  本系统是仿照nbArticle开发,在此表示感谢nb联盟的作品. [版权声明]                                          ...

  4. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片...

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  5. 微信公众号 开发详解02【自动回复、发布文章、自定义菜单、3种链接跳转】

    [微信公众号--零基础全面系统教学] [P01-P07]微信公众号 开发详解01[目的.起名.准备工作.注册流程.后台功能] [P08-P12]微信公众号 开发详解02[自动回复.发布文章.自定义菜单 ...

  6. CRM客户关系管理系统开发第十八讲——实现客户拜访记录管理模块中保存客户拜访记录的功能

    跳转到客户拜访记录添加页面 要想实现客户拜访记录管理模块中的保存客户拜访记录的功能,首要前提就是点击新增客户拜访超链接之后要能跳转到客户拜访记录添加页面.前面我们都做完两个模块了,做到这一点还不是依葫 ...

  7. CRM客户关系管理系统开发第十七讲——实现客户拜访记录管理模块中分页查询客户拜访记录列表的功能

    在CRM客户关系管理系统中,客户的拜访是很重要的一个环节,由业务员面见客户并介绍公司的相关的业务,在业务员回到公司以后,需要对此次的拜访的整个过程记录下来,记录中需要包含拜访的客户的姓名,拜访的时间以 ...

  8. 在YII2框架中使用UEditor编辑器发布文章

    在YII2框架中使用UEditor编辑器发布文章 创建文章数据表 文章数据表主要有4个字段 id  主键(int) title 标题(varchar) content 内容(text) created ...

  9. 教材管理系统紧张开发中

    教材管理系统紧张开发中,系统也许不大,可是业务比较复杂.交叉性很强,教学计划.课程代码.教材.供货商.分校点.系部.教师.学生.库存.盘点.结算.数据采集.征订.订购.分发.收费一个都不能少!既有C/ ...

最新文章

  1. javascript开关_JavaScript开关案例简介
  2. 如何设置运行在Virtualbox内的Ubuntu虚拟机的静态ip地址
  3. 用sniffer技术盗取电话银行密码
  4. linux终端背景透明度设置,Ubuntu Terminal标签背景颜色设置
  5. 蓝桥杯第六届省赛JAVA真题----打印菱形
  6. python的追加_Python追加添加相同的数据
  7. Jenkins Robot framework 持续集成环境搭建
  8. Hive导入和导出数据
  9. JAVA中map删除键值对_以有效的方式从Map中删除多个键?
  10. 国脉信息学院计算机网络,福建工程学院国脉信息学院《计算机网络模拟题》
  11. 奥比中光深度摄像头_IphoneX发布!奥比中光也可提供3D深度摄像头
  12. 计算机休眠会断电吗,win7休眠后能将电脑断电吗?
  13. 机器学习_深度学习毕设题目汇总——图像分割
  14. 安卓如何实现图文混排
  15. 公司上市几轮投资分别是什么
  16. JAVA面向对象(OOP)-class 类
  17. qml 应用程序图标设置和打包——qml
  18. 桥式整流电路原理;电感滤波原理;电容滤波原理
  19. VSCode嵌入式硬件开发环境设置
  20. Pytorch提取预训练模型特定中间层的输出

热门文章

  1. 我对“开源博客”的设想
  2. 服务外包:合约形态变革及其理论蕴意—人力资本市场配置与劳务活动企业配置的统一
  3. python实现logistics回归,以及从 疝 气 病 症 预 测 病 马 的 死 亡 率
  4. JAVA ParameterizedType的用处
  5. 《uniapp基础知识》学习笔记Day38-(Period2)全局文件一些常用的配置
  6. 解决下拉菜单被flash遮住问题
  7. 软工实践第七次作业- 需求分析报告(第五组)
  8. 马云反思电商价格战原文
  9. scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息。
  10. 百度大脑智能监控安全帽检测系统