Flask 构建微电影视频网站(八)
评论收藏及弹幕
实现电影评论添加及列表、数据查询实现统计播放量和评论量、jquery ajax实现收藏电影,flask结合redis消息队列实现电影弹幕,bug处理等功能。
电影评论-统计
class CommentForm(FlaskForm):content = TextAreaField(label="内容",validators=[DataRequired("请输入内容!"),],description="内容",render_kw={"id": "input_content"})submit = SubmitField('提交评论',render_kw={"class": "btn btn-success","id": "btn-sub"})
@home.route("/play/<int:id>/<int:page>/", methods=["GET", "POST"])
def play(id=None, page=None):"""播放电影"""movie = Movie.query.join(Tag).filter(Tag.id == Movie.tag_id,Movie.id == int(id)).first_or_404()if page is None:page = 1page_data = Comment.query.join(Movie).join(User).filter(Movie.id == movie.id,User.id == Comment.user_id).order_by(Comment.addtime.desc()).paginate(page=page, per_page=10)form = CommentForm()if "user" in session and form.validate_on_submit():data = form.datacomment = Comment(content=data["content"],movie_id=movie.id,user_id=session["user_id"])db.session.add(comment)db.session.commit()movie.commentnum = movie.commentnum + 1db.session.add(movie)db.session.commit()flash("添加评论成功!", "ok")return redirect(url_for('home.play', id=movie.id, page=1))# 放在后面避免添加评论播放量涨2movie.playnum = movie.playnum + 1db.session.add(movie)db.session.commit()return render_template("home/play.html", movie=movie, form=form, page_data=page_data)
修改前端页面
收藏电影
@home.route("/moviecol/add/", methods=["GET"])
@user_login_req
def moviecol_add():"""添加电影收藏"""uid = request.args.get("uid", "")mid = request.args.get("mid", "")moviecol = Moviecol.query.filter_by(user_id=int(uid),movie_id=int(mid)).count()# 已收藏if moviecol == 1:data = dict(ok=0)# 未收藏进行收藏if moviecol == 0:moviecol = Moviecol(user_id=int(uid),movie_id=int(mid))db.session.add(moviecol)db.session.commit()data = dict(ok=1)import jsonreturn json.dumps(data)
在播放页面添加js
<script>$(document).ready(function () {$("#btn-col").click(function () {var mid = {{ movie.id }};var uid = {{ session['user_id'] }};$.ajax({url: "{{ url_for('home.moviecol_add') }}",type: "GET",data: "mid=" + mid + "&uid=" + uid,dataType: "json",success: function (res) {if (res.ok == 1) {$("#show_col_msg").empty();$("#show_col_msg").append("收藏成功!");} else {$("#show_col_msg").empty();$("#show_col_msg").append("已经收藏!");}}})});});</script>
电影弹幕
使用[dplayer](http://dplayer.js.org/#/)
替换播放器,下载dplayer文件,拷贝到static下
@home.route("/video/<int:id>/<int:page>/", methods=["GET", "POST"])
def video(id=None, page=None):"""弹幕播放器"""movie = Movie.query.join(Tag).filter(Tag.id == Movie.tag_id,Movie.id == int(id)).first_or_404()if page is None:page = 1page_data = Comment.query.join(Movie).join(User).filter(Movie.id == movie.id,User.id == Comment.user_id).order_by(Comment.addtime.desc()).paginate(page=page, per_page=10)movie.playnum = movie.playnum + 1form = CommentForm()if "user" in session and form.validate_on_submit():data = form.datacomment = Comment(content=data["content"],movie_id=movie.id,user_id=session["user_id"])db.session.add(comment)db.session.commit()movie.commentnum = movie.commentnum + 1db.session.add(movie)db.session.commit()flash("添加评论成功!", "ok")return redirect(url_for('home.video', id=movie.id, page=1))db.session.add(movie)db.session.commit()return render_template("home/video.html", movie=movie, form=form, page_data=page_data)@home.route("/tm/v3/", methods=["GET", "POST"])
def tm():"""弹幕消息处理"""import jsonif request.method == "GET":# 获取弹幕消息队列id = request.args.get('id')# 存放在redis队列中的键值key = "movie" + str(id)if rd.llen(key):msgs = rd.lrange(key, 0, 2999)'''{"code":0,"data":[[ 6.978, # time0, # type16777215, # color"DIYgod", # author"1111111111111111111" # text],...]}'''res = {"code": 0,"data": [json.loads(v) for v in msgs]}else:res = {"code": 0,"data": []}resp = json.dumps(res)if request.method == "POST":# 添加弹幕data = json.loads(request.get_data())'''请求author: "DIYgod"color: 16777215id: "9E2E3368B56CDBB4"text: "此生无悔入四月来世愿做友人"time: 0type: 0''''''响应{"code":0,"data":{"_id":"5bfb561b63125e15873f8d22","player":"9E2E3368B56CDBB4","author":"DIYgod","time":0,"text":"此生无悔入四月来世愿做友人","color":16777215,"type":0,"ip":"222.88.236.173","referer":"http://dplayer.js.org/","date":1543198235766,"__v":0}}'''resp_msg = {"__v": 0,"author": data["author"],"time": data["time"],"text": data["text"],"color": data['color'],"type": data['type'],"ip": request.remote_addr,"_id": datetime.datetime.now().strftime("%Y%m%d%H%M%S") + uuid.uuid4().hex,"player": data["id"]}res = {"code": 0,"data": resp_msg}resp = json.dumps(res)# 将添加的弹幕推入redis的队列中msg = [data["time"],data['type'],data['color'],data["author"],data["text"],]rd.lpush("movie" + str(data["id"]), json.dumps(msg))return Response(resp, mimetype='application/json')
在video.html
中引入js和css
<link rel="stylesheet" href="{{ url_for('static',filename='dplayer/dist/DPlayer.min.css') }}"><script src="https://cdn.jsdelivr.net/npm/flv.js/dist/flv.min.js"></script><script src="https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js"></script><script src="{{ url_for('static',filename='dplayer/dist/DPlayer.min.js') }}"></script>```// 获取弹幕<script>var dp1 = new DPlayer({element: document.getElementById('dplayer1'),video: {url: "{{ url_for('static',filename='uploads/'+movie.url) }}",},danmaku: {id: '{{ movie.id }}',api: "/tm/",}});</script>
安装flask-redis
pip install flask-redis
在初始化文件中进行redis链接
from flask_redis import FlaskRedisapp.config["REDIS_URL"] = "redis://localhost:6379/1"db = SQLAlchemy(app)
rd = FlaskRedis(app)
生产环境部署
参考django部署,所需文件在项目中
转载于:https://www.cnblogs.com/gaoyongjian/p/10029170.html
Flask 构建微电影视频网站(八)相关推荐
- python视频网站项目_[项目实战] Python Flask构建微电影视频网站
注:本站源码仅做学术研究,自娱自乐使用,不得用于任何的非法商业用途 由于版权原因.本站将无限期停止微擎模块资源下载如果有任何侵犯您权益的内容请联系小站删除哦.小站一定会积极配合的. 课程目录: (下载 ...
- Python Flask 构建微电影视频网站
"轻"是Flask的精髓,小型项目快速开发,大型项目毫无压力 1-1 课程导学及介绍 1-2 Windows环境搭建 2-2 Mac OS环境搭建 2-3 第一Flask程序 3- ...
- python视频网站项目_Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目...
课程名称: Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目视频教程 课程简介: Flask作为Python编写的Web小型框架,可以使用Python快速开 ...
- python视频网站项目_Python Flask 项目实战—构建微电影视频网站
下单后联系在线客服索取下载链接 课程章节 第1章 课程介绍 1-1 课程导学 1-2 课程介绍 第2章 准备开发环境 2-1 windows环境搭建 2-2 mac os环境搭建 2-3 virtua ...
- python 开发视频播放网站_python开发微电影视频网站教程附源码
做为一个合格的Pythoner,只掌握一个框架是不够,如果你有过其它Python框架(例如django)的使用经验,对比不同框架的特性来学习,你将收获更多 当前信息若含有黄赌毒等违法违规不良内容,请点 ...
- Flask构建微电影(二)
第三章.项目分析.搭建目录及模型设计 3.1.前后台项目目录分析 微电影网站 前台模块 后台模块 前台(home) 数据模型:models.py 表单处理:home/forms.py 模板目录:tem ...
- python flask实战视频_Python Flask打造一个视频网站实战视频教程
目录: 本套课程从零基础讲解flask开发网站.涉及到的知识点包括:Python和pycharm的安装.urls和视图.Jinja2模版.SQLAlchemy的数据库操作框架.session和cook ...
- 2018年最新Python Flask打造一个视频网站实战视频教程分享
适用人群 1.想使用Python快速开发网站的. 2.前端开发者,想学习后端开发逻辑的. 3.有编程经验,想学习Flask的. 课程概述 本套课程从零基础讲解flask开发网站.涉及到的知识点包括:P ...
- python web实战视频教程_2018Python Flask打造一个视频网站实战视频教程
u=2886730253,1709247366&fm=173&s=FA0BB1440FB48CCA0A97318103003098&w=440&.jpg (54.7 K ...
最新文章
- win服务器文件夹权限设置密码,win服务器 文件夹权限设置
- OJ1008: 美元和人民币
- web中ajax实现二级联动,Ajax实现城市二级联动(一)
- lua table insert_超详细的sysbench oltp-数据库性能测试中lua脚本解剖
- 疫情肆虐下,程序员用代码告诉你为什么千万不要出门!
- SolarWinds 软件出现3个新的严重漏洞
- 淘宝、天猫按关键词搜索商品API接口返回数据展示
- 用matlab解根3乘根2,信号与系统第五章习题答案
- python 倒计时手机app打卡_摆脱拖延症,这些APP让你的时间更高效!
- win7可以运行python_win7安装python开发环境,运行python
- 主流大数据存储解决方案评析
- 极路由1S刷openwrt
- Excel基础教程(1)
- [小说连载]张小庆,在路上(30)-保持希望
- MySQL关系型数据库
- 关于Java调用dll文件的一系列问题(持续更新)
- 艾科dell服务器系统安装教程,武汉swarm部署
- Keil MDK入门---从新建一个工程开始
- 微课--Python获取局域网内所有机器IP地址与MAC地址
- windows服务器系统时间修改了还是不对