【计算机专业学习委员必备自动化催作业通知】

本文介绍了一位计算机专业学生如何利用Zfile部署在阿里云服务器上,配合Python脚本监控作业提交情况,通过MySQL存储学生信息并自动发送邮件提醒未交作业的同学。文章详细描述了docker部署、mysql服务搭建以及Python脚本的编写过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

大家好!我是一名计算机专业的菜鸟,作为这个专业的学习委员,我觉得收电子版作业是一件非常麻烦的事情,作业实验科目也比较多,一到了要交实验报告的时候,我的QQ,微信都是他们发作业的消息,有时候可能还忘了收别人早就发给我的作业了,我就在想,有没一种收作业的软件或者网站,最好还能自动qq邮件提醒那些没交作业的同学,后来我了解到了一个开源的网盘叫做zfile,作为大学生有免费的10个月左右的阿里云服务器,领取之后就把这个项目部署到我的阿里云服务器,数据就放在我的某个目录下,通过写python程序监控该目录,没交作业的就自动发邮件去提醒。

网站大致就是如图:

在这里插入图片描述
服务器中的数据目录:

在这里插入图片描述

一、前期准备

一、准备一台云服务器,如果是大学生的话,阿里云免费送几个月的云服务器使用权,2核2G的完全够用了。
二、你需要了解到一些docker,mysql,linux的相关知识,通过docker可以快速部署服务。

zfile部署

zfile官网:https://docs.zfile.vip/
一、概述
基于 Java 的在线网盘程序,支持对接 S3、OneDrive、SharePoint、又拍云、本地存储、FTP 等存储源,支持在线浏览图片、播放音视频,文本文件等文件类型。
二、安装部署
在这之前你需要安装好了docker,如果想了解docker安装可以去看我以前的博客:https://blog.youkuaiyun.com/qq_62331653/article/details/135596921?spm=1001.2014.3001.5502

Docker 镜像托管在 DockerHub:https://hub.docker.com/r/zhaojun1998/zfile
[root@gang ~]# docker search zfile   #查看zfile的镜像仓库
[root@gang ~]# docker pull zhaojun1998/zfile   #拉取镜像
[root@gang ~]# docker images     #查看你的镜像

在这里插入图片描述

docker run -d --name=zfile --restart=always \
    -p 8080:8080 \
    -v /root/zfile/db:/root/.zfile-v4/db \
    -v /root/zfile/logs:/root/.zfile-v4/logs \
    -v /root/zfile/file:/data/file \
    zhaojun1998/zfile

zfile容器运行之后,可以通过阿里云的这个服务器ip地址访问,如果打不开的话,去阿里云网站上去把8080端口加入到安全组,这个时候就可以访问了,这个时候进行一系列的配置,你的本地数据目录填/data/zfile。
在这里插入图片描述
这样zfile服务算是搭建完成。

mysql服务搭建

[root@gang ~]# docker pull mysql:5.7   #拉取mysql:5.7的镜像
docker run -id --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7    #后台运行
docker exec -it mysql env LANG=C.UTF-8 /bin/bash   #进入容器

mysql搭建完成,需要在mysql中,建库建表来保存自己班上的学生信息。如果用代码连接不到数据库,同样也要去阿里云网站上去把3306端口加入到安全组

二、编写python脚本

在编写python脚本之前,我们需要设计如何写代码,如何取数据进行对比,数据库会保存班上的学生信息,例如学号,姓名,邮箱等等,在保存同学的数据目录下利用os.listdir(url)方法,列出当前的学生信息,然后与数据库进行对比,没有的就是没有交作业的,然后通过smtplib这个库中的方法给他发qq邮箱通知。

python代码

代码如下(示例):
需要哪些模块可以通过pip安装。

#! /usr/bin/python3.6
import mysql.connector
import os
import smtplib
from email.mime.text import MIMEText
def Mysql_part():
    mydb = mysql.connector.connect(
      host="ip地址",
      user="root",
      passwd="密码",
      port=3306,
      database="students"
    )
    mycursor = mydb.cursor()
    mycursor.execute("SELECT * FROM student")
    myresult = mycursor.fetchall()
    names = {}  #姓名qq字典
    for x in myresult:
        names[x[2]]=x[3]
    # print(names)
    return names
def view_current_file(url="/root/zfile/file"):   #存放学生作业数据的目录
    files = os.listdir(url)
    work_complete_num = 0    #作业完成总人数
    work_false = {}        #作业没完成的人
    for name in list(Mysql_part().keys()):
        exchange = False
        for file in files:
            if name in file:
                exchange = True
        if exchange==True:
            work_complete_num+=1
        else:
            work_false[name]=Mysql_part().get(name)
    return work_false,work_complete_num,     #返回没有交作业的人
# print(view_current_file())
def work_false_email(rece,name):
    sender = user = '309jjj@qq.com'  # 发送方的邮箱账号
    passwd = 'dddddddd'  # 授权码----->获取方法可以去百度,如何得到qq邮箱的授权码
    receiver = rece+"@qq.com"  # 接收方的邮箱账号,不一定是QQ邮箱
    # 纯文本内容
    msg = MIMEText(f'我说%s同学,你是不是还没交作业,你快去把作业交了!' % name, 'plain', 'utf-8')
    # From 的内容是有要求的,前面的abc为自己定义的 nickname,如果是ASCII格式,则可以直接写
    msg['From'] = '309hhhgff@qq.com'
    msg['To'] = receiver
    msg['Subject'] = '计科5班学委催作业通知'  # 点开详情后的标题
    try:
        # 建立 SMTP 、SSL 的连接,连接发送方的邮箱服务器
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
        # 登录发送方的邮箱账号
        smtp.login(user, passwd)
        # 发送邮件 发送方,接收方,发送的内容
        smtp.sendmail(sender, receiver, msg.as_string())
        print('邮件发送成功')
        smtp.quit()
    except Exception as e:
        print(e)
        print('发送邮件失败')

if __name__ == '__main__':
    work_false = view_current_file()
    for name in list(work_false[0].keys()):
        value = work_false[0].get(name)
        work_false_email(value,name)
    print("当前交作业的人数:",work_false[1])
    separator = ", "
    print(work_false[0])
    result = separator.join(list(work_false[0].keys()))
    result = "当前没交作业的名单是:" + result
    print(result)
    import subprocess
    os.system('chattr -i zfile/file/作业未交名单.txt')   #做这个设置的原因是我不允许该文件可以被任何人删除
    file_path = "/root/zfile/file/作业未交名单.txt"  # 替换为实际的文件路径
    content = "交作业人数:"+str(work_false[1])+"人\n当前没交作业人数:"+str(len(work_false[0]))+"人\n"+result
    # 使用 subprocess 执行 echo 命令将内容写入文件
    subprocess.run(["bash", "-c", f"echo '{content}' > {file_path}"])
    os.system('chattr +i zfile/file/作业未交名单.txt')

效果展示图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、总结

通过本次的这个小项目,我学习到了很多,比如咋用程序自动发邮箱,怎么让没交作业名单这个文件不允许被删除,咋用python脚本运行linux中的shell脚本等,但是这个脚本虽然基本实现了我的功能,但是正真用的时候,可能满足不了需求,场景也会在变,但还好我基本可以实现这些小功能,到时候在变的时候在慢慢改代码,我觉得通过自己的专业知识,解决到生活中的小问题,真的挺开心的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值