七、后台管理

后台管理页面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>BBS论坛</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
{# -----------顶部导航栏--------------- #}
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<span class="navbar-default h2 pull-left">后台管理</span>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li><img src="/media/{{ request.user.avatar }}" alt="" width="45px" class="img-circle"></li>
<li><a href="/{{ request.user.username }}" id="id_username">{{ request.user.username }}</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">更多操作 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="/set_password/">修改密码</a></li>
<li><a href="/set_avatar/">修改头像</a></li>
<li><a href="/home/">首页</a></li>
<li role="separator" class="divider"></li>
<li><a href="/logout/">注销</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav> <div class="container-fluid">
<div class="row">
<div class="col-md-2">
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="headingOne">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne"
aria-expanded="true" aria-controls="collapseOne">
操作
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel"
aria-labelledby="headingOne">
<div class="panel-body">
<p><a href="/add_article/">添加新随笔</a></p>
<p><a href="">添加文章</a></p>
<p><a href="">草稿箱</a></p>
</div>
</div>
</div>
</div>
</div> <div class="col-md-10">
<div class="bs-example bs-example-tabs" data-example-id="togglable-tabs">
<ul id="myTabs" class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#home" id="home-tab" role="tab" data-toggle="tab"
aria-controls="home" aria-expanded="true">文章</a></li> <li role="presentation" class=""><a href="#profile" role="tab" id="profile-tab" data-toggle="tab"
aria-controls="profile" aria-expanded="false">随笔</a></li> <li role="presentation" class=""><a href="#dropdown" role="tab" id="dropdown-tab" data-toggle="tab"
aria-controls="dropdown" aria-expanded="false">设置</a></li> <li role="presentation" class=""><a href="#dropdown2" role="tab" id="dropdown2-tab" data-toggle="tab"
aria-controls="dropdown2" aria-expanded="false">更多</a></li>
</ul>
{% block content %}
<div id="myTabContent" class="tab-content">
<div role="tabpanel" class="tab-pane fade active in" id="home" aria-labelledby="home-tab">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>标题</th>
<th>发布日期</th>
<th>评论数</th>
<th>点赞数</th>
<th>操作</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for article in page_queryset %}
<tr>
<td><a href="/{{ article.blog.userinfo.username }}/article/{{ article.pk }}/">{{ article.title }}</a></td>
<td>{{ article.create_time|date:'Y-m-d' }}</td>
<td>{{ article.comment_num }}</td>
<td>{{ article.up_num }}</td>
<td><a href="">编辑</a></td>
<td><a href="">删除</a></td>
</tr> {% endfor %}
</tbody>
</table>
<div class="pull-right">{{ page_obj.page_html|safe }}</div> </div>
<div role="tabpanel" class="tab-pane fade" id="profile" aria-labelledby="profile-tab">
<p>Fpark.</p>
</div>
<div role="tabpanel" class="tab-pane fade" id="dropdown" aria-labelledby="dropdown-tab">
<p>Etsy mray yr.</p>
</div>
<div role="tabpanel" class="tab-pane fade" id="dropdown2" aria-labelledby="dropdown2-tab">
<p>Trust fhey svegan.</p>
</div>
</div>
{% endblock %}
</div>
</div>
</div>
</div> </body>
</html>

backend.html

@login_required
def set_avatar(request):
if request.method == 'POST':
file_obj = request.FILES.get('myfile')
# print(file_obj)
# 修改用户avatar字段
# 1.利用queryset内置方法修改 不行
# models.UserInfo.objects.filter(pk=request.user.pk).update(avatar=file_obj)
# 2.利用对象修改
user_obj = request.user
user_obj.avatar = file_obj
user_obj.save()
return redirect('/home/')
return render(request, 'set_avatar.html')

views.py 设置头像

def upload_img(request):
if request.method == 'POST':
# 将用户上传的图片存入media文件夹以便后续查找
file_obj = request.FILES.get('imgFile')
# 将该文件存入media文件夹
# 1.手动拼接文件存放的路径
path = os.path.join(settings.BASE_DIR, 'media', 'article_img')
# 判断当前路径文件是否存在,不存在自动创建
if not os.path.exists(path):
os.mkdir(path) # 当文件夹不存在时,创建文件夹
file_path = os.path.join(path, file_obj.name)
# 文件操作
with open(file_path, 'wb') as f:
for line in file_obj:
f.write(line)
back_dic = {
"error": 0,
"url": "/media/article_img/%s" % file_obj.name
}
return JsonResponse(back_dic)
return HttpResponse('ok')

views.py 上传图片

@login_required
def backend(request):
article_list = models.Article.objects.filter(blog=request.user.blog)
# 用户想访问的当前页面
current_page = request.GET.get('page', 1)
# 用户总条数
all_count = article_list.count()
page_obj = Pagination(current_page=current_page, all_count=all_count)
# 对数据进行切分
page_queryset = article_list[page_obj.start:page_obj.end] return render(request, 'backend/backend.html', locals())

views.py 后台管理主页

@login_required
def add_article(request):
if request.method == 'POST':
title = request.POST.get('title')
content = request.POST.get('content')
# 将需要处理的文本内容交由该模块生一个soup对象
soup = BeautifulSoup(content, 'html.parser')
tags = soup.find_all()
for tag in tags:
if tag.name == 'script':
# 将识别出的标签中的所有script标签删掉
tag.decompose() # 1.解决xss攻击问题 # 文章简介
desc = soup.text[0:100] # 2.读取前100个字节
# 保存到数据库中
models.Article.objects.create(title=title, content=str(soup), desc=desc, blog=request.user.blog)
return redirect('/backend/')
return render(request, 'backend/add_article.html')

views.py 添加文章

BBS论坛 后台管理的更多相关文章

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

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

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

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

  3. BBS - 后台管理

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

  4. 1211 BBS后台管理文章添加

    目录 昨日内容回顾 侧边栏inclusion_tag inclusion_tag的响应 使用 自定义inclusion_tag,标签,过滤器 文章的点赞点踩 前端 后端 校验规则 文章的评论功能 1. ...

  5. Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统

    Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...

  6. BBS项目之后台管理

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

  7. 后台管理UI的选择

    最近要做一个企业的OA系统,以前一直使用EasyUI,一切都好,但感觉有点土了,想换成现在流行的Bootstrap为基础的后台UI风格,想满足的条件应该达到如下几个: 1.美观.大方.简洁 2.兼容I ...

  8. 后台管理UI皮肤的选择

    后台管理UI的选择 目录 一.EasyUI 二.DWZ JUI 三.HUI 四.BUI 五.Ace Admin 六.Metronic 七.H+ UI 八.Admin LTE 九.INSPINIA 十. ...

  9. 帝国cms7.0忘记后台管理账户用户名密码

    最近刚登陆以前的网站,但是发现自己的后台管理用户名密码已经忘记,于是到帝国cms论坛里面找了一下解决方案,成功解决问题.特此分享一下解决成功经验. 原帖地址:http://bbs.phome.net/ ...

随机推荐

  1. SQL语句的执行顺序和效率

    今天上午在开发的过程中,突然遇到一个问题,需要了解SQL语句的执行顺序才能继续,上网上查了一下相关的资料,现整理如下:一.sql语句的执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各 ...

  2. android中的Serveice组件

    创建 配置 Service: 1.定义一个继承了Service类的子类 2.在 AndroidManifest.xml清单文件中对开发的Service进行配置 Service和Activity很相似, ...

  3. accordion(分类)组件

    一.依赖于 Panel(面板)组件 二.class加载方式 <div id="box" class="easyui-accordion" style=&q ...

  4. 使用postman请求响应Invalid CORS request

    响应结果 解决方法: 下载之后解压,在Chrome浏览器,打开扩展 chrome://extensions/ 点击“加载已解压的扩展程序”添加我们解压的包,或者直接拖拽.之后我们就可以看到Postma ...

  5. 群晖NAS被攻击

    上周给新员工办理入职的时候,因为我们有自己的NAS系统,给他们建账号的时候,突然发现群晖无法登陆,很奇怪. 然后查看群晖系统,发现网络能Ping 通,但是群晖管理界面无法打开,一开始以为机房天热,硬盘 ...

  6. 56. Map(双列集合)

    在生活中有些数据是以映射关系存在的,也就是成对出现的,比如:老公  老婆(key-->value) 双列集合:-------------------| Map    如果是实现了Map接口的集合 ...

  7. Web前端/全栈核心(html5/css3/js/vue/react/angular/es6/node)观看笔记

    a标签中的超链接,需要加   http://    否则会出现页面找不到. iframe中添加a标签,a标签中的target属性可以控制即将打开的页面,在那个位置显示. _blank 在新窗口中打开被 ...

  8. Linux命令篇-服务器查看日志(续)

    此文是继上文如何在服务器看日志的续集.之所以我觉得自己很菜,是因为我的周围都是大佬,他们都是值得我学习的对象. 通常大家看日志,无非两种,一是more命令,一是tail命令,其中的过程要么是翻页查看, ...

  9. delphi 内存映射

    使用内存映射文件读写大文件 使用内存映射文件读写大文件 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类.一般来说,这些函数可以满足大多数场合的要求,但是 ...

  10. leyou_04_使用vue.js搭建页面—使用ajax完成品牌的查询

    1.使用vue.js搭建页面 1.1使用的模板插件Vuetify 中文UI组件官网:https://vuetifyjs.com/zh-Hans/getting-started/quick-start ...