热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:进来看冰冰!用Python写了一个青年大学习提醒系统

篇首语:本文由编程笔记#小编为大家整理,主要介绍了进来看冰冰!用Python写了一个青年大学习提醒系统相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了进来看冰冰!用Python写了一个青年大学习提醒系统相关的知识,希望对你有一定的参考价值。







来源:CSDN


链接:https://blog.csdn.net/weixin_45304503/article/details/117730712




大家好,欢迎来到 Crossin的编程教室 !

今天给大家分享的这个开发案例,作者是一名班级团支书,每周都要催班上同学做青年大学习。于是,他就做了一个自动提醒的脚本,后来封装成了一个APP。

uniapp + flask 前后端分离

瞬间减少了日常的工作量,再也不怕忘记提醒了。而且看青年大学习(看冰冰lp)谁不喜欢呢?



进来看冰冰!用Python写了一个青年大学习提醒系统

呜呜呜冰冰怎么这么好看且有气质啊!!!!
呜呜呜wsl
进来看冰冰!用Python写了一个青年大学习提醒系统

为了让大家尽快学习到青年大学习!

话不多说,直接看代码吧!



1、flask后端部分


1.1 前情概要

脚本获取数据部分戳这里:

https://blog.csdn.net/weixin_45304503/article/details/114501006



1.2 具体细节


1.2.1 数据库部分

配置连接







































HOSTNAME = '127.0.0.1' # 这里改成你的mysql配置PORT = '3306' DATABASE = 'teenstudy'USERNAME = 'root'PASSWORD = 'root'db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format( USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE,)

class Config(object): SQLALCHEMY_DATABASE_URI = db_url SQLALCHEMY_TRACK_MODIFICATIOnS= False SQLALCHEMY_COMMIT_ON_TEARDOWN = True

app = Flask(__name__)CORS(app, supports_credentials=True)pymysql.install_as_MySQLdb()app.config.from_object(Config)db = SQLAlchemy(app)
manager = Manager(app) # 数据迁移Migrate(app, db) # 第一个参数是flask实例,第二个参数SQLAlchemy实例manager.add_command("db", MigrateCommand)
engin = create_engine(db_url) # 创建引擎Base = declarative_base(engin)Session = sessionmaker(engin)session = Session()

数据库的相关字段设置
































































# 用户模型class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) account = db.Column(db.String(18)) # 账号 add_time = db.Column(db.DateTime, index=True, default=datetime.datetime.now()) # 创建时间 email = db.Column(db.String(100)) # 邮箱 name = db.Column(db.String(16)) # 名字 province = db.Column(db.String(255)) # 省份 school = db.Column(db.String(255)) # 学校 college = db.Column(db.String(255)) # 学院 origirtion = db.Column(db.String(255)) # 组织 grade = db.Column(db.String(255)) # 年级 major = db.Column(db.String(255)) # 专业 count = db.Column(db.Boolean, default=False) # 最新一期青年大学习是否有做 history_count = db.Column(db.Integer, default=False) # 本季青年大学习做了多少次 role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), default=3) # 管理身份
def __repr__(self): return """%s""" % self.email

# 身份模型class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(8), unique=True) # 1、管理员, 2、团支书, 3、普通团员 users = db.relationship('User', backref='role')
def __repr__(self): return """ """ % (self.id, self.name)

# 青年大学习模型class TeenStudy(db.Model): __tablename__ = 'teenstudy' id = db.Column(db.Integer, primary_key=True) study_id = db.Column(db.String(255)) # 第几期,爬下日期 study_title = db.Column(db.String(255)) # 这一期的名字 add_time = db.Column(db.DateTime, index=True, default=datetime.datetime.now())
def __repr__(self): return """ add_time:%s)>""" % (self.id, self.study_id, self.study_title, self.add_time)

class admin(db.Model): # 管理员 __tablenaem__ = 'admin' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255)) password = db.Column(db.String(255)) add_time = db.Column(db.DateTime, index=True, default=datetime.datetime.now())
def __repr__(self): return """            add_time:%s)>""" % (self.id, self.name, self.password, self.add_time)


1.2.2 路由部分

首先是登陆,后台将模拟浏览器登陆到智慧团建,然后就获取到COOKIE,拿这个COOKIE去将requests请求到所对应的没做的名单。
































































@app.route('/login', methods=['GET''POST'])def login(): username = request.form.get("username") password = request.form.get("password") # print(username, password) COOKIE = GetCOOKIE(username, password) if COOKIE == "500": return { "code": "500", "msg": "发生了点错误,请稍后重试" } headers = { 'Host': 'm.fjcyl.com', 'Referer': 'http://m.fjcyl.com/logout', 'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 13_4_1 like Mac OS X) AppleWebKit/605.1.15 (Khtml, like Gecko) ' 'Mobile/15E148 MicroMessenger/7.0.12(0x17000c33) NetType/WIFI Language/zh_CN', 'COOKIE': COOKIE } GetSchoolInfo(headers) cate, infoDetail, reg = GetStuInfo(headers) if cate == 3: # 普通团员 if reg == 10001: return { "code": 200, "msg": 3, # 普通团员 "info": 10001, "infoDetail": infoDetail, } elif reg == 10002: return { "code": 200, "msg": 3, # 普通团员 "info": 10002, } elif cate == 2: # 团支书 DidNumListT = Parma(headers) # print("DidNumListT") # print(DidNumListT) if len(DidNumListT) == 0: return { "code": 200 } if reg == 10001: result = { "code": "200", "info": 10001, # 还没在数据库中存在 "msg": 2, # 团支书 "data": eval(DidNumListT), "infoDetail": infoDetail, } return result elif reg == 10002: result = { "code": "200", "msg": 2, # 团支书 "info": 10002, # 在数据库中不存在 "data": eval(DidNumListT) }            return result

找到名单之后去查询数据库,在数据库中拿到没做名单的邮箱。































@app.route('/init_email', methods=['GET', 'POST'])def init_email(): QQEmail = request.form.get("QQEmail") UserName = request.form.get("UserName") acctId = request.form.get("acctId") colName = request.form.get("colName") grade = request.form.get("grade") major = request.form.get("major") positiOnName= request.form.get("positionName") schoolName = request.form.get("schoolName") count = db.session.query(func.count(User.id)).filter(User.school == schoolName, User.college == colName, User.major == major, User.account == acctId).scalar() if count == 0: user = User(account=acctId, name=UserName, school=schoolName, college=colName, grade=grade, major=major, origirtion=positionName, email=QQEmail) db.session.add(user) db.session.commit() return { "msg": 200, "data": "success" } elif count != 0: return { "msg": 200, "data": 10001, # 已经存在了        }

然后就发送邮件,发送成功后,给前端返回一个成功。












































@app.route('/sendMail', methods=['GET', 'POST'])def sendMail(): # print("DidDoneLists") DidDOneLists= request.form.get("EmailList") DidDOneList= DidDoneLists.split(",") Email = [] count = 1 for k in DidDoneList: count += 1 if count == 2: Email.append(k) count = 0 print(Email) msg = MIMEText('青年大学习!不用回复!赶紧做!!') # 构造邮件,内容为青年大学习 msg["Subject"] = "青年大学习!!又是你!!!" # 设置邮件主题 msg["From"] = '辛苦勤劳艰苦奋斗的团支书' # 寄件者 msg["To"] = '未做人员' # 收件者 from_addr = '' password = '' smtp_server = 'smtp.qq.com' # smtp服务器地址 to_addr = Email # 收件人地址 try: # smtp协议的默认端口是25,QQ邮箱smtp服务器端口是465,第一个参数是smtp服务器地址,第二个参数是端口,第三个参数是超时设置,这里必须使用ssl证书,要不链接不上服务器 server = smtplib.SMTP_SSL(smtp_server, 465, timeout=2) server.login(from_addr, password) # 登录邮箱 # 发送邮件,第一个参数是发送方地址,第二个参数是接收方列表,列表中可以有多个接收方地址,表示发送给多个邮箱,msg.as_string()将MIMEText对象转化成文本 server.sendmail(from_addr, to_addr, msg.as_string()) server.quit() logging.info("EMAIL SUCCESS") return {"code": "200", "info": "success"} # print('success') except Exception as e: if e is None: # Send_Boss() logging.error("EMAIL FAIL") return {"code": "200", "info": "success"} else: print('Faild:%s' % e)            return {"code""500""info""fail"}


1.2.3 数据交换部分

由于使用的是前后端分离,所以要用json格式传送数据,然而json格式是要双引号进行传送的,而python是默认单引号的,所以要把python的单引号变双引号!!我是用正则来进行匹配替换的。








strinfo = re.compile("'") Num_Email = str(DidDoneNumList_Json)    Num_Email_Json = strinfo.sub('"', Num_Email)

进来看冰冰!用Python写了一个青年大学习提醒系统


2、uni-app前端部分

前端部分使用的是uni-app,主要是因为这个是跨平台的。
下载HBuilder X 编译器


2.1 登陆页面

进来看冰冰!用Python写了一个青年大学习提醒系统


2.2 提醒页面

进来看冰冰!用Python写了一个青年大学习提醒系统


2.3 效果演示

进来看冰冰!用Python写了一个青年大学习提醒系统

以后我们班成员都能好好看青年大学习了!!!
嘻嘻!!

进来看冰冰!用Python写了一个青年大学习提醒系统


3、结语

大家不要找我做什么自动看青年大学习了!!
这个不做!!!我不会做!也没必要做!!

这个只是为了让我们班的同学都能及时完成学习而已,没别的意思。

相关代码:

https://blog.csdn.net/weixin_45304503/article/details/114501006

如果文章对你有帮助,欢迎转发/点赞/收藏~










_往期文章推荐_











如需了解付费精品课程教学答疑服务


请在Crossin的编程教室内回复:
666


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
author-avatar
手机用户2602920567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有