2017-03-01 80 views
-1

嘿傢伙idk爲什麼我的代碼不工作。我忘了大部分的東西約響應頭以及如何使用它,我吸在搞清楚什麼時候,當運行此代碼我碰到下面的錯誤使用字典和元組等似乎無法弄清楚如何在Flask中使用響應標頭

from flask import Flask, jsonify, json, request, abort 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config.from_pyfile('Config.py') 
db = SQLAlchemy(app) 
response = {} 

class JsonModel(object): #Class for making objects JSON serializable 
    def as_dict(self): 
     return {c.name: getattr(self, c.name) for c in self.__table__.columns} 

class User(db.Model, JsonModel): #Class which is a model for the User table in the database 
    User_ID = db.Column(db.Integer, primary_key = True) 
    FirstName = db.Column(db.String(20)) 
    LastName = db.Column(db.String(20)) 

def __init__(self,User_ID,FirstName, LastName): 
    self.User_ID = User_ID 
    self.FirstName = FirstName 
    self.LastName = LastName 

class Todo(db.Model, JsonModel): #Class which is a model for the Todo table in the database 
    todo_ID = db.Column(db.Integer, primary_key = True) 
    UserID = db.Column(db.Integer, db.ForeignKey("user.User_ID")) 
    details = db.Column(db.String(30)) 

def __init__(self, UserID, details): 
    self.UserID = UserID 
    self.details = details 

@app.route('/todo', methods = ['GET']) #Uses GET method to return all information in the database. 
def index(): 
    return json.dumps([u.as_dict() for u in Todo.query.all()]) 

@app.route('/todo/<int:todo_ID>', methods = ['GET']) 
def get(todo_ID): 
    todo = Todo.query.get(todo_ID) 
    response 
    response['todo_ID']= todo.todo_ID 
    response['UserID'] = todo.UserID 
    response['details'] = todo.details 
    response.status_code = 200 
    response.headers['location'] = '/todo/{}'.format(todo.todo_ID) 
    return response 

File "/home/muba/PycharmProjects/Work/Flaskapp.py", line 43, in get 
    response.status_code = 200 
AttributeError: 'dict' object has no attribute 'status_code' 
127.0.0.1 - - [01/Mar/2017 21:29:27] "GET /todo/1 HTTP/1.1" 500 - 

有人可以告訴我什麼是錯的,也可以指向某種教程。只有我可以理解的是,由於某種原因,我頂部的響應對象不能使用status_code。

+0

究竟是你想做些什麼?返回一個JSON對象? –

+0

我試圖返回一個特定待辦事項的所有細節,並且當我使用一個curl語句時,使用響應頭添加更多信息給它。我把它扔在一個物體上,希望它能起作用。它現在在一點工作,但現在它沒有。 – Muba

+0

我想什麼都不返回。當我運行curl語句時,我只想顯示位置,因爲它通常不顯示。 – Muba

回答

0

假設您希望返回JSON格式的todo對象;下面是使用JSON對象和額外頭文件構造響應的簡化示例。

app.py

from flask import Flask, make_response 
import json 

app = Flask(__name__) 

    @app.route("/", methods=['GET']) 
    def index(): 

    todo = {'todo_ID': 1, 'UserID': 2, 'details': 'test'} 
    r = make_response((json.dumps(todo), 
         200, 
         {'Content-Type': 'application/json', 
         'location': '/todo/{}'.format(todo['todo_ID'])})) 
    return r 


if __name__ == "__main__": 
    app.run(debug=True) 

捲曲響應:

HTTP/1.0 200 OK 
Content-Type: application/json 
Location: http://localhost:5000/todo/1 
Content-Length: 46 
Server: Werkzeug/0.10.4 Python/2.7.13 
Date: Wed, 01 Mar 2017 09:09:11 GMT 


* Closing connection 0 
{"UserID": 2, "details": "test", "todo_ID": 1} 
+0

在我看來,他只能使用jsonify而不是make_response。 Jsonify自動設置響應對象的內容類型標頭 – megadarkfriend

+0

@megadarkfriend是否可以使用jsonify設置額外的標頭? –

+0

我不這麼認爲。使用jsonify時,內容類型標頭設置爲application/json。這裏是更多參考文檔:http://flask.pocoo.org/docs/0.12/api/#flask.json.jsonify – megadarkfriend

相關問題