Flask开发微电影网站(五)

news/2024/5/9 14:50:49/文章来源:https://blog.csdn.net/weixin_34308389/article/details/89620964

后台管理页面是系统管理员登录后对网站进行管理的前端页面

后台登录页面,如下图所示

img_dbbca85a2b86c7d25ae7b04a30558025.png

管理员登录后的页面,如下图所示

img_34b86fb862ca786e91cff8a3e6707247.png

管理员登录后,在右上角显示的管理员信息,如下图所示

img_67cd155c973d3eb53266de1dc4e41338.png

管理员登录后,在页面中间部分的左侧显示管理菜单

管理菜单包括控制面板,标签管理,电影管理,预告管理,会员管理,评论管理,收藏管理,日志管理,权限管理,角色管理,管理员管理等菜单,每个菜单下有子菜单进行细分管理控制

管理员可以使用菜单对网站进行管理

img_698816923875daba70e13a458ec07a8d.png

img_09b9a7d6aa613054c7ba2e8dd359ee70.png

img_8f8e7450eaea3f86a648d48cf251018b.png

img_7a9860cafdf638a9c5521f2eed2a347c.png

img_11af762dfd59d59b6c8ff7cf3db48c19.png

img_320e49b3036e8bfb934972b806d313df.png

img_ec9b9647f3144367fd69226b214e5377.png

img_9f18a7998bbb8b70d10378682e495340.png

img_c6722eb3df2c9775e1e0e971459ae7df.png

img_bf668451751bd31186c6034189595c4f.png

img_0f4ced472cf61759bbe290aa9a24c25d.png

在上面的图片中,可以看到,后台管理页面的顶部部分都是一样的,所以可以把后台管理页面顶部单独定义一个文件admin.html,让其他的页面继承admin.html

后台管理页面的中间部分中,管理员点击子菜单进行管理,每个子菜单显示的显示,其左侧部分又都是相同的,所以也可以把中间部分的左侧菜单也单独定义一个文件grid.html,让每个子菜单显示的页面都包含grid.html文件

1. 定义后台管理页面的左侧菜单部分

在templates的admin目录下创建grid.html,用来保存后台管理页面的左侧菜单部分代码

<ul class="sidebar-menu"><li class="header">管理菜单</li><li class="treeview" id="g-1"><a href="#"><i class="fa fa-home" aria-hidden="true"></i><span>首页</span><span class="label label-primary pull-right">1</span></a><ul class="treeview-menu"><li id="g-1-1"><a href="{{ url_for('admin.index') }}"><i class="fa fa-circle-o"></i> 控制面板</a></li></ul></li><li class="treeview" id="g-2"><a href="#"><i class="fa fa-tags" aria-hidden="true"></i><span>标签管理</span><span class="label label-primary pull-right">2</span></a><ul class="treeview-menu"><li id="g-2-1"><a href="{{ url_for('admin.tag_add') }}"><i class="fa fa-circle-o"></i> 添加标签</a></li><li id="g-2-2"><a href="{{ url_for('admin.tag_list',page=1) }}"><i class="fa fa-circle-o"></i> 标签列表</a></li></ul></li><li class="treeview" id="g-3"><a href="#"><i class="fa fa-file-video-o" aria-hidden="true"></i><span>电影管理</span><span class="label label-primary pull-right">2</span></a><ul class="treeview-menu"><li id="g-3-1"><a href="{{ url_for('admin.movie_add') }}"><i class="fa fa-circle-o"></i> 添加电影</a></li><li id="g-3-2"><a href="{{ url_for('admin.movie_list',page=1) }}"><i class="fa fa-circle-o"></i> 电影列表</a></li></ul></li><li class="treeview" id="g-4"><a href="#"><i class="fa fa-film" aria-hidden="true"></i><span>预告管理</span><span class="label label-primary pull-right">2</span></a><ul class="treeview-menu"><li id="g-4-1"><a href="{{ url_for('admin.preview_add') }}"><i class="fa fa-circle-o"></i> 添加预告</a></li><li id="g-4-2"><a href="{{ url_for('admin.preview_list',page=1) }}"><i class="fa fa-circle-o"></i> 预告列表</a></li></ul></li><li class="treeview" id="g-5"><a href="#"><i class="fa fa-users" aria-hidden="true"></i><span>会员管理</span><span class="label label-primary pull-right">1</span></a><ul class="treeview-menu"><li id="g-5-1"><a href="{{ url_for('admin.user_list',page=1) }}"><i class="fa fa-circle-o"></i> 会员列表</a></li></ul></li><li class="treeview" id="g-6"><a href="#"><i class="fa fa-comments" aria-hidden="true"></i><span>评论管理</span><span class="label label-primary pull-right">1</span></a><ul class="treeview-menu"><li id="g-6-1"><a href="{{ url_for('admin.comment_list',page=1) }}"><i class="fa fa-circle-o"></i> 评论列表</a></li></ul></li><li class="treeview" id="g-7"><a href="#"><i class="fa fa-heart" aria-hidden="true"></i><span>收藏管理</span><span class="label label-primary pull-right">1</span></a><ul class="treeview-menu"><li id="g-7-1"><a href="{{ url_for('admin.moviecol_list',page=1) }}"><i class="fa fa-circle-o"></i> 收藏列表</a></li></ul></li><li class="treeview" id="g-8"><a href="#"><i class="fa fa-file-text" aria-hidden="true"></i><span>日志管理</span><span class="label label-primary pull-right">3</span></a><ul class="treeview-menu"><li id="g-8-1"><a href="{{ url_for('admin.oplog_list',page=1) }}"><i class="fa fa-circle-o"></i> 操作日志列表</a></li><li id="g-8-2"><a href="{{ url_for('admin.adminloginlog_list',page=1) }}"><i class="fa fa-circle-o"></i> 管理员登录日志列表</a></li><li id="g-8-3"><a href="{{ url_for('admin.userloginlog_list',page=1) }}"><i class="fa fa-circle-o"></i> 会员登录日志列表</a></li></ul></li><li class="treeview" id="g-9"><a href="#"><i class="fa fa-lock" aria-hidden="true"></i><span>权限管理</span><span class="label label-primary pull-right">2</span></a><ul class="treeview-menu"><li id="g-9-1"><a href="{{ url_for('admin.auth_add') }}"><i class="fa fa-circle-o"></i> 添加权限</a></li><li id="g-9-2"><a href="{{ url_for('admin.auth_list',page=1) }}"><i class="fa fa-circle-o"></i> 权限列表</a></li></ul></li><li class="treeview" id="g-10"><a href="#"><i class="fa fa-user-secret" aria-hidden="true"></i><span>角色管理</span><span class="label label-primary pull-right">2</span></a><ul class="treeview-menu"><li id="g-10-1"><a href="{{ url_for('admin.role_add') }}"><i class="fa fa-circle-o"></i> 添加角色</a></li><li id="g-10-2"><a href="{{ url_for('admin.role_list',page=1) }}"><i class="fa fa-circle-o"></i> 角色列表</a></li></ul></li><li class="treeview" id="g-11"><a href="#"><i class="fa fa-user-circle" aria-hidden="true"></i><span>管理员管理</span><span class="label label-primary pull-right">2</span></a><ul class="treeview-menu"><li id="g-11-1"><a href="{{ url_for('admin.admin_add') }}"><i class="fa fa-circle-o"></i> 添加管理员</a></li><li id="g-11-2"><a href="{{ url_for('admin.admin_list',page=1) }}"><i class="fa fa-circle-o"></i> 管理员列表</a></li></ul></li>
</ul>

2. 定义后台管理页面的顶端部分

templates的admin目录下创建admin.html,用来保存后台管理页面的顶端部分代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>微电影管理系统</title><meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"><link rel="shortcut icon" href="{{ url_for('static',filename='base/images/logo.png') }}"><link rel="stylesheet" href="{{ url_for('static',filename='admin/bootstrap/css/bootstrap.min.css') }}"><link rel="stylesheet" href="{{ url_for('static',filename='fonts/css/font-awesome.min.css') }}"><link rel="stylesheet" href="{{ url_for('static',filename='ionicons/css/ionicons.min.css') }}"><link rel="stylesheet" href="{{ url_for('static',filename='admin/dist/css/AdminLTE.min.css') }}"><link rel="stylesheet" href="{{ url_for('static',filename='admin/dist/css/skins/_all-skins.min.css') }}"><link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='admin/plugins/datepicker/datepicker3.css') }}"><style>*{font-family:"Microsoft YaHei";}.table>tbody>tr>td, .table>tbody>tr>th, .table> tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th{vertical-align:middle;text-align:center;}</style>{% block css %}{% endblock %}
</head>
<body class="hold-transition skin-blue sidebar-mini">
<div class="wrapper"><header class="main-header"><a href="{{ url_for('admin.index') }}" class="logo"><span class="logo-mini"><img src="{{ url_for('static',filename='base/images/logo.png') }}" style="height:40px;width:40px;">电影系统</span><span class="logo-lg"><img src="{{ url_for('static',filename='base/images/logo.png') }}" style="height:40px;width:40px;">微电影管理系统</span></a><nav class="navbar navbar-static-top"><a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button"><span class="sr-only">下拉菜单</span></a><div class="navbar-custom-menu"><ul class="nav navbar-nav"><li class="dropdown user user-menu"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><img src="{{ url_for('static',filename='admin/dist/img/' + logo) }}"class="user-image" alt="User Image"><span class="hidden-xs">{{ session.get("admin") }}</span></a><ul class="dropdown-menu"><li class="user-header"><img src="{{ url_for('static',filename='admin/dist/img/' + logo) }}"class="img-circle" alt="User Image"><p>{{ session.get("admin") }}<small>{{ online_time }}</small></p></li><li class="user-footer"><div class="pull-left"><a href="{{ url_for('admin.pwd') }}" class="btn btn-default btn-flat">修改密码</a></div><div class="pull-right"><a href="{{ url_for('admin.login') }}" class="btn btn-default btn-flat">退出系统</a></div></li></ul></li></ul></div></nav></header><aside class="main-sidebar"><section class="sidebar"><div class="user-panel"><div class="pull-left image"><img src="{{ url_for('static',filename='admin/dist/img/' + logo) }}" class="img-circle"alt="User Image"></div><div class="pull-left info"><p>用户 {{ session.get("admin") }}</p><a href="#"><i class="fa fa-circle text-success"></i> 在线</a></div></div><form action="#" method="get" class="sidebar-form"><div class="input-group"><input type="text" name="q" class="form-control" placeholder="搜索..."><span class="input-group-btn"><button type="submit" name="search" id="search-btn" class="btn btn-flat"><iclass="fa fa-search"></i></button></span></div></form>{% include 'admin/grid.html' %}</section></aside><div class="content-wrapper"><!--内容-->{% block content %}{% endblock %}<!--内容--></div><footer class="main-footer"><div class="pull-right hidden-xs"><b>版本</b> 1.0</div><strong>版权 &copy; 2017-2018 归<a href="">xxx</a>.</strong> 所有</footer><div class="control-sidebar-bg"></div>
</div>
<script src="{{ url_for('static',filename='admin/plugins/jQuery/jQuery-2.2.0.min.js') }}"></script>
<script src="{{ url_for('static',filename='admin/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="{{ url_for('static',filename='admin/plugins/slimScroll/jquery.slimscroll.min.js') }}"></script>
<script src="{{ url_for('static',filename='admin/plugins/fastclick/fastclick.js') }}"></script>
<script src="{{ url_for('static',filename='admin/dist/js/app.min.js') }}"></script>
<script src="{{ url_for('static',filename='admin/dist/js/demo.js') }}"></script>
<script src="//cdn.bootcss.com/holder/2.9.4/holder.min.js"></script>
<script src="{{ url_for('static',filename='admin/plugins/datepicker/bootstrap-datepicker.js') }}"></script>
<script src="{{ url_for('static',filename='admin/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js') }}" charset="UTF-8"></script>{% block js %}{% endblock %}</body>
</html>

在admin.html页面中,包含了左侧菜单部分的文件grid.html

3. 定义后台管理页面所需要的上下文处理器

在上面的后台管理页面顶端部分的代码中,使用了logo这个变量,所以要在视图函数中定义上下文处理器来封装这个变量logo

app的admin目录下的views.py文件中定义上下文处理器context_processor

import datetimefrom . import admin
from app.models import Admin# 上下文应用处理器
# 封装全局变量,并将其展现到模版里
@admin.context_processor
def tpl_extra():try:admin = Admin.query.filter_by(name=session["admin"]).first()        # 从session中获取admin的值,并在数据库中进行查询except:admin = Nonedata=dict(online_time=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),logo="user3-128x128.jpg",admin=admin,)return data

4. 定义后台管理页面的登录控制装饰器

既然是后台管理页面,就不能让普通用户登录进行管理操作,所以可以定义一个登录装饰器,对每个后台管理视图函数进行装饰,使得管理员用户必须登录后才能访问后台管理页面

from functools import wraps
from flask import render_template, redirect, url_for, sessionfrom app.models import Admin, Auth, Role# 定义装饰器,必须登录后才能访问后台管理页面
def admin_login_req(f):@wraps(f)def decorated_function(*args, **kwargs):if "admin" not in session:          # 如果session中没有admin变量则重定向到登录页面return redirect(url_for("admin.login", next=request.url))return f(*args, **kwargs)return decorated_function

5. 定义后台管理页面的权限控制装饰器

对于后台管理权限来说,每个后台管理员的角色不同,能拥有的管理权限也不同,能打开的后台管理页面自然也不同

所以也需要对后台管理员的权限进行控制,不同角色的管理员只能打开自己权限内的管理页面

from functools import wraps
from flask import sessionfrom app.models import Admin, Auth, Role# 权限控制装饰器
def admin_auth(func):@wraps(func)def decorated_function(*args, **kwargs):admin = Admin.query.join(Role).filter(Role.id == Admin.role_id,Admin.id == session.get("admin_id")).first()auths = admin.role.authsif auths:auths = list(map(lambda v: int(v), auths.split(",")))auth_list = Auth.query.all()urls = [v.url for v in auth_list for val in auths if val == v.id]rule = request.url_ruleif str(rule) not in urls:abort(404)return func(*args, **kwargs)abort(404)return decorated_function

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_823969.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控.net 网站 Glimpse

使用Nuget 安装Glimpse 安装好后&#xff0c;config会默认添加几个节点 安装好之后 只需要浏览器输入 网站/Glimpse.axd 再次进入网站 就可以查看&#xff08;ajax sql session 等&#xff09; 转载于:https://www.cnblogs.com/jayblog/p/9324672.html

本地搭建网站--PHP网站

背景&#xff1a;组内需要一个博客系统记录些文档、同时扫盲学习mysql、PHP、域名相关知识点、RFS学习演练 方案&#xff1a;phpnow emlog 一、PHPnow 提供PHP网站环境&#xff08; 服务器 数据库 主机空间&#xff09; 傻瓜式安装 主站&#xff1a;http://servkit.org/ 注&a…

在服务器上搭建多个WordPress博客网站教程(超级详细)

实验准备 一台阿里云服务器二个域名&#xff08;IP与域名已经建立解析关系&#xff09;Linux关于web架构的知识 实验步骤 1.用crt远程登录阿里云服务器 2.安装nginx&#xff0c;mysql&#xff0c;php 建议使用lnmp一键安装包安装&#xff0c;方便快捷 获取lnmp一键安装包链接 l…

网站建设指南之网站HTTPS化与证书

通常我们说的HTTPS就是HTTPSSL证书&#xff0c;简单的说就是HTTP的安全版。HTTP网站的数据传输都是以明文形式&#xff0c;比如用户密码等信息都没有加密&#xff0c;很容易造成信息泄露。绑定SSL证书后&#xff0c;可以实现网站HTTPS化&#xff0c;加密用户与网站之间的交互访…

bae部署php网站,thinkphp部署bae的相关配置

thinkphp3.2.3发布到bae3.0&#xff0c;在tp的config.php中设置URL_MODEL1&#xff0c;入口文件index.php中设置define(BIND_MODULE,Home);// 绑定Home模块到当前入口文件define(BIND_CONTROLLER,Index);// 绑定Index控制器到当前入口文件这样在xampp中调试可以直接是localhost…

linux新加网站,linux云主机如何添加网站?

如何在云主机上添加网站?云主机也是有不同的操作系统区分的&#xff0c;比如Windows跟Linux等等&#xff0c;这两种是比较多人选择的云服务器系统。那么&#xff0c;今天万变云给大家带来在linux云主机上进行网站添加的教程。以下配置的路径以网站云提供的标准环境路径为准&am…

html网站栏目列表,栏目列表页.html

&#xfeff;栏目列表页$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html; …

网站防御cdn和高防服务器,高防服务器和CDN防御的区别在哪

网络服务器配备纯SSD架构打造的高性能存储&#xff0c;旨在为用户提供优质、高效、弹性伸缩的云计算服务,下面小编给大家介绍一下高防服务器的种类。CDN是网站加速&#xff0c;可以服务器负载能力过低&#xff0c;带宽过少等带来的网站打开速度慢等问题。一个网站的服务器性能比…

Linux系统使用Gogs搭建私服Git网站

文章目录1. 安装Docker2. 安装Gogs3. 配置Git仓库系统&#xff1a;CentOS 7.4 64位1. 安装Docker # 通过yum源安装docker yum -y install docker # 启动docker systemctl start docker # 开机自启 sudo systemctl enable docker2. 安装Gogs 下载Gogs镜像 docker pull gogs/g…

基于django的视频点播网站开发-step3-注册登录功能

用户注册登录是一个网站的基本功能&#xff0c;django对这部分进行了很好的封装&#xff0c;我们只需要在django的基础上做些简单的修改就可以达到我们想要的效果。在本讲中&#xff0c;我们会用到user中的用户授权方面的一些函数&#xff0c;还会对django中的user进行扩展&…

揭秘全球最大网站Facebook背后的那些软件

Facebook级别规模的挑战   在我们深入细节之前&#xff0c;先了解一组Facebook不得不面对数据&#xff0c;你就可以想象这种规模。 Facebook每月的PV量&#xff1a;630,000,000,000 &#xff08;6千3百亿&#xff09;Facebook上的图片数量超过其他图片网站的总和&#xff08…

使用VS2012开发的网站或者webservice在IIS6.0上发布的注意事项

由于新版的VS2012的出现&#xff0c;很多人转而使用VS2012作为开发工具&#xff0c;微软每次新的版本都会新增一些功能&#xff0c;带给我们不少的惊喜&#xff0c;但是在VS2012或者VS2010下开发的网站或者webservice在部署时要注意了&#xff0c;由于VS2010以上版本的.net fra…

网站导航颜色停留_【设计师必看】提高网站易访问性的5个UI设计技巧

以下内容由摹客团队翻译整理&#xff0c;仅供学习交流。生活中难免会有这样的场景&#xff0c;例如打电话告诉别人你开会快要迟到了。这听起来是一个很简单的操作&#xff0c;对吗? 我也这么认为。但随即我又思考到另外一个问题&#xff0c;当手中有一堆重物时又该如何进行操作…

最简单的小说网站的部署

1.首先准备&#xff1a; 一个公网ip&#xff0c;一台云服务器 2.用ssh连接云服务器 3.rm -rf /etc/yum.repos.d/*.repo 清除损坏的repo包 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo 下载华为的yum yum cl…

网站文件放在linux的哪个目录中,linux 的命令放在哪个目录下

满意答案yuemeiren682017.05.16采纳率&#xff1a;59% 等级&#xff1a;12已帮助&#xff1a;10073人cd的基本语法是:cd[选项][参数]选项&#xff1a;-P,如果目录是符号链接&#xff0c;则进入实际的目录&#xff1b;-L&#xff0c;如果目录是符号链接&#xff0c;则进行链接…

刚新建好的动态网站项目,创建jsp页面就报错

拿到刚刚可以运行的Eclipse&#xff0c;就马上想敲码了&#xff0c;但一创建项目之后再创建jsp页面就报错 &#xff01; 报错的内容大概为缺乏对应的jar包。我们常用Tomcat为中间体&#xff0c;而他本身是带有开发jsp网站的对应的jar包&#xff0c;检查在创建的时候是否有在Ecl…

想学网站建设与设计的书籍_楚雄网站建设_做网站_网站设计

介绍一诺建站公司成立于2006年&#xff0c;主要提供楚雄网络基础服务和网络推广服务。服务项目包含&#xff1a;楚雄网站建设&#xff0c;手机网站建设&#xff0c;楚雄网站制作&#xff0c;楚雄网站优化&#xff0c;楚雄网站改版&#xff0c;网站SEO优化推广等网络相关服务。我…

页面加载多久算超时_打开一个网站,花几秒钟算正常?

全文共4167字&#xff0c;预计学习时长11分钟图源&#xff1a;turnkeyInternet查询谷歌会发现很多文章指出2到5秒钟网页就能加载完毕。但是&#xff0c;是什么使2-5秒成为预设范围呢&#xff1f;直觉告诉你&#xff0c;答案必定比这更复杂。没错&#xff0c;真正的答案比任何试…

网站正在建设中_网站建设中更有利SEO优化的细节

点击蓝字获取更多优惠信息我们现在日常在网络上所花费的时间超出三分之一&#xff0c;甚至更高。在信息化成型的时代&#xff0c;如果在信息市场中不掉队呢&#xff1f;企业推广外宣的途径和方式有了许多选择&#xff0c;企业网站建设、小程序应用、各网络平台推送&#xff0c;…

C# WPF Image如何利用IsMouseOver变成不同的图片

参考代码&#xff1a; <Image Cursor"Hand" x:Name"testImage" Height"200" Width"200" Stretch"Uniform" MouseEnter"Image_MouseEnter" MouseLeave"Image_MouseLeave"><Image.Style>&l…