bbs--文章后台

需求分析

在个人文章后台中

1 有添加文章的接口

  展示文章标题输入框

  文本编辑框

  标签 分类 选择框

  提交

2 编辑文章的接口

  页面与添加文章相同,就是把该文章的内容展示到文本编辑框中

3 删除文章的接口

  点击删除,文章清除

4 页面2 10布局,左侧有添加文章功能

  右侧以列表形式展现每一条文章,且有分页功能 

文章发布

模块及插件引入

1 kindeditor插件<\a>

2 BS4模块<\a>

  安装

  pip install beautifulsoup4

  简单使用

1. from bs4 import BeautifulSoup
# 对一段HTML格式的内容做解析
soup = BeautifulSoup('html内容', 'html.parser')
2. 找标签:
soup.a
3. 找标签的样式:
soup.a["class"]
4. 找特定的标签
soup.select("script")
5. 删除标签
.decompose()
6. 取text文本内容
soup.text
7. 格式化html内容
soup.prettify()

代码思路

页面展示

1 前端页面布局,然后添加文本编辑按照kindeditor插件的说明,进行配置

2 这里说一下图片展示

  前端方面按照kindeditor插件的说明

  后端单独写一个专门对图片的视图函数

  1 接受前端发送的图片文件对象

  2 把文件对象写入我们自己定义的media下的文件夹中

  3 将文件路径,以url形式返回给前端

文章发布

1 前端通过form的post请求,发送 文章标题  内容  标签

2 后端接受上面的数据,保存数据 文章记录 和 文章详情记录 事务链接

  这里要注意的是接受的文章内容为html标签

  我们要通过bs4模块将接受的内容进行编辑

  1 将文本内容,切前150个数据作为文章描述

  2 将得到的文章格式化成字符串,保存在文章详情数据库中

如果想用ajax获取文本内容

实际操作

  html 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加新页面</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<form action="" method="post">
{% csrf_token %}
<div class="form-group">
<label for="title">标题</label>
<input type="text" class="form-control" id="title" name="title" placeholder="标题">
</div>
<div class="form-group">
<label for="content">内容</label>
<textarea class="form-control" name="content" id="content" cols="" rows=""></textarea>
</div> <div class="form-group">
<label for="category">文章分类</label>
<select name="category" id="category" class="form-control">
{% for category in category_list %}
<option value="{{ category.id }}">{{ category.title }}</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-success">发布</button>
</form>
</div>
</div>
</div>
<script src="/static/js/jquery.js"></script>
<script charset="utf-8" src="/static/plugins/kindeditor/kindeditor-all.js"></script>
<script charset="utf-8" src="/static/plugins/kindeditor/lang/zh-CN.js"></script>
<script>
KindEditor.ready(function(K) {
window.editor = K.create('#content', {
"uploadJson": "/blog/upload/",
"extraFileUploadParams": {"csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val()}
});
});
</script>
</body>
</html>

views

# 添加新文章
def add_article(request):
if request.method == "POST":
# 获取用户填写的文章内容
title = request.POST.get("title")
content = request.POST.get("content")
category_id = request.POST.get("category") # 清洗用户发布的文章的内容,去掉script标签
soup = BeautifulSoup(content, "html.parser")
script_list = soup.select("script")
for i in script_list:
i.decompose()
# print(soup.text)
# print(soup.prettify()) # 写入数据库
with transaction.atomic():
# 1. 先创建文章记录
article_obj = models.Article.objects.create(
title=title,
desc=soup.text[0:150],
user=request.user,
category_id=category_id
)
# 2. 创建文章详情记录
models.ArticleDetail.objects.create(
content=soup.prettify(),
article=article_obj
)
return redirect("/blog/backend/") # 把当前博客的文章分类查询出来
category_list = models.Category.objects.filter(blog__userinfo=request.user)
return render(request, "add_article.html", {"category_list": category_list}) # 富文本编辑器的图片上传
def upload(request):
res = {"error": 0}
print(request.FILES)
file_obj = request.FILES.get("imgFile")
file_path = os.path.join(settings.MEDIA_ROOT, "article_imgs", file_obj.name)
with open(file_path, "wb") as f:
for chunk in file_obj.chunks():
f.write(chunk)
# url = settings.MEDIA_URL + "article_imgs/" + file_obj.name
url = "/media/article_imgs/" + file_obj.name
res["url"] = url
return JsonResponse(res)

删除文章

代码思路

1 js 点击删除,获取对应这条文章的id,传给后端

2 后端删除数据

修改文章

与文章发布相同

1 点击编辑,通过get请求得到文章的id,

2 后端通过文章id,查询出文章内容,传给后端。

代码思路

bbs--文章后台的更多相关文章

  1. 1210 BBS admin后台管理及侧边栏筛选个人站点

    目录 昨日内容 django admin后台管理 使用 建表 用户图片的显示 MEDIA用户配置 查找照片 搭建个人站点 防盗链 新建css文件 侧边栏展示标签 定义分类栏与标签栏 定义时间栏 侧边栏 ...

  2. BBS论坛 后台管理

    七.后台管理 后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  3. day75 bbs项目☞后台管理+修改头像

    目录 一.后台管理之添加文章 二.修改用户头像 bbs项目总结 一.后台管理之添加文章 添加文章有两个需要注意的问题: 文章的简介切取,应该想办法获取到当前文章的文本内容后再截取字符 XSS攻击,由于 ...

  4. BBS - 文章详细页、点赞、踩灭

    一.文章详细页 文章详细页:1.链接:<div><h5><a href="/blog/{{ article.user.username }}/articles/ ...

  5. BBS - 文章评论

    一.文章评论 <div class="comment_region"> <div class="row"> <div class= ...

  6. dede后台删除文章后台还有分页显示解决方法

    打开dede目录中content_list.php 大概在100行左右 $sql = "SELECT COUNT(*) AS dd FROM `#@__arctiny` $tinyQuery ...

  7. 编辑bbs文章 获取前端标题内容 和前端内容的方法

  8. BBS - 后台管理

    一.添加文章 注: 后台管理页面,应该有个新得 app /blog/backend/ # 文章列表页/blog/add_article/ # 添加文章 # 后台管理re_path(r'backend/ ...

  9. BBS项目之后台管理

    一:后台管理,添加文章样式编写 创建 一个后台管理模板前段页面 <!DOCTYPE html> <html lang="en"> <head> ...

  10. Django - 学习目录

    Django 基础 web应用/http协议/web框架 Django简介 Django - 路由层(URLconf) Django - 视图层 Django - 模板层 Django - 模型层 - ...

随机推荐

  1. 【AC自动机】病毒

    [题目链接] https://loj.ac/problem/10062 [题意] 寻找一个没有模式串为子串的无限01串.是否存在. [题解] 其实就是用dfs找一个环. 1.环需要从根结点出发找到这个 ...

  2. 消息服务百科全书——为什么使用MQ

    为什么要使用MQ?有如下几个好处: 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一接口.这允许你独 ...

  3. Machine概念和获取帮助 【翻译】

    Machine概念和获取帮助 Docker Machine 允许您在各种环境中预配 Docker 计算机,包括驻留在本地系统.云提供商或裸机服务器(物理计算机)上的虚拟机.Docker Machine ...

  4. lesson10总结

    package lesson10; public class Fa { String name="I am Fa"; static{  System.out.println(&qu ...

  5. codeblocks 使用汇总

    codeblocks 使用汇总 http://www.cnblogs.com/-clq/archive/2012/01/31/2333247.html

  6. Node.js Express项目搭建

    讲干货,不啰嗦,Express 是一个简洁而灵活的 node.js Web应用框架,使用 Express 可以快速地搭建一个完整功能的网站.本教程介绍如何从零开始搭建Express项目. 开发环境:w ...

  7. Python与C/C++相互调用(转)

    原文链接 作者 一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库 ...

  8. cookie 和session的关联关系

    session 1.1 数据存储,存服务器端, 浏览器解决http无状态问题的一种解决方案 登录,同一客户端访问服务端的时候,服务端都知道是这一个客户端 cookie 2.1 数据存储 , 存客户端 ...

  9. 使用nodejs对Marketing Cloud的contact主数据进行修改操作

    假设在Marketing Cloud有这样一个contact主数据: 现在需求是使用编程语言比如nodejs修改这个contact实例的高亮属性. 代码如下: var config = require ...

  10. linux 使用 rz 上传和 sz下载 命令

    linux系统 root权限 lrzsz安装包 ①.在线安装-执行命令 yum install lrzsz  离线安装-需要提前准备好安装包 编译安装 root 账号登陆后,依次执行以下命令: tar ...