我正在尝试从特定路由返回对象属性。这将是一个日期时间返回。
以下是我的班级定义:
from datetime import datetime
from app import db
class CorrectiveAction(db.Model):
id = db.Column(db.Integer, primary_key=True)
foo_text = db.Column(db.String(500))
realized_date = db.Column(db.DateTime, index=True)
我的路线:
from datetime import datetime
from app.models.correctiveaction import CorrectiveAction
from app import app, db
@app.route('/action/corrective/realize/corrective_id', method=['GET'], )
@login_required
def realize_corrective(corrective_id):
correctiveAction = CorrectiveAction.query.filter_by(id=corrective_id).first()
if not correctiveAction.realized_date:
correctiveAction.realized_date = datetime.utcnow()
db.session.commit()
return correctiveAction.realized_date
每当我尝试访问此URL时,我的日期设置正确,但我无法获得任何回报。这是我得到的堆栈跟踪:
[2018-05-23 17:51:53,621] ERROR in app: Exception on /action/corrective/realize/1 [GET]
Traceback (most recent call last):
File "C:\Users\FRNNUFTA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\FRNNUFTA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "C:\Users\FRNNUFTA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "C:\Users\FRNNUFTA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\flask\app.py", line 1740, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "C:\Users\FRNNUFTA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\werkzeug\wrappers.py", line 921, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "C:\Users\FRNNUFTA\AppData\Local\Programs\Python\Python36-32\lib\site-packages\werkzeug\test.py", line 923, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'datetime.datetime' object is not callable
我认为这个错误与datetime具体无关,因为当我尝试从我的对象返回另一个值时,我得到相同的类型。
谢谢,
答案 0 :(得分:1)
基本上,您看到的错误是因为Flask不知道如何将datetime.datetime
对象转换为可以作为HTTP响应的一部分发送的数据。
This tutorial是关于烧瓶反应的良好引物。
您可能需要确定日期时间对象的最佳字符串表示形式,并将其用作return
值。
来自the documentation本身:
Flask应用于将返回值转换为响应的逻辑 对象如下:
- 如果返回了正确类型的响应对象,则直接返回 从视图中返回。
- 如果是字符串,则创建响应对象 使用该数据和默认参数。
- 如果返回元组 元组中的项目可以提供额外的信息。这样的元组必须 在表单(响应,状态,标题)或(响应,标题) 至少有一个项目必须在元组中。状态值将 覆盖状态代码,标题可以是列表或字典 额外的标题值。
- 如果这些都不起作用,Flask将承担 返回值是一个有效的WSGI应用程序并将其转换为 响应对象。
醇>
由于您的datetime对象不符合1,2或3,Flask会尝试将其视为4并将其称为WSGI应用程序。这就是为什么你得到的确切错误是object is not callable
。