我正在创建一个基于Pyramid框架的移动服务.因为它是移动的,所以减少带宽使用的一切都是加分.我正在考虑gzipping所有流量,甚至动态HTML页面.
Pyramid框架为此提供了什么样的钩子?或者是否有WSGI中间件用于任务?我想在Python级别上做这个,而不是Nginx/Apache,所以我可以更好地统计gzip带来多少好处.
我有PyDev的Eclipse设置,并且喜欢能够调试我的脚本/应用程序.我刚刚开始玩Pylons并且想知道是否有办法通过Eclipse启动paster服务器以便我可以调试我的webapp?
我有一个金字塔应用程序,我希望日志到stderr和stdout.stdout应该是"INFO"级别以下.stderr应该是"WARN"更高.我如何更改我的.ini文件来执行此操作?
目前我正在这样登录,这被认为是正确的方法吗?
log = logger.getLogger(__name__)
log.info("update ...")
log.error("MAYDAY MAYDAY... BOOM!!!")
目前我正在使用默认日志记录,就是这样.
[loggers] keys = root, app [handlers] keys = console [formatters] keys = generic [logger_root] level = WARN handlers = console [logger_app] level = WARN handlers = qualname = app [handler_console] class = StreamHandler args = (sys.stderr,) 85 level = NOTSET formatter = generic [formatter_generic] format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
什么是金字塔/ Python等效的模型 - 视图 - PHP框架的控制器,如Kohana?
In Pyramid "Model" is .... and it is used for .....
In Pyramid "View" is .... and it is used for .....
In Pyramid "Controller" is .... and it is used for .....
Run Code Online (Sandbox Code Playgroud)
我想了解金字塔的逻辑.作为答案的补充,任何帮助,文档等将不胜感激.
谢谢.
我是金字塔的新手,一直在努力对我的项目进行一些改动.我试图将我的模型/类拆分为单个文件而不是单个models.py文件.为了做到这一点,我删除了旧的models.py并创建了一个带__init__.py文件的模型文件夹以及每个类的一个文件.在__init__.py我使用导入类from .Foo import Foo.
这使视图正常工作,并且可以初始化对象.
但是,运行initializedb脚本不会像我在单个models.py中拥有所有模型时那样创建新表.它不会创建相关表,而是直接尝试插入它们.
谁能给我一个金字塔项目结构的例子,它有不同文件中的模型?
我正在使用最新的Pyramid来构建一个Web应用程序.不知怎的,我们已经开始使用Chameleon作为模板引擎.我之前使用过Mako,创建基本模板非常简单.变色龙也可以吗?
我试图浏览文档,但我似乎无法找到一个简单的解决方案.
我正在尝试为我的Pyramid项目配置SQLAlchemy Alembic,我想使用我的developement.ini(或production.ini)进行Alembic的配置设置.是否可以在Alembic中的任何地方指定我想使用的.ini文件?
有没有办法在Pyramid Web应用程序中处理某种"全能"错误处理?我目前已经实现了异常日志记录到数据库(通过http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/logging/sqlalchemy_logger.html上的文档),我会将消息返回到我的视图中事情的"友好"面对.
但有没有我可以实现的东西会显示某种通用的"哎呀,你遇到了一个问题而我们正在调查它",因为我没有明确地捕捉任何其他东西,我可以使用上面的错误处理程序场景记录到数据库的任何内容?或者,我应该在搜索中寻找什么样的东西?
谢谢,
编辑,因为我无法将其全部纳入评论:.谢谢,这似乎正是我正在寻找的!
我遇到的一件事,我不知道它是否相关......
所以我正如上面那样实现SQL logger:
class SQLAlchemyHandler(logging.Handler):
# A very basic logger that commits a LogRecord to the SQL Db
def emit(self, record):
trace = None
exc = record.__dict__['exc_info']
if exc:
trace = traceback.format_exc(exc)
log = Log(
logger=record.__dict__['name'],
level=record.__dict__['levelname'],
trace=trace,
msg=record.__dict__['msg'],)
DBSession.add(log)
DBSession.flush()
#transaction.commit()
Run Code Online (Sandbox Code Playgroud)
我不得不取出'transaction.commit()'调用,而是使用.flush(),因为我在使用事务时遇到了SQLAlchemy DetachedInstanceError异常.我认为这是因为我正在玩一些游戏,将请求传递给帮助函数,而这似乎是抛出它的地方.所以它通过刷新会话来工作.Buuuut,如果我在异常视图中有一个log.error()语句会发生什么,如果实际抛出了一个异常,那么视图捕获它(太棒了!)但是视图中的日志语句没有被提交.Pyramid中的调试日志显示它正在写入,但从未提交.
如果我将日志记录处理程序更改回transaction.commit,那么异常会被提交,但我回到原来的问题.我想我需要重点关注我在帮助函数中所做的事情,而这正是首先引起它的问题,但我仍然在学习SQLAlchemy.有时它可能有点奇怪.
我是Pyramid和SQLAlchemy的新手.我正在使用SQLAlchemy开发Python Pyramid项目.我有一个简单的模型设置如下.如何在运行时使用不同的模式?这将是一个PostgreSQL数据库后端.现在,"公共"被硬编码到声明性基础模型中.我需要能够使用不同模式的相同模型.什么是最好的方法?除非我错过了,否则SQLAlchemy的文档对我来说似乎不太清楚.
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, BigInteger
__all__ = [
"LoadTender"
]
__all__.sort()
Base = declarative_base()
class LoadTender(Base):
__tablename__ = "load_tenders"
__table_args__ = {"schema": "public"}
id = Column("pkey", BigInteger, primary_key=True)
def __repr__(self):
return "" % self.id
Run Code Online (Sandbox Code Playgroud)
编辑:我似乎解决了我的问题,我正在更新片段,以显示我在下面做了什么.
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, BigInteger
__all__ = [
"LoadTender"
]
__all__.sort()
Base = declarative_base()
class ClientMixin(object):
__table_args__ = {"schema": "client_schema_name"}
class LoadTenderMixin(object):
__tablename__ = "load_tenders"
id = Column("pkey", BigInteger, primary_key=True)
def __repr__(self):
return "" % …Run Code Online (Sandbox Code Playgroud) 这与另一个超过3年的问题非常相似:查看SQLAlchemy事务的一般方法是什么,完成认证用户等等?
我正在开发一个应用程序,我想将所有更改记录到特定的表中.目前有一个非常好的"配方"可以进行版本控制,但是我需要修改它来代替记录更改发生时的日期时间以及谁进行更改的用户ID.我使用了与SQLAlchemy一起打包的history_meta.py示例,并将其记录为时间而不是版本号,但我无法确定如何传入用户ID.
我上面提到的问题建议在会话对象中包含用户ID.这很有意义,但我不知道该怎么做.我尝试了一些简单的东西,session.userid = authenticated_userid(request)但在history_meta.py中,该属性似乎不再出现在会话对象上.
我在Pyramid框架中执行所有这些操作,并且我正在使用的会话对象被定义为DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())).在我看来session = DBSession(),然后继续使用session.(我不确定这是否必要,但那是怎么回事)
这是我修改过的history_meta.py,以防有人发现它有用:
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import mapper, class_mapper, attributes, object_mapper
from sqlalchemy.orm.exc import UnmappedClassError, UnmappedColumnError
from sqlalchemy import Table, Column, ForeignKeyConstraint, DateTime
from sqlalchemy import event
from sqlalchemy.orm.properties import RelationshipProperty
from datetime import datetime
def col_references_table(col, table):
for fk in col.foreign_keys:
if fk.references(table):
return True
return False
def _history_mapper(local_mapper):
cls = local_mapper.class_
# set the "active_history" flag …Run Code Online (Sandbox Code Playgroud)