当数据库为空时,它应该命中第一个if条件并返回错误,但由于某种原因,它会执行其余部分。即使我注解掉if语句后的所有代码,它也会执行所有代码并返回ICS文件。
不知何故,if之后的其余代码被保存在其他地方,或者ICS文件被存储在某个地方,每次都被返回。
from flask import Flask, request, Response, send_file, make_response
from flask_restx import Api, Resource, fields, reqparse
from ics import Calendar, Event
@api.route('/calendar')
class ICSCalendar(Resource):
@api.response(200, 'Successfully Retrieved Calendar')
@api.response(404, 'No Events Found')
@api.doc(description="Get all events in an ``ICS`` calendar format")
def get(self):
'''Get all events in an ICS calendar format'''
events = execute_query("SELECT * FROM events")
print(events)
if not events:
return {"Error": "No events found"}, 404
cal = Calendar()
for row in events:
event = Event()
event.name = row[1]
event.begin = pytz.timezone('Australia/Sydney').localize(datetime.combine(datetime.strptime(row[2], '%Y-%m-%d').date(), datetime.strptime(row[3], '%H:%M:%S').time()))
event.end = pytz.timezone('Australia/Sydney').localize(datetime.combine(datetime.strptime(row[2], '%Y-%m-%d').date(), datetime.strptime(row[4], '%H:%M:%S').time()))
event.location = f"{row[5]}, {row[6]}, {row[7]} {row[8]}"
event.description = row[9]
event.last_modified = pytz.utc.localize(datetime.strptime(row[10], '%Y-%m-%d %H:%M:%S'))
cal.events.add(event)
# Write the ICS data to an in-memory buffer
buffer = StringIO(cal.serialize(), newline=None)
buffer.seek(0)
# Create a response with the ICS data as an attachment
response = make_response(send_file(buffer, as_attachment=True, attachment_filename='calendar.ics', mimetype='text/calendar'))
response.headers['Content-Disposition'] = 'attachment; filename=calendar.ics'
buffer.truncate(0)
return response`
@api.route('/calendar')
class ICSCalendar(Resource):
@api.response(200, 'Successfully Retrieved Calendar')
@api.response(404, 'No Events Found')
@api.doc(description="Get all events in an ``ICS`` calendar format")
def get(self):
'''Get all events in an ICS calendar format'''
events = execute_query("SELECT * FROM events")
print(events)
if not events:
return {"Error": "No events found"}, 404
我把数据库设置为空,只使用上面的代码,但它返回一个ICS文件。
我只希望它在事件中有内容时返回ICS文件。
有没有人知道为什么这是返回ICS数据时,它不应该?
1条答案
按热度按时间uqxowvwt1#
1-events是对象,所以不能使用**if not events:**语句。因为这个物体确实存在。你应该使用下面的例子;
请看它是什么类型的对象,并适应它。例如,如果它是kinda .json对象,那么它可以有键,但值可以是“”或None,那么下面的代码块不会有影响,因此ICS文件将返回。
2-当你注解掉if语句后面的所有代码时,它实际上不应该返回ICS文件。它可能以某种方式被缓存,这就是它可能返回的原因。
谢谢