django+vue2实现教务管理成绩可视化

1、技术选择

  • 前端框架:vue2
  • 后端框架:django
  • 可视化:Echarts
  • 前后端分离:DRF
  • 数据库MySQL8.0

2、功能模块

3、具体功能界面

3.1、登录界面

登录使用到了JWT框架,部分代码如下:

from rest_framework_jwt.settings import api_settings
from rest_framework_jwt.views import JSONWebTokenAPIView, ObtainJSONWebToken, RefreshJSONWebToken, VerifyJSONWebToken
from datetime import datetime
from rest_framework.response import Response
from rest_framework import status

class MyJSONWebTokenAPIView(JSONWebTokenAPIView):
    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        print('user----------------', serializer)
        if serializer.is_valid():
            user = serializer.object.get('user') or request.user
            print(f'序列化之后的用户信息:--> {user}')
            token = serializer.object.get('token')
            response_data = jwt_response_payload_handler(token, user, request)
            response = Response(response_data)
            if api_settings.JWT_AUTH_COOKIE:
                expiration = (datetime.utcnow() +
                              api_settings.JWT_EXPIRATION_DELTA)
                response.set_cookie(api_settings.JWT_AUTH_COOKIE,
                                    token,
                                    expires=expiration,
                                    httponly=True)
            return response
        error_data = jwt_response_payload_error_handler(serializer, request)
        return Response(error_data, status=status.HTTP_200_OK)

 3.2、管理员端

3.2.1、用户管理

 3.2.2、信息管理

3.2.3、视频和文档管理
 

 3.3、学生端

3.3.1、首页

 3.3.2、课程信息

3.3.3、选课及推荐

3.3.4、视频播放及推荐
 

视频推荐使用基于用户的协同过滤推荐算法,部分代码如下:

def get_recommendations(student_id):
    # 获取所有用户的点击数据
    student_id = int(student_id)
    all_clicks = VideoClick.objects.all()
    # 创建用户-视频点击矩阵
    user_video_matrix = defaultdict(lambda: defaultdict(int))
    for click in all_clicks:
        user_video_matrix[click.student_id][click.video_id] += 1
    # 获取当前用户的点击向量
    target_user_clicks = user_video_matrix[student_id]
    print(f"Target User Clicks for student_id {student_id}: {target_user_clicks}")
    # 如果目标用户没有点击记录,则推荐最热门的视频
    if not target_user_clicks:
        print(f"No clicks found for student_id {student_id}. Recommending popular videos.")
        # 获取点击量最高的视频
        popular_videos = VideoClick.objects.values('video_id').annotate(click_count=Count('video_id')).order_by('-click_count')[:4]
        recommended_videos = [video['video_id'] for video in popular_videos]
    else:
        # 计算所有其他用户与当前用户的相似度
        def cosine_similarity(vec1, vec2):
            if len(vec1) == 0 or len(vec2) == 0:
                return 0
            vec1, vec2 = np.array(vec1), np.array(vec2)
            dot_product = np.dot(vec1, vec2)
            norm_a = np.linalg.norm(vec1)
            norm_b = np.linalg.norm(vec2)
            if norm_a == 0 or norm_b == 0:
                return 0
            return dot_product / (norm_a * norm_b)
3.3.5、PDF阅读下载功能

这里查看使用的是浏览器自带的PDF阅读功能。

3.4、老师端

3.4.1、学生名单

3.4.2、录入成绩
3.4.3、课程反馈 

4、源码获取方式

https://m.tb.cn/h.gT2gDUA?tk=fIrMWzBsric 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值