Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统

这篇具有很好参考价值的文章主要介绍了Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

使用工具:

Python,PyQt ,Flask ,MySQL

注:制作重点在网页端,因此网页端的功能更全

WEB界面展示:

系统登录分为管理员,老师,学生3部分

管理员统一管理所有的账号信息以及登录信息

老师管理,添加,修改班级,学生的成绩信息

学生只能查看成绩信息,不能做出修改

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

 

 

PYQT界面展示:

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

 

数据库创建:

Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

项目目录

Project-

       - PYQT                                      # 存放软件端的代码文件(运行login.py启动程序)

                   Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

       - static                                          # 存放静态资源(图片等)

       - templates                                   # 存放网页端的代码

                   Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统,Python,pyqt,mysql,flask,python,数据可视化

       - app.py                                        # 启动网页端系统

       - student.sql                                 # 数据库文件

代码

简单放一个登录的代码

from flask import Flask, jsonify, render_template, request, redirect, url_for, session
import mysql.connector
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.use('agg')
from matplotlib.font_manager import FontProperties
from io import BytesIO
import base64
from flask import render_template_string
import os
from datetime import datetime
from collections import defaultdict



# 预设字体格式,并传给rc方法
font = {'family': 'SimHei', "size": 12}
matplotlib.rc('font', **font)  # 一次定义终身使用
# Set font properties for Chinese characters
font_prop = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf', size=12)



app = Flask(__name__)
app.secret_key = 'your_secret_key'  # Change this to a secure secret key

# Replace these placeholders with your database connection details
DB_HOST = 'localhost'
DB_USER = 'root'
DB_PASSWORD = '123456'
DB_DATABASE = 'Student'

def connect_to_database():
    try:
        connection = mysql.connector.connect(
            host=DB_HOST,
            user=DB_USER,
            password=DB_PASSWORD,
            database=DB_DATABASE
        )
        return connection
    except mysql.connector.Error as err:
        print(f"Error: {err}")
        return None

def save_login_record(connection, role, account):
    try:
        cursor = connection.cursor()
        login_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        query = f"INSERT INTO login_record (role, account, login_time) VALUES ('{role}', '{account}', '{login_time}')"
        cursor.execute(query)
        connection.commit()
    except mysql.connector.Error as err:
        print(f"Error: {err}")
    finally:
        cursor.close()


def check_admin_login(connection, table_name, account, password, role):

    try:

        if role == '管理员':
            table_name = 'admin'
            cursor = connection.cursor()
            print(table_name,account,password,role)
            query = f"SELECT * FROM {table_name} WHERE Mainid='{account}' AND password='{password}'"

            # Implement your database query logic here
            cursor.execute(query)
            result = cursor.fetchone()

        elif role == '老师':
            table_name = 'admin_teachers'
            # Check administrator login
            cursor = connection.cursor()
            print(table_name,account,password,role)
            query = f"SELECT * FROM {table_name} WHERE Teacherid='{account}' AND password='{password}'"

            # Implement your database query logic here
            cursor.execute(query)
            result = cursor.fetchone()


        elif role == '学生':
            table_name = 'admin_students'
            # Check administrator login
            cursor = connection.cursor()
            print(table_name,account,password,role)
            query = f"SELECT * FROM {table_name} WHERE Studentid='{account}' AND password='{password}'"

            # Implement your database query logic here
            cursor.execute(query)
            result = cursor.fetchone()

        if result:
            # Save login record in data_8
            save_login_record(connection, role, account)

        return bool(result)
    except mysql.connector.Error as err:
        print(f"Error: {err}")
        return False
    finally:
        cursor.close()

@app.route('/')
def index():
    return render_template('login.html')

@app.route('/login', methods=['POST'])
def login():
    account = request.form['account']
    password = request.form['password']
    role = request.form['role']

    connection = connect_to_database()
    if connection is None:
        return render_template('login_failed.html', message='Failed to connect to the database.')

    table_name = get_table_name(role)

    if check_admin_login(connection, table_name, account, password, role):
        session['role'] = role
        if role == '学生':
            session['account'] = account
            print("===================",session['account'])
        return redirect(url_for('admin_dashboard'))
    else:
        return render_template('login_failed.html', message='Invalid username or password.')

@app.route('/admin/dashboard')
def admin_dashboard():
    role = session.get('role')

    if role == '管理员':
        data = fetch_admin_data()
        data_1 = fetch_admin_teacher_data()
        data_2 = fetch_admin_student_data()
        data_8 = fetch_login_records()
        data_10 = populate_tree_model_10()
        return render_template('admin_dashboard.html', role=role, data=data, data_1=data_1, data_2=data_2, data_8 = data_8, data_10 = data_10)
    
    elif role == '老师':
        
        data_2 = fetch_admin_student_data()
        data_3 = populate_tree_model_2()
        data_4 = populate_tree_model_6()
        data_5 = populate_tree_model_4()
        data_6 = populate_tree_model_7()
        data_7 = populate_tree_model_5()
        data_9 = populate_tree_model_9()
        scatter_plot_files = show_images()
        data_10 = populate_tree_model_10()
        return render_template('teacher_dashboard.html',scatter_plot_files = scatter_plot_files, role=role, data_2=data_2, data_3=data_3, data_4=data_4, data_5=data_5, data_6=data_6, data_7=data_7, data_9=data_9, data_10 = data_10)
    
    elif role == '学生':
        account = session.get('account')
        data_3 = populate_tree_model_2()
        data_4 = populate_tree_model_6()
        data_5 = populate_tree_model_4()
        data_6 = populate_tree_model_7()
        data_7 = populate_tree_model_5()
        data_8 = show_info()
        print("===================----------------",session['account'])
        return render_template('student_dashboard.html', studentID=account, data_3=data_3, data_4=data_4, data_5=data_5, data_6=data_6, data_7=data_7, data_8=data_8)
    else:
        return redirect(url_for('index'))

# Add routes for other pages as needed

def get_table_name(role):
    # Implement logic to determine the table name based on the role
    if role == '管理员':
        return 'admin'
    elif role == '老师':
        return 'admin_teachers'
    elif role == '学生':
        return 'admin_students'
    else:
        return None

def fetch_login_records():
    data_8 = []
    try:
        connection = connect_to_database()
        if connection is None:
            return []

        cursor = connection.cursor()
        query = "SELECT * FROM login_record"
        cursor.execute(query)

        login_records = cursor.fetchall()

        # Convert rows to a list of dictionaries
        for row in login_records:
            data_8.append({
                'role': row[0],
                'account': row[1],
                'login_time': row[2]
            })

        return data_8
    except mysql.connector.Error as err:
        print(f"Error: {err}")
        return []
    finally:
        cursor.close()
        if connection:
            connection.close()

def fetch_admin_data():
    data = []
    try:
        # Connect to the MySQL database
        connection = mysql.connector.connect(
            host='localhost',
            user='root',
            password='123456',
            database='Student'
        )

        cursor = connection.cursor()

        # Execute a query to fetch data from the admin table
        query = "SELECT Mainid, Username, Password, Name FROM admin"
        cursor.execute(query)

        # Fetch all rows from the result
        rows = cursor.fetchall()

        # Convert rows to a list of dictionaries
        for row in rows:
            data.append({
                'Mainid': row[0],
                'Username': row[1],
                'Password': row[2],
                'Name': row[3]
            })

    except mysql.connector.Error as err:
        print(f"Error: {err}")

    finally:
        # Close the cursor and connection
        cursor.close()
        connection.close()

    return data


百度云链接:

链接:https://pan.baidu.com/s/13HtbUm0Wwd0RT_cY61M57A?pwd=o102 
提取码:o102 
--来自百度网盘超级会员V5的分享

系统可能还存在某些不完善的地方,欢迎讨论文章来源地址https://www.toymoban.com/news/detail-830713.html

到了这里,关于Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【项目案例】前后端分离项目 【Web图书管理系统 】SpringBoot + Vue + Element UI + Mysql

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月07日
    浏览(36)
  • Vue 和 Flask 前后端分离教程(一)

    在本教程中,我们将学习如何使用 Vue.js(前端框架)和 Flask(后端框架)构建一个简单的前后端分离应用。本教程假设你对 HTML、CSS 和 JavaScript 有基本了解。让我们开始吧! 如果对Flask和Vue还不太熟悉,可以选择查看博主之前的教学文章: Flask 基础教学(一) Flask基础教学

    2024年04月25日
    浏览(26)
  • 一个月学通Python(二十二):中间件应用及前后端分离开发入门(Web开发)

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 之前我们已经实现了用户必须登录才能投票的限制,但是一个新的问题

    2024年02月16日
    浏览(34)
  • 基于JAVA+Springboot+Thymeleaf前后端分离项目:在线教育视频点播学习系统设计与实现

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。 项目配有对应开发文档、

    2024年02月19日
    浏览(33)
  • python Flask web项目uwsgi + nginx部署

    略 2.1安装vertualenv 2.2创建虚拟环境 创建保存环境的目录: 创建虚拟环境: 查看虚拟环境: 2.3激活虚拟环境 activiate是激活虚拟环境的命令脚本,在虚拟环境的bin目录下 执行activate激活环境 3.1安装uwsgi 激活虚拟环境,安装uwsgi 3.2基于uwsgi运行flask项目 3.2.1命令的方式 3.2.2配置文

    2024年02月10日
    浏览(35)
  • FLASK+VUE--前后端分离(三)- VUE+Element-UI搭建登陆页面且能够正常登陆

    FLASK+VUE–前后端分离(一)- Flask基础讲解之路由、视图函数及代码实现 FLASK+VUE–前后端分离(二)- VUE基础安装及项目的简易介绍 FLASK+VUE–前后端分离(三)- VUE+Element-UI搭建登陆页面且能够正常登陆 FLASK+VUE–前后端分离(四)- VUE+Element-UI简单搭建主页布局 FLASK+VUE–前后端

    2023年04月15日
    浏览(30)
  • 使用IIS服务器部署Flask python Web项目

    参考文章 参考文章 将Flask应用程序部署到IIS服务器上需要一些步骤,因为IIS是为.NET应用程序设计的。要将Flask Python Web项目部署到IIS服务器,您需要使用一个称为\\\"FastCGI\\\"的桥接工具来连接IIS和Python应用程序。以下是将Flask应用程序部署到IIS服务器的一般步骤: 安装IIS和FastCG

    2024年04月16日
    浏览(42)
  • python Web开发 flask轻量级Web框架实战项目--学生管理系统

     上次发的一篇文章,有很多朋友私信我要后面的部分,那咱们就今天来一起学习一下吧,因为我的数据库这门课选中的课题是学生管理系统,所以今天就以这个课题为例子,从0到1去实现一个管理系统。数据库设计部分我会专门出一个博客的,敬请期待吧~~~ 介如很多朋友问

    2024年02月16日
    浏览(38)
  • 【Python】Web学习笔记_flask(3)——上传文件

    用GET、POST请求上传图片并呈现出来 首先还是创建文件上传的模板 然后需要定义几个函数: upload():路由函数,接收GET请求时,显示模板文件内容,接收post请求时,上传图片 allowed_file():检测上传的文件是否满足设置的类型 random_file():为上传的文件重新创建随机的不重复文

    2024年02月14日
    浏览(32)
  • 【Python】Web学习笔记_flask(4)——钩子函数

    钩子函数可以用来注册在请求处理的不同阶段执行出 Flask的请求钩子指的是在执行视图函数前后执行的一些函数, 之前是有4种,但是  before_first_request已经被删除了,使用时会报错 before_request:在每次请求前执行,比如校验权限,也可以用来记录用户最后的在线时间 after_r

    2024年02月14日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包