1.后台管理之电影预告管理

1.1 定义电影预告表单

在app的admin目录的forms.py文件中,定义电影预告表单

​
# 预告表单
class PreviewForm(FlaskForm):title = StringField(label="预告标题",validators=[DataRequired("请输入预告标题!")],description="预告标题",render_kw={"class": "form-control","placeholder": "请输入预告标题!",})logo = FileField(label="预告封面",validators=[DataRequired("请上传预告封面!")],description="预告封面",)submit = SubmitField("编辑",render_kw={"class": "btn btn-primary",})​

1.2 电影管理之所有电影预告列表

1.2.1 电影管理之电影预告列表视图函数

在admin目录下的views.py文件中定义电影预告列表视图函数

电影预告列表视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route('/preview/list/<int:page>', methods=["GET"])
@admin_login_req
@admin_auth
def preview_list(page=None):if page is None:page = 1page_data = Preview.query.order_by(Preview.addtime.desc()).paginate(page=page, per_page=10)return render_template("admin/preview_list.html", page_data=page_data)​

1.2.2 电影管理之电影预告列表前端页面

电影预告列表页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

​
{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %}{% block content %}<section class="content-header"><h1>微电影管理系统</h1><ol class="breadcrumb"><li><a href="#"><i class="fa fa-dashboard"></i> 预告管理</a></li><li class="active">预告列表</li></ol></section><section class="content" id="showcontent"><div class="row"><div class="col-md-12"><div class="box box-primary"><div class="box-header"><h3 class="box-title">预告列表</h3><div class="box-tools"><div class="input-group input-group-sm" style="width: 150px;"><input type="text" name="table_search" class="form-control pull-right"placeholder="请输入关键字..."><div class="input-group-btn"><button type="submit" class="btn btn-default"><i class="fa fa-search"></i></button></div></div></div></div><div class="box-body table-responsive no-padding">{% for msg in get_flashed_messages(category_filter=["ok"]) %}<div class="alert alert-success alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><h4><i class="icon fa fa-check"></i> 操作成功</h4>{{ msg }}</div>{% endfor %}<table class="table table-hover"><tbody><tr><th>编号</th><th>预告标题</th><th>预告封面</th><th>添加时间</th><th>操作事项</th></tr>{% for v in page_data.items %}<tr><td>{{ v.id }}</td><td>{{ v.title }}</td><td><img data-src="{{ url_for("static",filename="uploads/"+v.logo) }}"class="img-responsive center-block" alt=""></td><td>{{ v.addtime }}</td><td><a href="{{ url_for('admin.preview_edit',id=v.id) }}"class="label label-success">编辑</a>&nbsp;<a href="{{ url_for('admin.preview_del',id=v.id) }}" class="label label-danger">删除</a></td></tr>{% endfor %}</tbody></table></div><div class="box-footer clearfix">{{ pg.page(page_data,"admin.preview_list") }}</div></div></div></div></section>
{% endblock %}{% block js %}<script>$(document).ready(function () {$("#g-4").addClass('active');$("#g-4-2").addClass('active');});</script>
{% endblock %}​

1.3 电影管理之添加电影预告

1.3.1 电影管理之添加电影预告视图函数

在admin目录下的views.py文件中定义添加电影预告视图函数

添加电影预告视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route('/preview/add/', methods=["GET", "POST"])
@admin_login_req
@admin_auth
def preview_add():form = PreviewForm()if form.validate_on_submit():data = form.datafile_logo = secure_filename(form.logo.data.filename)if not os.path.exists(app.config["UP_DIR"]):os.makedirs(app.config["UP_DIR"])os.chmod(app.config["UP_DIR"])logo = change_filename(file_logo)form.logo.data.save(app.config["UP_DIR"] + logo)preview = Preview(title=data.get("title"),logo=logo)db.session.add(preview)db.session.commit()flash("添加预告成功!", "ok")return redirect(url_for("admin.preview_add"))return render_template("admin/preview_add.html", form=form)​

1.3.2 电影管理之添加电影预告前端页面

电影预告列表页面继承admin.html页面

​
{% extends 'admin/admin.html' %}{% block content %}<section class="content-header"><h1>微电影管理系统</h1><ol class="breadcrumb"><li><a href="#"><i class="fa fa-dashboard"></i> 预告管理</a></li><li class="active">添加预告</li></ol></section><section class="content" id="showcontent"><div class="row"><div class="col-md-12"><div class="box box-primary"><div class="box-header with-border"><h3 class="box-title">添加预告</h3></div><form role="form"><div class="box-body">{% for msg in get_flashed_messages(category_filter=["ok"]) %}<div class="alert alert-success alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><h4><i class="icon fa fa-check"></i> 操作成功</h4>{{ msg }}</div>{% endfor %}<div class="form-group"><label for="input_title">{{ form.title.label }}</label>{{ form.title }}{% for err in form.title.errors %}<div class="col-md-12"><font style="color:red">{{ err }}</font></div>{% endfor %}</div><div class="form-group"><label for="input_logo">{{ form.logo.label }}</label>{{ form.logo }}{% for err in form.logo.errors %}<div class="col-md-12"><font style="color:red">{{ err }}</font></div>{% endfor %}<img data-src="holder.js/700x320" style="margin-top:5px;" class="img-responsive"alt=""></div></div><div class="box-footer">{{ form.csrf_token }}{{ form.submit }}</div></form></div></div></div></section>
{% endblock %}{% block js %}<script src="{{ url_for('static',filename='jwplayer/jwplayer.js') }}"></script><script type="text/javascript">jwplayer.key = "P9VTqT/X6TSP4gi/hy1wy23BivBhjdzVjMeOaQ==";</script><script type="text/javascript">jwplayer("moviecontainer").setup({flashplayer: "url_for('static',filename='jwplayer/jwplayer.flash.swf')",playlist: [{file: "url_for('static',filename='video/htpy.mp4')",title: "环太平洋"}],modes: [{type: "html5"}, {type: "flash",src: "url_for('static',filename='jwplayer/jwplayer.flash.swf')"}, {type: "download"}],skin: {name: "vapor"},"playlist.position": "left","playlist.size": 200,height: 250,width: 387,});</script><script>$(document).ready(function () {$('#input_release_time').datepicker({autoclose: true,format: 'yyyy-mm-dd',language: 'zh-CN',});});</script><script>$(document).ready(function () {$("#g-4").addClass('active');$("#g-4-1").addClass('active');});</script>
{% endblock %}​

1.4 电影管理之编辑电影预告

1.4.1 电影管理之编辑电影预告视图函数

在admin目录下的views.py文件中定义编辑电影预告视图函数

编辑电影预告视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route("/preview/edit/<int:id>/", methods=['GET', 'POST'])
@admin_login_req
@admin_auth
def preview_edit(id=None):form = PreviewForm()form.logo.validators = []preview = Preview.query.get_or_404(int(id))if request.method == "GET":form.title.data = preview.titleif form.validate_on_submit():data = form.dataif form.logo.data.filename != "":file_logo = secure_filename(form.logo.data.filename)preview.logo = change_filename(file_logo)form.logo.data.save(app.config["UP_DIR"] + preview.logo)preview.title = data.get("title")db.session.add(preview)db.session.commit()flash("修改预告成功!", "ok")return redirect(url_for("admin.preview_edit", id=id))return render_template("admin/preview_edit.html", form=form, preview=preview)​

1.4.2 电影管理之编辑电影预告前端页面

电影预告列表页面继承admin.html页面

​
{% extends "admin/admin.html" %}{% block content %}<!--内容--><section class="content-header"><h1>微电影管理系统</h1><ol class="breadcrumb"><li><a href="#"><i class="fa fa-dashboard"></i> 预告管理</a></li><li class="active">修改预告</li></ol></section><section class="content" id="showcontent"><div class="row"><div class="col-md-12"><div class="box box-primary"><div class="box-header with-border"><h3 class="box-title">修改预告</h3></div><form role="form" method="post" enctype="multipart/form-data"><div class="box-body"><!--消息闪现-->{% for msg in get_flashed_messages(category_filter=["ok"]) %}<div class="alert alert-success alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><h4><i class="icon fa fa-check"></i> 操作成功</h4>{{ msg }}</div>{% endfor %}<div class="form-group"><label for="input_title">{{ form.title.label }}</label>{{ form.title }}<!--报错信息-->{% for err in form.title.errors %}<div class="col-md-12"><font style="color:red">{{ err }}</font></div>{% endfor %}</div><div class="form-group"><label for="input_logo">{{ form.logo.label }}</label>{{ form.logo }}<!--报错信息-->{% for err in form.logo.errors %}<div class="col-md-12"><font style="color:red">{{ err }}</font></div>{% endfor %}<img src="{{ url_for('static',filename='uploads/'+preview.logo) }}"style="margin-top:5px;" class="img-responsive"alt=""></div></div><div class="box-footer">{{ form.submit }}{{ form.csrf_token }}</div></form></div></div></div></section><!--内容-->
{% endblock %}{% block js %}<script>$(document).ready(function () {$("#g-4").addClass("active");$("#g-4-1").addClass("active");});</script>
{% endblock %}​

1.5 电影管理之删除电影预告

1.5.1 电影管理之删除电影视预告图函数

在admin目录下的views.py文件中定义删除电影预告视图函数

删除电影预告视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route("/preview/del/<int:id>/", methods=['GET', 'POST'])
@admin_login_req
@admin_auth
def preview_del(id=None):preview = Preview.query.get_or_404(int(id))db.session.delete(preview)db.session.commit()flash("删除预告成功!", "ok")return redirect(url_for("admin.preview_list", page=1))​

1.后台管理之会员管理

2.1 会员管理之所有会员列表

2.1.1 会员管理之会员列表视图函数

在admin目录下的views.py文件中定义会员列表视图函数

会员列表视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route('/user/list/<int:page>/', methods=['GET'])
@admin_login_req
@admin_auth
def user_list(page=None):if page is None:page = 1page_data = User.query.order_by(User.addtime.asc()).paginate(page=page, per_page=3)return render_template("admin/user_list.html", page_data=page_data)​

2.1.2 会员管理之会员列表前端页面

电影预告列表页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

​
{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %}{% block content %}<section class="content-header"><h1>微电影管理系统</h1><ol class="breadcrumb"><li><a href="#"><i class="fa fa-dashboard"></i> 会员管理</a></li><li class="active">会员列表</li></ol></section><section class="content" id="showcontent"><div class="row"><div class="col-md-12"><div class="box box-primary"><div class="box-header"><h3 class="box-title">会员列表</h3><div class="box-tools"><div class="input-group input-group-sm" style="width: 150px;"><input type="text" name="table_search" class="form-control pull-right"placeholder="请输入关键字..."><div class="input-group-btn"><button type="submit" class="btn btn-default"><i class="fa fa-search"></i></button></div></div></div></div><div class="box-body table-responsive no-padding"><!--消息提示-->{% for msg in get_flashed_messages(category_filter=["ok"]) %}<div class="alert alert-success alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><h4><i class="icon fa fa-check"></i> 操作成功</h4>{{ msg }}</div>{% endfor %}<table class="table table-hover"><tbody><tr><th>编号</th><th>昵称</th><th>邮箱</th><th>手机</th><th>头像</th><th>注册时间</th><th>操作事项</th></tr>{% for v in page_data.items %}<tr><td>{{ v.id }}</td><td>{{ v.name }}</td><td>{{ v.email }}</td><td>{{ v.face }}</td><td><img src="{{ url_for('static',filename='uploads/users/%s'% v.face) }}"style="width:50px;" class="img-responsive center-block" alt=""></td><td>{{ v.addtime }}</td><td><a class="label label-success" href="{{ url_for('admin.user_view',id=v.id) }}">查看</a>&nbsp;<a class="label label-danger" href="{{ url_for('admin.user_del',id=v.id) }}">删除</a></td></tr>{% endfor %}</tbody></table></div><div class="box-footer clearfix">{{ pg.page(page_data,'admin.user_list') }}</div></div></div></div></section>
{% endblock %}{% block js %}$(document).ready(function () {$("#g-5").addClass('active');$("#g-5-1").addClass('active');});
{% endblock %}​

2.2 会员管理之查看会员

2.2.1 会员管理之查看会员视图函数

在admin目录下的views.py文件中定义查看会员详细信息视图函数

查看会员详细信息视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route('/user/view/<int:id>/', methods=['GET'])
@admin_login_req
@admin_auth
def user_view(id=None):user = User.query.get_or_404(int(id))return render_template("admin/user_view.html", user=user)​

2.2.2 会员管理之查看会员前端页面

电影预告列表页面继承admin.html页面

​
{% extends 'admin/admin.html' %}{% block css %}<style>.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: left;}.td_bd {font-weight: bold;}</style>
{% endblock %}
{% block content %}<section class="content-header"><h1>微电影管理系统</h1><ol class="breadcrumb"><li><a href="#"><i class="fa fa-dashboard"></i> 会员管理</a></li><li class="active">查看会员</li></ol></section><section class="content" id="showcontent"><div class="row"><div class="col-md-12"><div class="box box-primary"><div class="box-header"><h3 class="box-title">会员详情</h3></div><div class="box-body table-responsive no-padding"><table class="table table-hover"><tbody><tr><td class="td_bd">编号:</td><td>{{ user.id }}</td></tr><tr><td class="td_bd">昵称:</td><td>{{ user.name }}</td></tr><tr><td class="td_bd">邮箱:</td><td>{{ user.email }}</td></tr><tr><td class="td_bd">手机:</td><td>{{ user.phone }}</td></tr><tr><td class="td_bd">头像:</td><td><img src="{{ url_for('static',filename='uploads/users/' + user.face) }}"style="width:100px;" class="img-responsive" alt=""></td></tr><tr><td class="td_bd">注册时间:</td><td>{{ user.addtime }}</td></tr><tr><td class="td_bd">唯一标志符:</td><td>{{ user.uuid }}</td></tr><tr><td class="td_bd">个性简介:</td><td>{{ user.info }}</td></tr></tbody></table></div></div></div></div></section>
{% endblock %}{% block js %}$(document).ready(function () {$("#g-5").addClass('active');$("#g-5-1").addClass('active');});
{% endblock %}​

2.3 会员管理之删除会员

2.3.1 会员管理之删除会员视图函数

在admin目录下的views.py文件中定义删除会员视图函数

删除会员视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route("/user/del/<int:id>/", methods=['GET'])
@admin_login_req
@admin_auth
def user_del(id=None):user = User.query.get_or_404(int(id))db.session.delete(user)db.session.commit()flash("删除会员成功", "ok")return redirect(url_for('admin.user_list', page=1))​

3.后台管理之电影评论管理

3.1 电影管理之所有电影评论列表

3.1.1 电影管理之电影评论列表视图函数

在admin目录下的views.py文件中定义电影评论列表视图函数

电影评论列表视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route('/comment/list/<int:page>/', methods=['GET'])
@admin_login_req
@admin_auth
def comment_list(page=None):if page is None:page = 1page_data = Comment.query.join(Movie).join(User).filter(Movie.id == Comment.movie_id,User.id == Comment.user_id).order_by(Comment.addtime).paginate(page=page, per_page=10)return render_template("admin/comment_list.html", page_data=page_data)​

3.1.2 电影管理之电影评论列表前端页面

电影预告列表页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

​
{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %}{% block content %}<section class="content-header"><h1>微电影管理系统</h1><ol class="breadcrumb"><li><a href="#"><i class="fa fa-dashboard"></i> 评论管理</a></li><li class="active">评论列表</li></ol></section><section class="content" id="showcontent"><div class="row"><div class="col-md-12"><div class="box box-primary"><div class="box-header with-border"><h3 class="box-title">评论列表</h3><div class="box-tools"><div class="input-group input-group-sm" style="width: 150px;"><input type="text" name="table_search" class="form-control pull-right"placeholder="请输入关键字..."><div class="input-group-btn"><button type="submit" class="btn btn-default"><i class="fa fa-search"></i></button></div></div></div></div><div class="box-body box-comments"><!--消息提示-->{% for msg in get_flashed_messages(category_filter=["ok"]) %}<div class="alert alert-success alert-dismissible"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><h4><i class="icon fa fa-check"></i> 操作成功</h4>{{ msg }}</div>{% endfor %}{% for v in page_data.items %}<div class="box-comment"><img class="img-circle img-sm"src="{{ url_for('static',filename='uploads/users/%s' % v.user.face) }}" alt="User Image"><div class="comment-text"><span class="username">{{ v.user.name }}<span class="text-muted pull-right"><i class="fa fa-calendar" aria-hidden="true"></i>&nbsp;{{ v.addtime }}</span></span>关于电影<a>《{{ v.movie.title }}》</a>的评论:{{ v.content }}<br><a href="{{ url_for('admin.comment_del',id=v.id) }}" class="label label-danger pull-right">删除</a></div></div>{% endfor %}</div><div class="box-footer clearfix">{{ pg.page(page_data,"admin.comment_list") }}</div></div></div></div></section>
{% endblock %}{% block js %}$(document).ready(function () {$("#g-6").addClass('active');$("#g-6-1").addClass('active');});
{% endblock %}​

3.2 电影管理之删除电影评论

3.2.1 电影管理之删除电影评论视图函数

在admin目录下的views.py文件中定义删除电影评论视图函数

删除电影评论视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

​
@admin.route("/comment/del/<int:id>/", methods=['GET'])
@admin_login_req
@admin_auth
def comment_del(id=None):comment = Comment.query.get_or_404(int(id))db.session.delete(comment)db.session.commit()flash("删除评论成功", "ok")return redirect(url_for("admin.comment_list", page=1))​

转自:https://www.cnblogs.com/renpingsheng/p/9153347.html

Flask开发微电影网站(八)相关推荐

  1. Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

  2. Flask开发微电影网站(三)

    页面完成后的最终布局 电影视频网站首页面 会员登录页面 会员注册页面 点击退出和会员按钮,直接进入会员登录页面 视频播放页面 可以看到,页面共同的部分是顶部导航和底部导航 所以我们可以把页面顶部导航和 ...

  3. Flask开发微电影网站(五)

    后台管理页面是系统管理员登录后对网站进行管理的前端页面 后台登录页面,如下图所示 管理员登录后的页面,如下图所示 管理员登录后,在右上角显示的管理员信息,如下图所示 管理员登录后,在页面中间部分的左侧 ...

  4. Flask开发微电影网站(七)

    1.后台管理之电影管理 1.1 定义电影表单 在app的admin目录的forms.py文件中,定义电影表单 # 电影表单 class MovieForm(FlaskForm):title = Str ...

  5. Flask开发微电影网站(六)

    1. 后台管理登录功能实现 1.1 后台管理页面登录表单LoginForm 在app的admin目录下创建forms.py文件,用来保存admin蓝图中需要使用到的表单 from flask_wtf ...

  6. Flask开发微电影网站(二)

    1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库 create ...

  7. Flask开发微电影网站(十)

    1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm):name = ...

  8. Python-Flask开发微电影网站(八)

    1.后台管理之电影预告管理 1.1 定义电影预告表单 在app的admin目录的forms.py文件中,定义电影预告表单 # 预告表单 class PreviewForm(FlaskForm):tit ...

  9. Python-Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

最新文章

  1. 万门大学倒闭了,童哲连夜跑路了
  2. 初识好朋友计算机课件,初识电脑朋友.ppt
  3. java诸神之战游戏_mj回溯算法 - osc_7bgz0no1的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. 历久弥新 - 微软万亿市值背后的文化支撑(下)|DevOps案例研究
  5. mac共享文件夹 linux,一文搞定 Linux,Mac,Windows 的 NFS 网络文件共享服务部署
  6. 学者当自树其帜——为一本书专建的“第二次宣言网”上线有感
  7. pytdx 获取板块指数_怎么查看各行业板块指数?
  8. 蓝桥杯题目——平方回文数
  9. Java面试:应聘Java开发工程师的基本要求是什么?
  10. 不会比这更详细的前端工程化的入门教程了
  11. 计算机室内设计绘图,室内设计中手绘和电脑制图的比较
  12. 重置海康威视DS-2TD2617B-6/PA测温摄像头
  13. 解决error:torch has an invalid wheel,.dist -info directory not fount
  14. 前端小案例--android机器人
  15. 时序数据库分析 - TimescaleDB时序数据库介绍
  16. matlab的magic函数,python实现类似于Matlab中的magic函数
  17. 蓝鲸平台单机部署增加一台 APPT (测试服务器)
  18. 微信小程序dom limit无法渲染更多节点问题
  19. CANoe/CANalyzer中常用CAPL诊断API分类总结与TFS应用示例
  20. 符合自己业务场景的自定义表单自定义报表及自定义图表

热门文章

  1. 诺基亚Lumia 920更新后出现屏幕亮度自动调节问题?
  2. 优化问题---梯度、方向导数、法线
  3. IT:成为服务经纪人的未来
  4. Jetson AGX Orin刷机教程,奶奶看完都说会了!
  5. GMT所提供的所有命令和其功能
  6. 读取linux内核内存,devmem读写物理内存和devkmem读取内核虚拟内存
  7. selenium自动化爬取京东电脑商品信息用于数据分析
  8. 通过脚本自由设计游戏UI风格
  9. biti_rainy
  10. USB协议学习笔记 - CUSTOM HID 设备