# 基于Django的电影推荐系统的设计与实现
#### 介绍
项目选择了Django来作为电影推荐系统的开发框架,并采用了MTV的框架模式,这使得Django的各模块之间结合得比较紧密。
项目主要分为了用户系统的登陆注册模块、个人中心模块、电影推荐模块、电影详情模块、后台管理模块五个主要的功能模块,
完成了用户登陆注册、个人信息修改、历史浏览、电影收藏、评论等个性化的功能。
系统可以通过收集用户对电影评分,并利用Item-CF和基于热度的算法来完成了对用户的电影个性化推荐,在原始的电影评分数据集采用了MovieLens 100K的数据集,以此来提高用户的推荐效率。
#### 软件架构
本项目采用了Django框架的MTV架构,
开发环境:Django2.0.1、python3.6、mysql5.6、html+css+js
项目的第三方库
Package version remark
APScheduler 3.6.3 定时任务框架
Django 2.0.1 web框架
MarkupPy 1.14 可自定义的HTML / XML生成器
Pillow 6.2.1 图像处理标准库
PyMySQL 0.9.3 连接 MySQL 的标准库
PyYAML 5.2 用于解析和编码 YAML 文件的程序包
asgiref 3.2.3 异步Web应用程序和服务器相互通信的标准
certifi 2019.11.28 验证SSL证书的可靠性
chardet 3.0.4 编码识别模块
defusedxml 0.6.0 解析不受信任的XML数据的任何服务器代码
diff-match-patch 20181111 文本的对比功能
Django-pure-pagination 0.3.0 分页功能插件
Django-ranged-response 0.2.0 把文件响应到浏览器
Django-simple-captcha 0.5.13 验证码插件
et-xmlfile 1.0.1 创建大型XML文件的低内存库
idna 2.8 应用程序中的国际化域名
jdcal 1.4.1 日期与日历日期之间转换的功能
Mysqlclient 1.4.6 MySQLdbl的分支,与数据库通信的模块
Numpy 1.18.1 Python进行科学计算的基本软件包
odfpy 1.4.0 用于读写OpenDocument 1.2文件的库
openpyxl 3.0.2 第三方excel操作库
Pandas` 1.0.2 数据分析包
pip 19.3.1 安装管理 Python 包的工具
Python-dateutil 2.8.1 将字符串转换为日期格式
Pytz 2019.3 用于时区的转换
Requests 2.22.0 处理URL资源
Setuptools 42.0.2 Python包管理工具
Sqlparse 0.3.0 Python的一个解析SQL语言的库
Tablib 0.14.0 操作 Excel 的一个库
Tzlocal 2.0.0 在Unix和Win-32下返回带有本地时区信息的tzinfo对象
Urlib3 1.25.7 用于网络请求的库
Wheel 0.33.6 setuptools的基础包,用于处理Wheel文件的命令行工具
Xlrd 1.2.0 读取Excel的扩展工具
Xlwt 1.3.0 写入Excel的扩展工具
Xadmin 2.0 后台管理系统
把xadmin包安装在项目的extra_apps文件内,利用pip安装了xadmin后后卸载xadmin,
这里需要xadmin的依赖包,但项目是用xadmin的源码实现后台系统。
其中下xadmin的依赖项为:django-crispy-forms、django-import-export、
django-reversion、django-formtools、future、httplib2、Six。
xadmin的依赖项
Package version remark
django-crispy-forms 1.8.1 美化form页面
Django-import-export 2.0 用于处理导入和导出数据的库
Django-reversion 0.2.0 DjangoWeb框架的扩展
Django-formtools 2.2 用于表单预览和多步骤表单
Future 0.18.2 解决python版本不兼容问题
Httplib2 0.9.2 HTTP和HTTPS的客户端协议
Six 1.13.0 用来兼容 Python 2和 Python 3的库
前端插件:uploadPreview(头像上传预览)、layDate(日历插件)、font-awesome-4.7.0(字体图标库)、
html5shiv(h5兼任js库)、jquery-3.4.1(js框架)、bootstrap3(前端框架)、less( CSS 扩展语言)
开发工具:Pycharm、Navicat、Sublime Text3
解决Django使用xadmin的问题:
(1)TypeError at /xadmin/
login() got an unexpected keyword argument 'current_app'错误
Exception Location:
/home/wuchao/PycharmProjects/mxonline3/extra_apps/xadmin/views/website.py in get, line 66
解决方案:根据提示进入website,注释61行,
如:#'current_app': self.admin_site.name,
(2)AttributeError at /xadmin/
'Media' object has no attribute 'add_css'
Exception Location:
/home/wuchao/PycharmProjects/mxonline3/extra_apps/xadmin/util.py in vendor, line 94
解决方案:将util.py 中的86行 def vendor(*tags):方法体改为:
css = {'screen': []}
js = []
for tag in tags:
file_type = tag.split('.')[-1]
files = xstatic(tag)
if file_type == 'js':
js.extend(files)
elif file_type == 'css':
css['screen'] += files
return Media(css=css, js=js)
(3)AttributeError at /xadmin/xadmin/log/
'DateTimeField' object has no attribute 'rel'
Exception Location:
/home/wuchao/PycharmProjects/mxonline3/extra_apps/xadmin/views/list.py in get_list_queryset, line 228
解决方案:修改 views/list.py 中228行
if isinstance(field.rel, models.ManyToOneRel):
related_fields.append(field_name)
修改为:
if isinstance(field.remote_field, models.ManyToOneRel):
related_fields.append(field_name)
若继续报’rel’的错误,则根据Exception Location找到报错行,将field.rel修改为field.remote_field