我想从像cloudflare这样的CDN提供我的JavaScript脚本.
现在我的脚本通过ajax与我的app服务器通信.当我从CDN加载这些脚本时,相同来源的策略限制不会发挥作用吗?
假设我的应用程序在域上:
http://app.com
Run Code Online (Sandbox Code Playgroud)
我加载我的脚本
http://cdn.com/xyz/all.js
Run Code Online (Sandbox Code Playgroud)
现在,由于我的脚本是从与我的应用程序运行的域不同的域加载的,因此我猜相同的源策略会阻止我与我的应用程序进行ajax通信.
我弄错了吗?
我的问题:我需要将UTC时间元组转换为UTC时间戳.但我有一些困惑.
首先是一点信息:
time.mktime(tuple):此函数始终以本地时间返回时间戳.
这是localtime()的反函数.它的参数是struct_time或完整的9元组,它以当地时间而不是UTC表示时间.
calendar.timegm(tuple):这将从提供的时间元组返回UTC时间戳
获取时间模块中的gmtime()函数返回的时间元组,并返回相应的Unix时间戳值.事实上,time.gmtime()和timegm()彼此是反向的
现在让我们做一个测试:
>>> from datetime import datetime
>>> import time
>>> import calendar as cal
>>> utc_now = datetime.utcnow()
>>> now = datetime.now()
>>> utc_now
datetime.datetime(2013, 3, 16, 9, 17, 22, 489225)
>>> now
datetime.datetime(2013, 3, 16, 5, 17, 29, 736903)
>>> time.mktime(datetime.timetuple(utc_now)), time.mktime(datetime.timetuple(now))
(1363439842.0, 1363425449.0)
>>> cal.timegm(datetime.timetuple(utc_now)), cal.timegm(datetime.timetuple(now))
(1363425442, 1363411049)
Run Code Online (Sandbox Code Playgroud)
为什么有四种不同的价值观?当我想将UTC时间元组转换为UTC时间戳时,哪一个是正确的?
UPDATTE
我想我找到了我的困惑的答案,所以让我解释一下.
首先,我们需要知道重要的事情:
日期和时间对象有两种:"天真"和"意识".
知晓对象具有足够的适用算法和政治时间调整知识,例如时区和夏令时信息,以相对于其他知晓对象定位自身.知觉对象用于表示不对解释开放的特定时刻[1].
一个天真的对象不包含足够的信息来明确地相对于其他日期/时间对象定位自己.天真物体是代表协调世界时(UTC),当地时间还是某个其他时区的时间完全取决于程序,就像程序一样,特定数字代表米,英里或质量.天真的物体易于理解和使用,代价是忽略了现实的某些方面.
我们得到什么datetime.utcnow() 或是datetime.now()"天真"的对象.这意味着,datetime …
我知道pymongo是线程安全的,并且有一个内置的连接池.
在我正在处理的Web应用程序中,我正在为每个请求创建一个新的连接实例.
我的理解是,由于pymongo管理连接池,在每个请求上创建新连接并不是错误的方法,因为在请求结束时,连接实例将被回收并且将在后续请求中可用.
我在这里是正确的,还是我应该创建一个单个实例来跨多个请求使用?
据我所知,这两个tornado和gevent是异步的Python框架.
在阅读瓶子文档时,我发现gevent实际上并不是异步的,你可以创建数千个伪同步的伪线程.
顺便说一下,在gevent中,你不能提前终止请求处理程序,你需要返回完整的响应,而在龙卷风中你可以.(如果我错了,请纠正我)
有人可以详细描述这些系统如何在内部工作,以及它们以何种方式不同.另外,WSGI如何使用这些系统的异步特性?这些框架是否符合WSGI,如果是,如何?
假设我在Python中有一个字符串:
>>> s = 'python'
>>> len(s)
6
Run Code Online (Sandbox Code Playgroud)
现在我encode这个字符串是这样的:
>>> b = s.encode('utf-8')
>>> b16 = s.encode('utf-16')
>>> b32 = s.encode('utf-32')
Run Code Online (Sandbox Code Playgroud)
我从上述操作得到的是一个字节数组-即b,b16与b32只是字节阵列(每个字节是8位长的过程).
但我们编码了字符串.那么这是什么意思?我们如何将"编码"的概念与原始字节数组相连?
答案在于这些字节数组中的每一个都以特定方式生成.我们来看看这些数组:
>>> [hex(x) for x in b]
['0x70', '0x79', '0x74', '0x68', '0x6f', '0x6e']
>>> len(b)
6
Run Code Online (Sandbox Code Playgroud)
这个数组表明,对于每个字符,我们有一个字节(因为所有字符都低于127).因此,我们可以说将字符串"编码"为'utf-8'会收集每个字符的相应代码点并将其放入数组中.如果代码点不能适合一个字节,则utf-8消耗两个字节.因此utf-8消耗尽可能少的字节数.
>>> [hex(x) for x in b16]
['0xff', '0xfe', '0x70', '0x0', '0x79', '0x0', '0x74', '0x0', '0x68', '0x0', '0x6f', '0x0', '0x6e', '0x0']
>>> len(b16)
14 # (2 + 6*2)
Run Code Online (Sandbox Code Playgroud)
在这里我们可以看到"编码到utf-16"首先将两个字节的BOM(FF FE …
我有这样的目录结构......
dir/
build.py
dir2
dir3/
packages.py
Run Code Online (Sandbox Code Playgroud)
现在的build.py需求packages.py- 并注意dir2不是一个包.
那么什么是packages.py加载的最佳方式build.py(目录结构无法更改)
编辑
该sys.path.append解决方案似乎不错-但有一两件事-我需要使用packages.py很少的文件-并保持sys.path包括很少使用的目录,但在前面-那是最好的事情?
编辑二
我认为imp解决方案是最好的.
import imp
packages = imp.load_source('packages', '/path/to/packages.py')
Run Code Online (Sandbox Code Playgroud)
编辑III
请注意,imp.load_source其他一些功能已被弃用.所以你应该使用imp.load_module今天.
fp, pathname, description = imp.find_module('packages', '/path/to/packages.py')
try:
mod = imp.load_module('packages', fp, pathname, description)
finally:
# since we may exit via an exception, close fp explicitly
if fp:
fp.close()
Run Code Online (Sandbox Code Playgroud) 我需要验证一个包含大量输入的表单.并且,如果输入无效,请在表单中以可视方式指示特定属性无效.为此,我需要单独验证每个表单元素.
我有一个模型和一个代表整个表单的视图.现在,当我更新属性时:
this.model.set('name', this.$name.val())
Run Code Online (Sandbox Code Playgroud)
将调用模型上的validate方法.
但是,在该方法中,我正在验证所有属性,因此在设置上述属性时,所有其他属性也会被验证,如果任何一个属性无效,则返回错误.这意味着即使我的"名称"属性有效,我也会收到其他人的错误.
那么,我该如何验证一个属性呢?
我认为不可能通过validate()方法验证一个属性.一种解决方案是不使用validate方法,而是验证'change'事件的每个属性.但是这会产生很多改变处理程序.这是正确的方法吗?我还可以做些什么?
我也认为这表明骨干中存在更大的问题:
无论何时用于
model.set()在模型上设置属性,都会运行验证方法并验证所有属性.这似乎违反直觉,因为您只需要验证单个属性.
我有多个div的引用,我想一次将它们全部添加到一个jQuery对象.
这些东西不起作用......
>>> $( $e1, $e2, $e3 )
[div]
>>> $([ $e1, $e2, $e3 ])
[[div], [div], [div]]
>>> $().add($e1, $e2, $e3)
[div]
>>> $().add([ $e1, $e2, $e3 ])
[[div], [div], [div]]
Run Code Online (Sandbox Code Playgroud)
但是这有效:
>>> $().add($e1).add($e2).add($e3)
[div, div, div]
>>> $e1.add($e2).add($e3)
[div, div, div]
Run Code Online (Sandbox Code Playgroud)
但我想要更优雅的解决方案.
让我解释一下这个问题:
我通过Pyramid服务我的静态资产:
config.add_static_view(name='static', path='/var/www/static')
Run Code Online (Sandbox Code Playgroud)
它工作正常.
现在,我有一个自定义会话工厂,可以在数据库中创建会话.它检查浏览器是否提供会话cookie.如果是,它会从数据库中找到一个会话.如果没有,则在DB中创建新会话,并将cookie返回给浏览器.
到现在为止还挺好.
现在,在我的home_view(生成我的主页)内部,我不以任何方式访问请求变量:
@view_config(route_name='home', renderer="package:templates/home.mak")
def home_view(request):
return {}
Run Code Online (Sandbox Code Playgroud)
因此,发生的情况是当用户访问主页时,会话不会在服务器上创建.我认为这是因为金字塔懒洋洋地创建会话- 只有当你访问时request.session.因此,主页请求的响应头不包含任何Set-Cookie会话头.
现在在主页的mako模板中,我正在为JavaScript和CSS文件生成静态URL ...
<link rel="stylesheet" href="${request.static_url(...)}"
<script src="${request.static_url(...)}"></script>
Run Code Online (Sandbox Code Playgroud)
现在,由于我正在为金字塔提供静态资产,所有对这些资产的请求都要通过整个金字塔机制.
所以,当我的浏览器发送获取静态资产的请求时,会发生什么,Pyramid会创建会话.也就是说,Pyramid在数据库中创建会话,并在浏览器发送静态资产请求时发回会话cookie.这是问题#1.
浏览器并行发送静态资产的所有请求.我使用的是最新版本的Firefox和Chrome.由于对实际HTML文档的HTTP请求未返回任何Set-Cookie标头,因此对静态资产的请求没有任何cookie标头.这意味着Pyramid没有看到任何请求的会话cookie,并且它在数据库中创建了一个新的会话,用于获取静态资产的每个请求.
如果我在主页上获取7个静态资源,则会创建7个会话条目.这是因为所有这些请求都与服务器并行,并且没有会话cookie,因此Pyramid会为每个请求创建一个会话.
如果我故意作为主页请求的一部分访问会话,则不会出现此问题.它在数据库中创建一个会话,并向浏览器发送一个cookie,然后浏览器为它从服务器请求的每个静态资产(并行)发送回来.
@view_config(route_name='home', renderer="package:templates/home.mak")
def home_view(request):
if request.session: pass
return {}
Run Code Online (Sandbox Code Playgroud)
我应该如何阻止在静态资产请求上创建会话.更好的是,我希望Pyramid在收到静态资产请求时甚至不会触及会话工厂 - 这可能吗?
其次,我不明白为什么Pyramid正在创建静态请求的新会话?
UPDATE
这是会议工厂.
def DBSessionFactory(
secret,
cookie_name="sess",
cookie_max_age=None,
cookie_path='/',
cookie_domain=None,
cookie_secure=False,
cookie_httponly=False,
cookie_on_exception=True
):
# this is the collable that will be called on every request
# and …Run Code Online (Sandbox Code Playgroud) 我正在尝试安装金字塔应用程序 - 让我们说test_app.在虚拟环境中,它正在安装为test-app(pip冻结输出显示它test-app==0.0).
因此,我无法导入包.
我该如何解决这个问题?
更多信息:http: //mail.python.org/pipermail/distutils-sig/2011-August/017935.html
我正在使用pip版本1.3.1
setup.py:
import os
from setuptools import setup, find_packages
here = os.path.abspath(os.path.dirname(__file__))
README = open(os.path.join(here, 'README.txt')).read()
CHANGES = open(os.path.join(here, 'CHANGES.txt')).read()
requires = [
'pyramid',
'pyramid_debugtoolbar',
'waitress',
]
setup(name='test_app',
version='0.0',
description='test_app',
long_description=README + '\n\n' + CHANGES,
classifiers=[
"Programming Language :: Python",
"Framework :: Pyramid",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
],
author='',
author_email='',
url='',
keywords='web pyramid pylons',
packages=find_packages(), …Run Code Online (Sandbox Code Playgroud) python ×6
pyramid ×2
python-3.x ×2
backbone.js ×1
datetime ×1
encoding ×1
gevent ×1
javascript ×1
jquery ×1
pip ×1
pymongo ×1
tornado ×1
unicode ×1
wsgi ×1