# Python_movie_sys
**Repository Path**: final__fc/python_movie_sys
## Basic Information
- **Project Name**: Python_movie_sys
- **Description**: 毕业设计无偿分享,后续要提交到学校的服务器·上面。哈哈哈哈哈哈
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-01-21
- **Last Updated**: 2025-05-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
---
typora-copy-images-to: ./assert
typora-root-url: ./assert
---
# 项目介绍(克隆到本地就可以看到下面的图片了!!!)
扯淡中,作为核心开发成员,主导并参与电影推荐系统的用户端(Web)与后台服务端开发,实现从需求分析、架构设计到部署上线的全流程闭环。系统日均处理5000+用户请求,推荐准确率提升35%,用户活跃度增长20%。
## 项目使用(本项目只有后端代码)
前端项目代码在gitee网址
导入项目依赖:
```
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
```
后端启动命令:
```
python manage.py runserver
```
1. 前端安装: 安装node-v14.19.1以上版本这个你·自己安装哈!!!进入bs-frontend-template文件夹
执行安装命令|启动命令:
```
npm install
npm run dev
```
2. 访问 http://localhost:3002/
输入账号:admins
输入密码:admins
**图示**

**进入系统后显示**

3. 数据库使用:
迁移命令(不要使用,在更新模型字段或者其他涉及数据库操作时才需要使用以下命令):
```
python manage.py makemigrations
python manage.py migrate
```
将上图的db.sqlite3这是迁移出来的文件导入到navicat中显示(无需密码)
在里面可以编辑不同表的数据

4. 后台管理(这一块的功能自己玩吧!!!!):
点击黄色箭头的按钮


5. 推荐算法文件在
部分算法代码片段:
```python
def similarity(movie1_id, movie2_id):
movie1_set = Rate.objects.filter(movie_id=movie1_id)
# movie1的打分用户数
movie1_sum = movie1_set.count()
# movie_2的打分用户数
movie2_sum = Rate.objects.filter(movie_id=movie2_id).count()
# 两者的交集
common = Rate.objects.filter(user_id__in=Subquery(movie1_set.values('user_id')), movie=movie2_id).values('user_id').count()
# 没有人给当前电影打分
if movie1_sum == 0 or movie2_sum == 0:
return 0
similar_value = common / sqrt(movie1_sum * movie2_sum)#余弦计算相似度
return similar_value
#基于物品
def recommend_by_item_id(user_id, k=15):
# 前三的tag,用户评分前三的电影
user_prefer = UserTagPrefer.objects.filter(user_id=user_id).order_by('-score').values_list('tag_id', flat=True)
user_prefer = list(user_prefer)[:3]
current_user = User.objects.get(id=user_id)
# 如果当前用户没有打分 则看是否选择过标签,选过的话,就从标签中找
# 没有的话,就按照浏览度推荐15个
if current_user.rate_set.count() == 0:
if len(user_prefer) != 0:
movie_list = Movie.objects.filter(tags__in=user_prefer)[:15]
else:
movie_list = Movie.objects.order_by("-num")[:15]
print('from here')
return movie_list
# most_tags = Tags.objects.annotate(tags_sum=Count('name')).order_by('-tags_sum').filter(movie__rate__user_id=user_id).order_by('-tags_sum')
# 选用户最喜欢的标签中的电影,用户没看过的30部,对这30部电影,计算距离最近
un_watched = Movie.objects.filter(~Q(rate__user_id=user_id), tags__in=user_prefer).order_by('?')[:30] # 看过的电影
watched = Rate.objects.filter(user_id=user_id).values_list('movie_id', 'mark')
distances = []
names = []
# 在未看过的电影中找到
for un_watched_movie in un_watched:
for watched_movie in watched:
if un_watched_movie not in names:
names.append(un_watched_movie)
distances.append((similarity(un_watched_movie.id, watched_movie[0]) * watched_movie[1], un_watched_movie))#加入相似的电影
distances.sort(key=lambda x: x[0], reverse=True)
# print('this is distances', distances[:15])
recommend_list = []
for mark, movie in distances:
if len(recommend_list) >= k:
break
if movie not in recommend_list:
recommend_list.append(movie)
# print('this is recommend list', recommend_list)
# 如果得不到有效数量的推荐 按照未看过的电影中的热度进行填充
# print('recommend list', recommend_list)
return recommend_list
```
6. 电影数据可视化项目**gitee**网址在包含前后端(这一块的使用文档在网址下的READMD.md会详细说明迭代哈!!!)
```
https://gitee.com/final__fc/movie_-sys
```
**图示:**


