我的项目基于金字塔。
Pyramid的默认支架非常简单:view.py
,models.py
,等等。
我创建了一些目录来替换它们。例如:
view.py
- >查看目录
models.py
- >模型目录
然后我创建了一个名为login.py
的文件:
from pyramid.httpexceptions import HTTPForbidden
from pyramid.response import Response
from pyramid.view import view_config
import logging
from ..model import (
DBSession,
DynUser,
)
log = logging.getLogger(__name__)
def find_user(account):
#user = None
try:
user = DBSession.query(DynUser).filter(DynUser.username==account).first()
#one = DBSession.query(MyModel).filter(MyModel.name=='one').first()
except ValueError:
#log.warning("invalidate id %s input." % request.matchdict['id'])
log.warning("invalidate id %s input.")
except Exception:
log.error("database error!")
if not user:
return HTTPForbidden()
return dict(user=user)
我已导入DBSession。为什么我仍然会收到此错误?
tip
--------------------------------------------------------------------------
Undefined variable from import: DBSession
Undefined variable from import: DBSession
DBSession Found at: dyncms.model.meta
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
答案 0 :(得分:0)
您没有提到它,但我会假设您已将models.py
移至model/__init__.py
。
from ..models
仅在login.py
位于子目录中时才有效(如login/login.py
)。如果不是这样,您应该使用from .models import
。
答案 1 :(得分:0)
在模型目录
中__init__.py
# package
from .meta import DBSession
from .meta import Base
from .book import Book
meta.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)
from zope.sqlalchemy import ZopeTransactionExtension
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()