大家,我又来了!
上一个问题我提到过,要用BeeWare开发一个答题游戏,必不可少的便是登陆咯,于是我编了一个邮箱验证码程序,但是只有获取验证码的按钮被触发后验证码才会更新,这是其中一个问题;
第二个问题,我想实现在获取验证码的按钮被触发后60秒内不能重新获取(也就是不可用)并在60秒的不可用时间里刷新验证码。我用的是time.sleep(60),但是执行后会显示未响应,一直到60秒过后才可以输入验证码,但这时获取验证码的按钮已经可用了。所以,我希望大家帮帮我解决问题,蟹蟹!
现将需要各位朋友帮忙改进的代码放在下方:
"""
My first application
"""
from email.mime.text import MIMEText
import toga
import datetime
import smtplib
import random
from toga.style import Pack
from toga.style.pack import COLUMN, CENTER
import time
from time import sleep
class mail(toga.App):
def __init__(
self,
formal_name=None,
app_id=None,
app_name=None,
id=None,
icon=None,
author=None,
version=None,
home_page=None,
description=None,
startup=None,
windows=None,
on_exit=None,
factory=None,
):
super().__init__(formal_name, app_id, app_name, id, icon, author, version, home_page, description, startup,
windows, on_exit, factory)
self.content = None
self.to_email_address = None
self.headers = None
self.title_name = None
self.main_box = None
def startup(self):
"""
Construct and show the Toga application.
Usually, you would add your application to a main content box.
We then create a main window (with a name matching the app), and
show the main window.
"""
self.main_box = toga.Box(style=Pack(direction=COLUMN))
self.to_email_address = toga.TextInput(placeholder='请输入邮箱地址...', style=Pack(padding_top=10))
self.veco=toga.TextInput(placeholder='请输入验证码...',style=Pack(padding_top=10))
self.ve=toga.Button('获取验证码', style=Pack(padding_top=5), on_press=self.send_email)
self.main_box.add(
toga.Label('发送验证码(须有网或流量)', style=Pack(text_align=CENTER, padding_top=5)),
self.to_email_address,
self.veco,
self.ve,
toga.Button('登录', style=Pack(padding_top=5), on_press=self.aa)
)
self.main_box.style.update(padding=10)
self.main_window = toga.MainWindow(title='e-mail')
self.main_window.content = self.main_box
self.main_window.show()
# @property
def send_email_method(self, msg_from, password_, msg_to, msg_head, content_):
"""
邮箱发送方式
:return:
"""
msg = MIMEText(content_)
msg['subject'] = msg_head
msg['From'] = msg_from
try:
s_ = smtplib.SMTP_SSL('smtp.qq.com', 465)
s_.login(user=msg_from, password=password_)
s_.sendmail(msg_from, msg_to, msg.as_string())
msg = '邮件发送成功'
except Exception as e:
msg = str(e)
finally:
s_.quit()
return msg
def send_email(self, widget):
title_name = '验证码(若不是您本人操作,请忽略此邮件)'
global cn
cn=str(random.randint(1000,9999))
content=cn
msg_from_self = '2080108220@qq.com'
msg_to_self = self.to_email_address.value
msg_head_self = title_name
password_self = 'pkjsaajuwfezbchi'
if not msg_to_self:
self.main_window.info_dialog('温馨提示', '邮件地址不能为空 ~')
return
now_runtime = datetime.datetime.now().strftime('%Y-%H-%D %H:%M:%S')
content_self = '发送时间' + now_runtime + ',' +'您的验证码是'+','+content
try:
self.send_email_method(msg_from_self, password_self, msg_to_self, msg_head_self, content_self)
self.main_window.info_dialog('温馨提示', '验证码发送成功!')
except smtplib.SMTPException as e:
self.main_window.error_dialog('温馨提示', '验证码发送失败 ~')
self.ve.enabled=False
time.sleep(60)
self.ve.enabled=True
def aa(self,widget):
if self.veco.value=='':
pass
elif self.veco.value==cn:
time.sleep(2)
self.main_window.info_dialog('温馨提示', '登录成功!')
self.veco.value=''
else:
time.sleep(2)
self.main_window.error_dialog('温馨提示','登录失败...')
self.veco.value=''
def main():
return mail()
注意:这是用BeeWare开发的哦!