关于python金字塔视图

时间:2012-10-09 02:46:02

标签: python pyramid

我的项目基于金字塔。

Pyramid的默认支架非常简单:view.pymodels.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()))

2 个答案:

答案 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()