小编Jef*_*eff的帖子

Python返回语句错误"'返回'外部函数"

运行以下代码时(在Mac OS X 10.7的Mac上的Python 2.7.1中)

while True:
    return False
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

SyntaxError: 'return' outside function
Run Code Online (Sandbox Code Playgroud)

我仔细检查了错误的标签和/或空格.当我使用推荐的4个缩进空格时,我可以确认代码因上述错误而失败.当返回被放置在其他控制语句内部时(例如,if,for等),也会发生这种情况.

任何帮助,将不胜感激.谢谢!

python

37
推荐指数
3
解决办法
15万
查看次数

仅为经过身份验证的用户进行Django缓存

在Django中,如何创建仅对经过身份验证的用户可见的页面的单个缓存版本(对所有用户都相同)?

建立

我希望缓存的页面仅供经过身份验证的用户使用(他们@login_required在视图中使用).所有经过身份验证的用户都可以使用这些页面(例如,无需vary_on_headers根据唯一用户进行设置).

但是,我不希望这些缓存页面对未经过身份验证的用户可见.

到目前为止我尝试过的

  • 页面级缓存(显示用于登录用户的页面到未登录的用户)
  • vary_on_headers查看使用,但我不需要为每个用户单独缓存页面
  • 我检查了模板片段缓存,但除非我感到困惑,否则这将无法满足我的需求
  • 大量搜索(似乎每个人都想反过来)

谢谢!

示例视图

@login_required
@cache_page(60 * 60)
def index(request):
    '''Display the home page'''
    return render(request, 'index.html')
Run Code Online (Sandbox Code Playgroud)

settings.py(相关部分)

# Add the below for memcache
MIDDLEWARE_CLASSES += (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

# Enable memcache
# https://devcenter.heroku.com/articles/memcache#using_memcache_from_python
CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache'
    }
}
Run Code Online (Sandbox Code Playgroud)

根据@Tisho的回答,我解决了这个问题

  1. decorators.py在我的应用中创建文件
  2. 将以下代码添加到其中
  3. 导入函数 views.py
  4. 将它作为装饰器应用于我想仅为登录用户缓存的视图

decorators.py

from functools import wraps
from django.views.decorators.cache import cache_page
from django.utils.decorators import available_attrs


def cache_on_auth(timeout): …
Run Code Online (Sandbox Code Playgroud)

python django memcached caching heroku

21
推荐指数
1
解决办法
4180
查看次数

使用Python和lxml从HTML中删除class属性

如何使用python和lxml从html中删除类属性?

我有:

<p class="DumbClass">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
Run Code Online (Sandbox Code Playgroud)

我想要:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

我已经检查了lxml.html.clean.Cleaner但是,它没有一个方法来去除类属性.safe_attrs_only=True但是,您可以设置,这不会删除class属性.

重要的搜索结果似乎没有用.我认为class在html和python中使用的事实进一步混淆了搜索结果.许多结果似乎也严格遵守xml.

我对其他提供人性化界面的python模块持开放态度.

非常感谢.


感谢@Dan Roberts在下面的回答,我提出了以下解决方案.为将来到达这里的人们提出尝试解决同样的问题.

import lxml.html

# Our html string we want to remove the class attribute from
html_string = '<p class="DumbClass">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>'

# Parse the html
html = lxml.html.fromstring(html_string)

# Print out our "Before"
print lxml.html.tostring(html)

# .xpath below …
Run Code Online (Sandbox Code Playgroud)

html python lxml

16
推荐指数
1
解决办法
4451
查看次数

Django Celery Connection错误:错过了很多心跳

我如何解决ConnectionError: Too many heartbeats missed芹菜?

示例错误

[2013-02-11 15:15:38,513: ERROR/MainProcess] Error in timer: ConnectionError('Too many heartbeats missed', None, None, None, '')
Traceback (most recent call last):
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/utils/timer2.py", line 97, in apply_entry
    entry()
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/utils/timer2.py", line 51, in __call__
    return self.fun(*self.args, **self.kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/utils/timer2.py", line 153, in _reschedules
    return fun(*args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 265, in heartbeat_check
    return self.transport.heartbeat_check(self.connection, rate=rate)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 134, in heartbeat_check
    return connection.heartbeat_tick(rate=rate)
  File "/app/.heroku/python/lib/python2.7/site-packages/amqp/connection.py", line 837, in heartbeat_tick
    raise ConnectionError('Too many heartbeats …
Run Code Online (Sandbox Code Playgroud)

python django heroku celery django-celery

8
推荐指数
1
解决办法
4633
查看次数

Werkzeug AttributeError:'module'对象没有属性'InteractiveInterpreter'

尝试运行代码时使用Flask(0.8)和Werkzeug(0.8.1)app.run(debug=True)得到下面描述的错误.使用时没有错误app.run()

错误

Traceback (most recent call last):
File "code2.py", line 9, in <module>
    app.run(debug=True)
File "/<snip>/env/lib/python2.7/site-packages/Flask-0.8-py2.7.egg/flask/app.py", line 703, in run
    run_simple(host, port, self, **options)
File "/<snip>/env/lib/python2.7/site-packages/Werkzeug-0.8.1-py2.7.egg/werkzeug/serving.py", line 587, in run_simple
    from werkzeug.debug import DebuggedApplication
File "/<snip>/env/lib/python2.7/site-packages/Werkzeug-0.8.1-py2.7.egg/werkzeug/debug/__init__.py", line 14, in <module>
    from werkzeug.debug.tbtools import get_current_traceback, render_console_html
File "/<snip>/env/lib/python2.7/site-packages/Werkzeug-0.8.1-py2.7.egg/werkzeug/debug/tbtools.py", line 19, in <module>
    from werkzeug.debug.console import Console
File "/<snip>/env/lib/python2.7/site-packages/Werkzeug-0.8.1-py2.7.egg/werkzeug/debug/console.py", line 144, in <module>
    class _InteractiveConsole(code.InteractiveInterpreter):
AttributeError: 'module' object has no attribute 'InteractiveInterpreter'
Run Code Online (Sandbox Code Playgroud)

代码(code.py)

from flask import Flask
app = …
Run Code Online (Sandbox Code Playgroud)

python werkzeug flask

7
推荐指数
1
解决办法
6938
查看次数

这种 Django 多个设置文件的方法合理吗?

问题

我对以下多个 Django settings.py 文件的处理方法是否合理(透明、安全等)?

我的方法

我有一个settings.py和一个settings_local.pysettings.py受版本控制,asettings_local.py不受版本控制。最后settings.py它会尝试导入settings_local.py(如果可用)。

我对这种方法的理论是,我可以保留默认/安全设置settings.py,然后简单地推送到生产环境进行部署。部署时,settings_local.py不会出现,并且不会使用其仅限本地的设置。但是,当settings_local.py存在本地工作并且使用其仅本地设置时。

设置.py

DEBUG = False
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
)
# other settings...

try:
    from settings_local import *
except ImportError:
   pass
Run Code Online (Sandbox Code Playgroud)

设置_本地.py

from settings import *

DEBUG = True
MIDDLEWARE_CLASSES += (
    'debug_toolbar.middleware.DebugToolbarMiddleware',
)
# other settings...
Run Code Online (Sandbox Code Playgroud)

我对这种方法的担忧是它们都互相导入。我不认为这符合循环导入的条件,而是作为一个指标,表明在不同情况下人们会考虑合并这些文件。

settings_local.py导入的原因settings.py是这样我可以添加到已经定义的变量,同时遵守 DRY 原则,例如添加一个新条目MIDDLEWARE_CLASSES而不完全重新定义它。

谢谢!


解决方案

最终,我放弃了上述方法。对我来说,尝试解决这个问题是一个有趣且信息丰富的过程,但是,我的合并方法有太多缺点。

对于将来发现此问题的人们来说,最合适的方法可能是有关此主题的 wiki 页面中概述的解决方案之一,正如 @DrTyrsa …

python django

7
推荐指数
1
解决办法
7980
查看次数

HTML5 Boilerplate页面特定的Javascript放置

如果您使用单个javascript文件来保存所有脚本,那么您在哪里放置仅适用于一个页面的脚本?

背景

这可能是意见问题或"最佳实践",但我对其他人的意见感兴趣:

我正在项目中使用html5 Boilerplate.他们建议您将所有javascript放在一个文件中script.js以提高速度和一致性.似乎合理.

但是,我有一些地理位置脚本只与单个页面相关,而不是其他页面.我是否应该违反惯例并将此脚本放在我依赖的javascript库调用下面的页面上?只需调用相关函数(位于script.js)文件中,在它们所依赖的库的链接下面?

谢谢!

javascript html5boilerplate

6
推荐指数
1
解决办法
720
查看次数

jQuery的CDN和Far-Future Expire Headers

为什么jQuery的CDN提供的内容缺乏远期的过期标题?(或者,"我在这里做错了什么?")

背景

我在web项目中使用jQuery和jQuery Mobile.为了服务这些脚本,我按照他们的指示使用jQuery的CDN .但是,我注意到这些资源是在没有远期过期标头的情况下提供的,这会阻止浏览器智能地缓存它们.

虽然jQuery服务器会响应304 Not Modified,但这与expire头不同,否则完全否定了该请求.我意识到这里的简单答案是"因为他们没有",但是,我想知道为什么他们不这样做,如果有某种方式我可以提供这些内容,理想情况下来自CDN,具有远期未来的过期标题.

谢谢你的时间.

例子

jQuery CDN

http://code.jquery.com/jquery-1.6.4.min.js

响应:

HTTP/1.1 304 Not Modified
Date: Wed, 16 May 2012 00:05:27 GMT
ETag: "9e68e84-16615-6ad9bfc0+gzip"
Last-Modified: Mon, 12 Sep 2011 22:55:03 GMT
Server: ECS (dca/532A)
Vary: Accept-Encoding
X-Cache: HIT
Run Code Online (Sandbox Code Playgroud)

谷歌CDN

https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js

响应:

HTTP/1.1 200 OK
age:134505
cache-control:public, max-age=31536000
content-encoding:gzip
content-length:32103
content-type:text/javascript; charset=UTF-8
date:Mon, 14 May 2012 10:45:15 GMT
expires:Tue, 14 May 2013 10:45:15 GMT
last-modified:Mon, 02 Apr 2012 18:24:28 GMT
server:sffe
status:200 OK …
Run Code Online (Sandbox Code Playgroud)

jquery jquery-mobile

6
推荐指数
2
解决办法
3282
查看次数

node.js/v8将大文件读入内存

如何在node.js下将文件> 1.1 GB读入内存?

我正在尝试使用node.js下的topojson将> 1.1 GB的GeoJSON文件转换为TopoJSON格式.

$ topojson -o outfile.json larger_than_one_point_one_GB_input_file.json
Run Code Online (Sandbox Code Playgroud)

(以上适用于最大517 MB的文件)

导致以下错误

buffer.js:242
this.parent = new SlowBuffer(this.length);
                    ^
RangeError: length > kMaxLength
    at new Buffer (buffer.js:242:21)
    at Object.fs.readFileSync (fs.js:200:14)
    at /usr/local/share/npm/lib/node_modules/topojson/bin/topojson:61:26
    at Array.forEach (native)
    at Object.<anonymous> (/usr/local/share/npm/lib/node_modules/topojson/bin/topojson:60:8)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
Run Code Online (Sandbox Code Playgroud)

我到目前为止所做的一切

  • 广泛的搜索
  • 命令行内存设置
    • --max-stack-size=2147000000
    • --max_executable_size=2000
    • --max_new_space_size=2097152
    • --max_old_space_size=2097152
  • 自定义编译最新的v8版本到自定义node.js安装

版本

  • node.js:v0.8.15
  • 第8节:3.11.10.25

v8 node.js

6
推荐指数
1
解决办法
4520
查看次数

django set_test_cookie无法设置cookie

使用set_test_cookie在Django视图不实际设置检测Cookie,我想不通为什么.

重现步骤

实际项目比这复杂得多,但是,错误在近乎空的项目中是可重现的.

贝壳

$ virtualenv venv
$ source venv/bin/activate
(venv)$ pip install django
(venv)$ django-admin.py startproject hellodjango .
(venv)$ python manage.py startapp polls
Run Code Online (Sandbox Code Playgroud)

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'database.db',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3. …
Run Code Online (Sandbox Code Playgroud)

python django

5
推荐指数
1
解决办法
2208
查看次数

处理Flask网址创建中的空格

在我正在研究的烧瓶应用程序中,我使用美国州名作为URL结构的一部分.状态名称是从python字典中提取的,该字典将状态缩写与其各自的专有名称相链接,例如

state_dict = {"Alabama" : "AL", "Alaska" : "AK",...
Run Code Online (Sandbox Code Playgroud)

当状态名称没有空格时,这很好.例如,http://example.com/Alabama/然而,当有问题的国家中有一个空间,它形成了一个可怜的URL.例如http://example.com/North%20Dakota/

我现在通过小心使用状态名称创建URL来使用类似于state=state.replace(' ', '_')参数的东西来解决这个问题url_for().然而,它很麻烦,看起来很粗糙.

如何更好地使用状态名称作为URL的一部分,而不必每次都手动修改它们?如果解决方案也可用于将大写字母更改为小写,则为额外点.

我已经考虑将状态字典修改为url友好north_dakota,North Dakota但是,在创建要向用户显示的文本时,也会使用dict,并且可读性也很重要.

非常感谢你花时间陪伴!

python flask

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