社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python写了一个青年大学习提醒系统

Python面试官 • 2 周前 • 93 次点击  

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:

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


创作前提:

本人是班级团支书,每周都要催班上同学做青年大学习,于是我做了一个自动提醒的脚本,后来封装成了一个APP。

uniapp+flask前后端分离

而且看青年大学习(看冰冰老婆 )

谁不喜欢呢?

1. 青年大学习与冰冰

呜呜呜冰冰怎么这么好看且有气质啊!!!!
呜呜呜wsl

为了让大家尽快学习到青年大学习!
话不多说,直接看吧!

2. flask后端部分

2.1 前景概要

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

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

2.2 具体细节

2.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()

数据库的相关字段设置

# 用户模型classUser(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

# 身份模型classRole(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)

# 青年大学习模型classTeenStudy(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)

classadmin(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)

2.2.3 路由部分

首先是登陆,后台将模拟浏览器登陆到智慧团建,然后就获取到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 resultelif 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()ifcount == 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'])defsendMail():# print("DidDoneLists")    DidDoneLists = request.form.get("EmailList")    DidDoneList = DidDoneLists.split(",")    Email = []    count = 1for k in DidDoneList:        count += 1if 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 isNone:# Send_Boss()            logging.error("EMAIL FAIL")return {"code""200""info""success"}else:            print('Faild:%s' % e)            return {"code""500""info""fail"}

2.2.2 数据交换部分

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

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

3. uni-app前端部分

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

3.1 登陆页面

3.2 提醒页面

3.3 效果演示

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

4. 结语

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

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

最后

点赞,点在看,谢谢~

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185110
 
93 次点击