小编Gun*_*iem的帖子

Django MiddleWare订购的实用规则?

官方文档有点混乱:'之前'和'之后'用于在元组中订购MiddleWare,但在某些地方'之前'和'之后'指的是请求 - 响应阶段.此外,'应该是第一个/最后一个'是混合的,并且不清楚哪个用作"第一个".

我确实理解了它的不同......然而,对于Django的新手而言似乎很复杂.

你能为内置的MiddleWare课程建议一些正确的顺序(假设我们启用了所有这些课程),并且 - 最重要的是 - 解释为什么在其他课程之前/之后?

这是列表,其中包含我设法找到的文档中的信息:

  1. UpdateCacheMiddleware
    • 那些修改"之前有所不同:" SessionMiddleware,GZipMiddleware,LocaleMiddleware
  2. GZipMiddleware
    • 在任何可能改变或使用响应机构的MW之前
    • 之后UpdateCacheMiddleware:修改'变化:'
  3. ConditionalGetMiddleware
    • 之前CommonMiddleware:使用其'Etag:'标题时USE_ETAGS=True
  4. SessionMiddleware
    • 之后UpdateCacheMiddleware:修改'变化:'
    • 之前TransactionMiddleware:我们不需要这里的交易
  5. LocaleMiddleware,SessionMiddleware,CacheMiddleware之后的最顶级之一
    • 之后UpdateCacheMiddleware:修改'变化:'
    • 之后SessionMiddleware:使用会话数据
  6. CommonMiddleware
    • 在任何可能改变响应的MW之前(它计算ETags)
    • 之后GZipMiddleware,它不会计算gzip压缩内容的电子标签
    • 靠近顶部:当APPEND_SLASH或时它重定向PREPEND_WWW
  7. CsrfViewMiddleware
    • 在任何假定已经处理了CSRF攻击的视图中间件之前
  8. AuthenticationMiddleware
    • 之后SessionMiddleware:使用会话存储
  9. MessageMiddleware
    • 之后SessionMiddleware:可以使用基于会话的存储
  10. XViewMiddleware
  11. TransactionMiddleware
    • 在使用DB的MW之后:(可SessionMiddleware配置为使用DB)
    • 全部*CacheMiddleWare不受影响(作为例外:使用自己的数据库游标)
  12. FetchFromCacheMiddleware
    • 在那些修改'Vary:'之后,如果使用它们来为缓存哈希键选择一个值
    • 之后AuthenticationMiddleware就可以使用了CACHE_MIDDLEWARE_ANONYMOUS_ONLY
  13. FlatpageFallbackMiddleware
    • 底部:不得已
    • 然而,使用DB不是问题TransactionMiddleware (是吗?) …

django django-middleware

28
推荐指数
1
解决办法
4150
查看次数

如何检查PostgreSQL事务中的挂起操作

我在PostgreSQL上有一个会话(SQLAlchemy),有一个活动的未提交事务.我刚刚将会话传递给某个调用树,该树可能通过或直接通过底层连接发出SQL INSERT/ UPDATE/ DELETE语句sqlalchemy.orm.

有没有办法检查此事务中是否有任何待处理的数据修改语句?即,提交是否是无操作,以及回滚是否会丢弃某些东西?

我见过人们v$transaction在Oracle中指出同样的事情(参见这个问题).我正在寻找类似于在PostgreSQL上使用的东西.

postgresql transactions sqlalchemy

19
推荐指数
2
解决办法
2万
查看次数

WSGI/Django:将用户名传递回Apache以获取访问日志

我的Django应用程序使用Django的标准WSGIHandler在Apache下部署在mod_wsgi中,通过Django端的表单登录对用户进行身份验证.所以对于Apache来说,用户是匿名的.这使得Apache访问日志不那么有用.

有没有办法在处理请求后将用户名通过WSGI包装器传回Apache,以便它出现在Apache访问日志中?

(版本:Django 1.1.1,mod_wsgi 2.5,Apache 2.2.9)

python apache authentication django mod-wsgi

9
推荐指数
1
解决办法
1679
查看次数

Python:对非空列表的迭代,没有if-clause出现空.为什么?

如何在没有过滤和没有聚合(sum()等等)的非空序列上产生迭代器,什么都不产生?

考虑一个简单的例子:

sequence = ['a', 'b', 'c']
list((el, ord(el)) for el in sequence)
Run Code Online (Sandbox Code Playgroud)

[('a', 97), ('b', 98), ('c', 99)]按预期产生.

现在,只需将ord(el)out 换成一个表达式,该表达式使用某个生成器的第一个值(...).next()- 原谅人为的例子:

def odd_integers_up_to_length(str):
    return (x for x in xrange(len(str)) if x%2==1)

list((el, odd_integers_up_to_length(el).next()) for el in sequence)
Run Code Online (Sandbox Code Playgroud)

这产生了[].是的,空单.没有('a',东西)元组.没有.

但我们不是过滤,聚合或减少.n没有过滤或聚合的对象上的生成器表达式必须产生n对象,对吗?这是怎么回事?

python iterator generator leaky-abstraction

4
推荐指数
1
解决办法
608
查看次数