2011-12-25 23 views
4

私のコードがありません:フラスコはAttributeError: 'NoneType' オブジェクトが属性 '要求'

#!/bin/python 
import os,sys 
from datetime import datetime 
from flask import Flask 
from database import db_session,init_db 
from models import Node 

version = '0.1' 
app = Flask(__name__) 

@app.route("/") 
def index(): 
    return "hello" 

@app.route("/add") 
def add(): 
    node = Node('test','test','this is a test',1) 
    db_session.add(node) 
    db_session.commit() 
    return 'is ok' 

@app.teardown_request 
def shutdown_session(exception=None): 
    print "Teardown 1 {0!r}".format(exception) 
    db_session.remove() 


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

私のmodels.pyを、これは単純なモデル、単にノード

from sqlalchemy import Column,Integer,String,Text 
from database import Base 

class Node(Base): 
    __tablename__ = 'nodes' 

    id = Column(Integer, primary_key=True) 
    title = Column(String(300)) 
    tagnames = Column(String(125)) 
    body = Column(Text()) 
    nodetype=Column('node_type',Integer(11)) 

    def __init__(self,title=None,tagnames=None,body=None,nodetype=0): 
     self.title = title 
     self.tagnames = tagnames 
     self.body = body 
     self.nodetype = nodetype 

    def __repr__(self): 
     return '<Node %r>' % (self.title) 

私のデータベースです。 PY、私は

from sqlalchemy import create_engine 
from sqlalchemy.orm import scoped_session, sessionmaker 
from sqlalchemy.ext.declarative import declarative_base 


engine = create_engine('mysql://root:[email protected]:3306/test', echo=True,convert_unicode=True) 
db_session = scoped_session(sessionmaker(autocommit=False,autoflush=False,bind=engine)) 

Base = declarative_base() 
Base.query = db_session.query_property() 

def init_db(): 
    import flaskq.models 
    Base.metadata.create_all(bind=engine,checkfirst=True) 

ときに私の最初のリクエスト "http://127.0.0.1:5000/add" このコードのthroフラスコSQLAlchemyのを使用していませんよws: AttributeError: 'NoneType'オブジェクトに属性 'request'がありません

もう一度、すべてのことはOKです。

+2

スタックトレースはありましたか? –

+0

http://paste.pocoo.org/show/ak3t10kAazgovWHrIUgV/ – losingle

答えて

2

明らかに、リクエスト属性を持つオブジェクトがありません。 add-methodのどこかで、request-object/contextへの参照が必要になる可能性があります。 (これは本当にエラーレポート全体ですか?部分エラー - Reporstはあまり役に立ちません!)ここではdjangoライブラリを使用していると思いますが、おそらくFlask with SQLite3-Exampleが役に立ちます。 teardown_requestによって、リクエストコンテキストが自動的に確立され、おそらく最初の呼び出しで失敗する理由が考えられます。ドンの質問とは対照的に

from flask import request 

... 
def add(): 
    with app.request_context(environ): 
     node = Node('test','test','this is a test',1) 
     db_session.add(node) 
     db_session.commit() 
     return 'is ok' 
+0

sqlalchemy – losingle

+0

database.db_db_sessionを使用していますが、データベースinit_dbはflask-sqlaclhemy pyiパッケージですか?と何がモデルです。ノード?あなたはまだ重要な情報を省略しています。こうして私たちは手助けできなくなります。私はあなたがこのようにして当時の有益なコメントを得ることは疑う。 –

+0

私はいくつかの要約を追加しました。ありがとうございます – losingle

2

あなたは、:

Context-Localsによる明示的な要求コンテキストの必要性(それは私が説明することはできません詳細にあらゆる手段)多分、次は役立つが時々あります自分で文脈を設定するべきではありません。あなたがそれに接続するとき、フラスコはそれを行うべきです。 /addにアクセスするためにブラウザを使用しているとすると、問題が発生していないはずです。

プログラムでまたはブラウザを使用して接続していますか?

関連する問題