Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

这篇具有很好参考价值的文章主要介绍了Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-Python-006

一,环境介绍

语言环境:Python3.7

数据库:Mysql: mysql5.7

开发工具:IDEA 或其它

开发技术:Django框架,前端使用Layui+html

二,项目简介

本项目基于Python语言开发实现,使用了Django WEB框架开发,前端使用Layui+HTML进行页面开发,提供了登录验证码和图形报表统计,以及数据导入导出的基本功能。

系统的用户角色可以灵活的自定义实现,目前设定的有管理员、班主任和普通用户等,可以根据需求自定义角色和权限,系统权限分为菜单级和按钮级,控制的十分细致,完全根据需要来控制对某些数据的增删改查操作,并根据需要给相应的用户授予相应的权限。

系统的主要功能模块包含:

用户管理:完成对用户信息的新增、查询和删除、导出等操作。

角色管理:完成对角色信息的新增、查询和编辑、删除、导出等操作。为角色授于不同的权限功能。

权限管理:完成对权限信息的新增、查询和删除、导出和启用等操作。

日志管理:主要对用户的操作日志进行查看和删除操作。

学校管理:完成对学校信息的新增、查询和删除操作。

年级管理:完成对年级信息的新增、查询和删除操作。

班级管理:完成对班级信息的新增、查询和删除操作。

课程管理:完成对课程信息的新增、查询和删除操作。

学生管理:完成对学生信息的新增、查询和删除操作,并可以进行批量导入和导出。

成绩录入:为每个学生进行成绩录入。

班级成绩:查询统计各学校各班级各学科的参考人数及各分数段的人数。

学生成绩:对所有学生的成绩信息进行管理和数据导入等操作。

数据统计:通过Echart图形报表完成相关数据统计。

个人资料修改:完成个人资料和密码的修改操作。

三,系统展示

用户登录:

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

后台管理首页:

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

用户管理:

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

角色管理:

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

分配权限:

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

权限管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

日志管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

学校管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

年级管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

班级管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

课程管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

学生管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

成绩录入

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

班级成绩统计

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

学生成绩管理

Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

四,核心代码展示

# encoding:utf-8
import json
from io import BytesIO
from django.contrib.auth import logout
from django.contrib.auth.hashers import check_password, make_password
from django.http import JsonResponse, HttpResponse
from django.shortcuts import render, redirect

# Create your views here.
from common.API import res_josn_data
from common.API.auth import add_auth_session, login_required
from common.API.captcha import make_captcha
from common.API.code import check_code
from common.API.echarts import echarts_pie, json_response
from common.API.log import login_log
from login.models import Logo, Log
from sys_manage.models import User, Role, Power, RolePower
from student_score import models as m_model


def index(request):
    if request.method == 'GET':
        return redirect('/login')


def home(request):
    if request.method == 'GET':
        return render(request, 'login/home.html')


def login(request):
    if request.method == 'GET':
        return render(request, 'login/login.html')
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        code = request.POST.get('captcha')

        if not username or not password or not code:
            return res_josn_data.fail_api(msg="用户名或密码没有输入")
        s_code = request.session.get("code", None)
        print('验证码:', code, s_code)
        user_ip = request.META.get('REMOTE_ADDR')
        print(user_ip)

        request.session["code"] = None

        if not all([code, s_code]):
            # login_log(request, uid=username, is_access=False, desc='验证码错误,请刷新验证码')
            return res_josn_data.fail_api(msg="验证码错误,请刷新验证码!")

        if code != s_code:
            login_log(request, uid=username, is_access=False, desc='验证码错误')
            return res_josn_data.fail_api(msg="验证码错误")

        user = User.objects.filter(id_number=username).first()

        if user is None:
            login_log(request, uid=username, is_access=False, desc='用户不存在')
            return res_josn_data.fail_api(msg="用户不存在!")

        if user.user_status == 0:
            login_log(request, uid=user.id_number, is_access=False, desc='用户被禁用')
            return res_josn_data.fail_api(msg="用户被禁用!")

        if username == user.id_number and check_password(password, user.id_password):
            # 设置session过期时间
            request.session.set_expiry(60 * 60 * 2)
            # 登录
            request.session["user_id"] = user.id_number
            request.session["user_name"] = user.user_name
            request.session["role_id"] = user.role_id
            request.session["role_des"] = user.role_des
            request.session["id"] = user.id
            # 学校名称
            request.session["department"] = user.department

            # 年级
            request.session["position"] = user.position
            # 科目
            request.session["email"] = user.email
            # 记录登录日志
            login_log(request, uid=user.id_number, is_access=True, desc='登录成功')
            # 存入权限
            add_auth_session(request)

            return res_josn_data.success_api(msg="登录成功")

        else:
            login_log(request, uid=user.id_number, is_access=False, desc='密码错误')
            return res_josn_data.fail_api(msg="密码错误")
def image_code(request):
    """ 生成图片验证码 """

    # 调用pillow函数,生成图片
    img, code_string = check_code()

    # 写入到自己的session中(以便于后续获取验证码再进行校验)
    request.session['image_code'] = code_string
    # 给Session设置60s超时
    request.session.set_expiry(60)

    stream = BytesIO()
    img.save(stream, 'png')
    return HttpResponse(stream.getvalue())


def get_captcha(request):
    return make_captcha(request)


def login_in(request):
    user_id = request.session.get('user_id')
    if user_id:
        return render(request, "login/index.html", {'user_id': user_id})


def login_out(request):
    user_id = request.session.get('user_id')
    login_log(request, uid=user_id, is_access=True, desc='退出登录')
    logout(request)
    return redirect('/login')


@login_required
def web_menu(request):
    home_info = Logo.objects.filter(type='0').first()
    logo_info = Logo.objects.filter(type='1').first()
    title_info = Logo.objects.filter(type='2').first()
    menu_info = Power.objects.filter(type=0).order_by('sort')  # 目录
    # 查询权限ID
    menu_id = RolePower.objects.values_list('power_id').filter(role_id=request.session.get('role_id'))
    permission_id = [i[0] for i in menu_id]
    print(f'当前用户权限ID:{permission_id}')

    menu_data = {
        "homeInfo": {
            "title": f"{home_info.name}",
            "href": f"{home_info.url}"
        },
        "logoInfo": {
            "title": f"{logo_info.name}",
            "image": f"{logo_info.icon}",
            "href": f"{logo_info.url}"
        },
        "menuInfo": [
            {
                "title": f"{title_info.name}",
                "icon": f"{title_info.icon}",
                "href": f"{title_info.url}",
                "target": "_self",
                "child": []
            }
        ]
    }
    for item in menu_info:
        if item.id in permission_id:
            menu_data["menuInfo"][0]["child"].append({
                "title": f"{item.name}",
                "icon": f"{item.icon}",
                "href": f"{item.code}",
                "target": "_self",
                "child": []
            })
            # 查询子菜单
            sub_menu_info = Power.objects.filter(parent_id=item.id).order_by('sort')
            for sub_item in sub_menu_info:
                if sub_item.id in permission_id:
                    menu_data["menuInfo"][0]["child"][-1]["child"].append({
                        "title": f"{sub_item.name}",
                        "icon": f"{sub_item.icon}",
                        "href": f"{sub_item.code}",
                        "target": "_self"
                    })

    return JsonResponse(menu_data, safe=False)


@login_required
def echarts(request):
    if request.method == 'POST':
        n_type = ['用户', '角色', '权限', '日志']
        user_count = User.objects.count()
        role_count = Role.objects.count()
        role_power_count = RolePower.objects.count()
        log_count = Log.objects.count()
        data_list = [user_count, role_count, role_power_count, log_count]
        title = '1.数量统计'
        c = echarts_pie(n_type, data_list, title)
        return json_response(json.loads(c))


@login_required
def user_setting(request):
    if request.method == 'GET':
        return render(request, "login/user_setting.html")
    if request.method == "POST":
        post_data = request.POST
        print(post_data)
        field_user_id = post_data['userID']
        field_name = post_data['userName']
        field_dep = post_data['department']
        field_pos = post_data['position']
        field_email = post_data['email']
        update_dict = {
            'user_name': field_name,
            'department': field_dep,
            'position': field_pos,
            'email': field_email
        }
        User.objects.filter(id_number=field_user_id).update(**update_dict)
        return res_josn_data.success_api(msg=f'用户:{field_user_id} 更新成功')


@login_required
def user_info_query(request):
    data_list = []
    post_data = request.POST
    print('AJAX数据:', post_data)
    login_id = post_data['login_id'].strip()
    user_info = User.objects.filter(id_number=login_id).first()
    role_info = Role.objects.filter(role_value=user_info.role_id).first()

    return res_josn_data.user_setting_api(login_id, user_info.user_name, user_info.department, user_info.position,
                                          role_info.name, user_info.email, data_list)


@login_required
def user_password(request):
    if request.method == 'GET':
        return render(request, "login/user_password.html")
    if request.method == "POST":
        post_data = request.POST
        print(post_data)
        login_id = post_data['login_id'].strip()
        old_password = post_data['Param[old_password]']
        new_password = post_data['Param[new_password]']
        again_password = post_data['Param[again_password]']
        user_obj = User.objects.filter(id_number=login_id).first()
        if not user_obj:
            return res_josn_data.fail_api(msg="用户不存在!")
        if not check_password(old_password, user_obj.id_password):
            return res_josn_data.fail_api(msg="旧密码错误!")
        if new_password != again_password:
            return res_josn_data.fail_api(msg="两次密码不一致!")
        User.objects.filter(id_number=login_id).update(**{'id_password': make_password(new_password)})
        return res_josn_data.success_api(msg="修改成功!")


# def page_not_found(request, exception):
#     return render(request, "errors/404.html", exception)
#
#
# def page_error(request):
#     return render(request, "errors/500.html")
# encoding:utf-8
import json

from django.contrib.auth.hashers import make_password
from django.core.paginator import Paginator
from django.shortcuts import render
from student_score import models as m_model
# Create your views here.

from common.API import res_josn_data
from common.API.auth import login_required, authorize
from sys_manage.models import User, Role


@login_required
def user_manage(request):
    return render(request, 'sys_manage/user_manage/user_main.html')


@login_required
def user_query(request):
    data_list = []
    page = request.POST.get('page', 1)
    limit = request.POST.get('limit', 10)
    post_data_str = request.POST.get('Params', None)

    if post_data_str is None:
        user_obj = User.objects.all().order_by('id')
        # return res_josn_data.table_api(data=data_list, count=0)
    else:
        post_data = json.loads(post_data_str)
        id_number = post_data['idNumber']
        user_name = post_data['userName']
        user_dep = post_data['dep']
        user_pos = post_data['position']
        user_status = post_data['status']
        user_role = post_data['role']

        filters = {}  # 查询参数构造
        # model或数据库对应字段
        orm_field = ['__gt', '__gte', '__lt', '__lte', '__exact', '__iexact', '__contains', '__icontains',
                     '__startswith', '__istartswith', '__endswith', '__iendswith', '__range', '__isnull', '__in']
        filed_dict = {0: 'id_number', 1: 'user_name', 2: 'department', 3: 'position', 4: 'user_status', 5: 'role_id'}
        param_list = [id_number, user_name, user_dep, user_pos, user_status, user_role]

        for i in range(len(param_list)):
            if param_list[i] not in (None, ''):
                db_field = filed_dict[i] + orm_field[7]
                filters[db_field] = param_list[i]

        print('filters:', filters)

        user_obj = User.objects.filter(**filters).order_by('id')
    page_data = Paginator(user_obj, limit).page(page)

    # 序号
    count = (int(page) - 1) * int(limit)

    for item in page_data:
        count += 1
        item_data = {
            "id": count,
            "fieldID": item.id,
            "userID": item.id_number,
            "name": item.user_name,
            "department": item.department,
            "position": item.position,
            "email": item.email,
            "status": item.user_status,
            "role": item.role_des,
        }
        data_list.append(item_data)

    return res_josn_data.table_api(count=len(user_obj), data=data_list)


@authorize(power='user:add', log=True)
def user_add(request):
    if request.method == 'GET':
        return render(request, 'sys_manage/user_manage/user_add.html')
    if request.method == 'POST':
        post_data = request.POST
        print(request.POST)
        user_id = post_data['userID']
        user_password = post_data['password']
        user_name = post_data['userName']
        user_dep = post_data['department']
        user_position = post_data['position']
        user_email = post_data['email']
        user_enable = post_data['enable']
        role_value = post_data['role']

        user_password_sha256 = make_password(user_password, salt=None, hasher='default')
        role_obj = Role.objects.filter(role_value=role_value).first()

        new_obj = User(
            id_number=user_id,
            id_password=user_password_sha256,
            user_name=user_name,
            department=user_dep,
            position=user_position,
            role_id=role_value,
            role_des=role_obj.name,
            user_status=user_enable,
            email=user_email,
        )
        new_obj.save()
        return res_josn_data.success_api(msg=f'用户:{user_name} 添加成功')


@login_required
def user_role_query(request):
    if request.method == 'POST':
        data_list = []
        role_data = Role.objects.all()
        for item in role_data:
            item_data = {
                "roleID": item.role_value,
                "roleName": item.name
            }
            data_list.append(item_data)
        print(data_list)
        return res_josn_data.table_api(data=data_list, count=len(role_data))
def school_query(request):
    if request.method == 'POST':
        data_list = []

        school_data = m_model.College.objects.all()
        for item in school_data:
            item_data = {
                "schoolID": item.id,
                "schoolName": item.name
            }
            data_list.append(item_data)
        return res_josn_data.table_api(data=data_list, count=len(school_data))

@authorize(power='user:delete', log=True)
def user_delete(request):
    if request.method == 'POST':
        post_data = request.POST
        print('AJAX数据:', post_data)
        db_id = post_data['fieldID']
        user_name = post_data['name']
        User.objects.filter(id=db_id).delete()
        return res_josn_data.success_api(f'用户:{user_name} 删除成功')
    else:
        return res_josn_data.fail_api(msg='请求权限不够!')


@authorize(power='user:delete', log=True)
def user_multi_delete(request):
    if request.method == 'POST':
        user_list = []
        post_data_str = request.POST.get('Params', None)
        post_data = json.loads(post_data_str)
        for item in post_data:
            db_id = item['fieldID']
            user_name = item['name']
            User.objects.filter(id=db_id).delete()
            user_list.append(user_name)
        return res_josn_data.success_api(f'用户:{user_list} 删除成功')


@login_required
def user_cell_edit(request):
    # 前端字段和数据库字段对应dict
    filed_dict = {
        'userID': 'id_number',
        'name': 'user_name',
        'department': 'department',
        'position': 'position',
        'email': 'email',
    }
    if request.method == 'POST':
        post_data = request.POST
        print('AJAX数据:', post_data)
        field_name = post_data['field']
        field_value = post_data['value']
        field_id = post_data['dbID']
        User.objects.filter(id=field_id).update(**{filed_dict[field_name]: field_value})
        return res_josn_data.success_api(f'更新成功')


@login_required
def user_role_edit(request):
    if request.method == 'GET':
        return render(request, 'sys_manage/user_manage/user_role_edit.html')
    if request.method == 'POST':
        post_data = request.POST
        print(post_data)
        user_id = post_data['userID']
        role_id = post_data['role']
        role_obj = Role.objects.filter(role_value=role_id).first()
        update_dict = {
            'role_id': role_id,
            'role_des': role_obj.name
        }
        User.objects.filter(id_number=user_id).update(**update_dict)
        return res_josn_data.success_api(msg=f'{user_id} 角色更新成功')


@authorize(power='user:enable', log=True)
def user_enable(request):
    if request.method == 'POST':
        post_data = request.POST
        print('AJAX数据:', post_data)
        field_id = post_data['userID']
        enable_value = post_data['enableValue']  # 0禁用 1启用
        enable_dict = {'enable': 1, 'disable': 0}
        enable_dict_cn = {'enable': '启用', 'disable': '禁用'}
        role_obj = User.objects.filter(id=field_id)
        role_obj.update(**{'user_status': enable_dict[enable_value]})
        return res_josn_data.success_api(msg=f'{role_obj[0].user_name} {enable_dict_cn[enable_value]}成功')

五,项目总结

本次基于Python开发实现的学生成绩管理系统,也可作为学生管理系统使用,题目根据需要可以更改,功能实现较为完整,界面设计美观大方,适合作为毕业设计和课程设计使用。文章来源地址https://www.toymoban.com/news/detail-496019.html

到了这里,关于Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 100套基于Python的毕业设计-Django项目实战(附源码+论文+演示视频)

    大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦。 🧡今天给大家分享100+基于Python和Django的毕业设计,这些项目都经过精心挑选,涵盖了不同的实战主题和用例,可做毕业设计和课程设计参考。 ✍️除了源码,对于大部分项目实现的功能都有相应的介绍,并且配

    2024年02月08日
    浏览(142)
  • 基于Python+Django的毕业设计-web渗透测试工具(附源码+论文)

    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。 🎀 当前专栏:基于Python的毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 💞微信小程序毕业设计 🎀 安卓app毕业设计 🌎Java毕业设计 https://download.csdn.net/download/m0_46388260/87891131 本次通过渗透测试的方式可以进行模拟

    2024年01月16日
    浏览(43)
  • 【毕业设计/课程设计】基于android的订餐系统设计与实现(源码+文章) 含Web管理端 安卓外卖点餐

    1、数据库:MySQL 2、开发工具 安卓端:android studio 管理后端:Idea、Eclipse、MyEclipse等Java开发工具均可 安卓端采用android studio工具开发,管理后端采用Java语言,MySQL数据库,开发框架是SpringBoot+VUE       利用网络管理各行各业的业务操作已经成为必然趋势。菜品通过网络进行销

    2024年02月04日
    浏览(62)
  • 【毕业设计/课程设计】基于微信的自助点餐小程序设计与实现(源码+文章) 含Java Web管理端

    1、数据库:MySQL 2、开发工具 微信端:微信开发工具 管理后端:Idea、Eclipse、MyEclipse等Java开发工具均可 3、服务器:Tomcat系列均可 微信端采用微信开发者工具开发,管理后端采用Java语言,MySQL数据库,开发框架是SSM         传统的点餐模式主要是通过人们到指定地点以及在

    2024年02月04日
    浏览(50)
  • (赠源码)Python+Django+MYSQL超市管理系统的设计与实现26073-计算机毕业设计

    摘要 随着小超市规模的发展不断扩大,商品数量急剧增加,有关商品的各种信息量也成倍增长。超市时时刻刻都需要对商品各种信息进行统计分析。而大型的超市管理系统功能过于强大而造成操作繁琐降低了小超市的工作效率。 超市管理系统是市场上最流行的超市上常用的

    2024年02月04日
    浏览(53)
  • 毕业设计:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

    毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅 感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。

    2024年01月19日
    浏览(50)
  • 【毕业课程设计】基于PLC的立体仓库控制系统设计

    一、总体方案选择 1.1立体仓库模型的建立 自动化立体仓库是机械和电气、强电控制和弱电控制相结合的产品。它主要 由货物储存系统、货物存取和传送系统、控制和管理等三大系统所组成。货物存 储系统由立体货架的货格(托盘或货箱)组成,货架按照排、列、层组合而成

    2024年02月05日
    浏览(59)
  • 人工智能课程设计毕业设计——基于机器学习的贷款违约预测

    摘  要 随着人们对于贷款的需求量不断增加以及我国债券市场和信贷市场违约事件频发,商业银行不良资产率与用户个人贷款违约风险成为了政府和银行业关心的核心问题,而对信用贷款违约风险进行有效评估和测度也成为了商业银行提高其经营管理水平的核心要务。 本小

    2024年04月16日
    浏览(71)
  • 【毕业设计_课程设计】基于Spark网易云音乐数据分析

    基于Spark网易云音乐数据分析 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 包含爬虫,Scala代码,Spark,Hadoop,ElasticSearch,logstash,Flume,echarts,log4j emotional_analysis_spider 爬虫模块 emotional_analysis_web 数据处理模块(Scala代码) emotional_analysis_recommend 推荐模块目前还未开发 emot

    2024年02月06日
    浏览(51)
  • 人工智能课程设计毕业设计——基于机器学习的手写汉字识别系统

    《机器学习》课程设计实验 报告 题目:基于深度学习的手写汉字识别系统 目录 基于深度学习的手写汉字识别系统实验报告 1. 绪论 ............................................................................................................................................................ 1 1.1 研究背景及意义..

    2024年02月20日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包