如何从带有python flask

时间:2018-05-23 15:55:11

标签: python datetime flask sqlalchemy

我正在尝试从特定路由返回对象属性。这将是一个日期时间返回。

以下是我的班级定义:

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具体无关,因为当我尝试从我的对象返回另一个值时,我得到相同的类型。

谢谢,

1 个答案:

答案 0 :(得分:1)

基本上,您看到的错误是因为Flask不知道如何将datetime.datetime对象转换为可以作为HTTP响应的一部分发送的数据。

This tutorial是关于烧瓶反应的良好引物。

您可能需要确定日期时间对象的最佳字符串表示形式,并将其用作return值。

来自the documentation本身:

  

Flask应用于将返回值转换为响应的逻辑   对象如下:

     
      
  1. 如果返回了正确类型的响应对象,则直接返回   从视图中返回。
  2.   
  3. 如果是字符串,则创建响应对象   使用该数据和默认参数。
  4.   
  5. 如果返回元组   元组中的项目可以提供额外的信息。这样的元组必须   在表单(响应,状态,标题)或(响应,标题)   至少有一个项目必须在元组中。状态值将   覆盖状态代码,标题可以是列表或字典   额外的标题值。
  6.   
  7. 如果这些都不起作用,Flask将承担   返回值是一个有效的WSGI应用程序并将其转换为   响应对象。
  8.   

由于您的datetime对象不符合1,2或3,Flask会尝试将其视为4并将其称为WSGI应用程序。这就是为什么你得到的确切错误是object is not callable