KeyError: 'mail'
时间: 2024-03-16 16:37:54 浏览: 128
```python
import collections
def tree():
return collections.defaultdict(int)
some_dict = tree()
some_dict['colours']['favourite'] = "yellow"
```
相关问题
@app.route('/', methods=['GET','POST']) def index(): name = None form = NameForm() db.create_all() if form.validate_on_submit(): user = User.query.filter_by(username=form.name.data).first() if user is None: user = User(username=form.name.data) db.session.add(user) db.session.commit session['known'] = False if app.config['FLASKY_ADMIN']: send_email(app.config['FLASKY_ADMIN'], 'New User', 'mail/new_user', user=user) else: user = User(username=form.name.data) session['known'] = True session['name'] = form.name.data form.name.data='' return redirect(url_for('index')) send_email(['z_xinzheng@126.com'], 'Warnning', 1 , **kwargs) send_async_email(app, msg) return render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False)) File "C:\Users\DELL\Desktop\flasky\hello.py", line 114, in index if app.config['FLASKY_ADMIN']: KeyError: 'FLASKY_ADMIN' 127.0.0.1 - - [23/May/2023 19:39:40] "POST / HTTP/1.1" 500 -
这个错误看起来是因为在你的 Flask 应用中没有定义 `FLASKY_ADMIN` 配置变量。你可以检查一下你的配置文件或者在应用中定义这个变量。可以在配置文件中加入以下内容:
```
import os
class Config:
# ...
FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
# ...
```
或者在应用中直接定义:
```
app.config['FLASKY_ADMIN'] = 'your_admin_email@example.com'
```
记得将 `'your_admin_email@example.com'` 替换成你的管理员邮箱。这样,就可以通过电子邮件通知管理员了。
解释代码:public RespBean addLeave(AttdRecord attdRecord) { if (1 == attdRecordMapper.insert(attdRecord)) { AttdRecord leave = attdRecordMapper.getLeaveById(attdRecord.getId()); // 数据库记录发送的消息(消息落户) String msgId = UUID.randomUUID().toString(); MailLog maillog = new MailLog(); maillog.setMsgId(msgId); maillog.setLeaveId(attdRecord.getId()); maillog.setStatus(0); maillog.setRouteKey(MailConstants.MAIL_ROUTING_KEY_NAME); maillog.setExchange(MailConstants.MAIL_EXCHANGE_NAME); maillog.setCount(0); // 重试时间,加一分钟 maillog.setTryTime(LocalDateTime.now().plusMinutes(MailConstants.MSG_TIMEOUT)); maillog.setCreateTime(LocalDateTime.now()); maillog.setUpdateTime(LocalDateTime.now()); // 数据库插入数据 mailLogMapper.insert(maillog); rabbitTemplate.convertAndSend(MailConstants.MAIL_EXCHANGE_NAME, MailConstants.MAIL_ROUTING_KEY_NAME, leave, new CorrelationData(msgId)); return RespBean.success("申请成功!"); } return RespBean.error("申请失败!"); }
这段代码是一个添加请假记录的方法,并返回一个包含操作结果的 RespBean 对象。
方法的参数是一个 AttdRecord 对象,表示要添加的请假记录。在方法中,首先通过调用 `attdRecordMapper.insert(attdRecord)` 方法将请假记录插入到数据库中。如果插入成功,则继续执行下面的操作;否则直接返回一个失败的 RespBean 对象。
接下来,通过调用 `attdRecordMapper.getLeaveById(attdRecord.getId())` 方法获取刚插入的请假记录,用于后续的消息发送。然后,将消息落户(即将消息记录到数据库中),并生成一个唯一的消息 ID。这里使用了 UUID.randomUUID().toString() 方法生成消息 ID。
接着,创建一个 MailLog 对象,并将消息 ID、请假记录 ID、消息状态、路由键、交换机等信息设置到 MailLog 对象中。并将 MailLog 对象插入到数据库中。
最后,通过 RabbitMQ 的 `rabbitTemplate.convertAndSend()` 方法发送一条消息,并将请假记录作为消息体。这里使用了 MailConstants.MAIL_EXCHANGE_NAME 和 MailConstants.MAIL_ROUTING_KEY_NAME 分别表示消息的交换机和路由键。
如果消息发送成功,则返回一个成功的 RespBean 对象,否则返回一个失败的 RespBean 对象。
需要注意的是,这里使用了 RabbitMQ 实现消息的异步处理,将消息发送到 RabbitMQ 后立即返回,不需要等待消息的处理结果。同时,将消息记录到数据库中,以便在消息发送失败时进行重试。
阅读全文