小编Elr*_*ond的帖子

如何在sqlalchemy中提交之前应用列默认值

我有一个声明基础模型:

class User(Base):
    id = Column(Integer, primary_key=True)
    money = Column(Integer, default=100)
Run Code Online (Sandbox Code Playgroud)

然后我跑了

>>> u = User()
>>> u.money
None
Run Code Online (Sandbox Code Playgroud)

如何在不向数据库写入任何内容的情况下使用sqlalchemy填充默认值?

python sqlalchemy

18
推荐指数
2
解决办法
3609
查看次数

Python-Requests(> = 1.*):如何禁用keep-alive?

我正在尝试使用Requests模块编写一个简单的Web爬虫程序,我想知道如何禁用它的-default- keep-alive feauture.

我试过用:

s = requests.session()
s.config['keep_alive'] = False
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个错误,说明会话对象没有属性'config',我认为它已经改变了新版本,但我似乎无法在官方文档中找到如何做到这一点.

事实上,当我在特定网站上运行爬虫时,它最多只能获得五个页面,然后无限循环,所以我认为它与保持活动功能有关!

PS:是请求网络爬虫的好模块吗?有更适合的东西吗?

谢谢 !

python web-crawler web python-requests

14
推荐指数
3
解决办法
1万
查看次数

高级SSL:中间证书颁发机构和部署嵌入式框

好的高级SSL女孩和家伙 - 我会在两天后给你增加一笔赏金,因为我认为这是一个复杂的主题,应该得到任何思想回答的人的奖励.

这里的一些假设仅仅是:假设,或更确切地说是有希望的猜测.考虑这是一个脑筋急转弯,简单地说"这是不可能的"是错过了重点.

如果你做了类似的事情,欢迎提供替代和部分解决方案,个人经验.即使我的整个计划存在缺陷,我也希望从中学到一些东西.

这是场景:

我正在开发一个嵌入式Linux系统,并希望它的Web服务器能够提供开箱即用,无需麻烦的SSL.这是我的目标设计标准:

Must Haves:

  • 我不能让用户将我自己开发的CA证书添加到他们的浏览器中
  • 我不能让用户将静态生成的(在mfg时间)自签名证书添加到他们的浏览器中
  • 我无法让用户在其浏览器中添加动态生成的(在启动时)自签名证书.
  • 我无法默认使用HTTP并启用SSL启用/禁用切换.它必须是SSL.
  • 嵌入式盒子和网络浏览器客户端都可以有或没有互联网访问,因此必须假设没有互联网访问才能正常运行.我们可以依赖的唯一根CA是随操作系统或浏览器一起提供的CA. 让我们假设该列表在浏览器和操作系统中"基本上"相同 - 即如果我们依赖它们,我们将有~90%的成功率.
  • 我不能使用夜间操作,即' Fast Eddie的SSL证书清算所 - 价格这么低,我们的服务器必须被黑客攻击!"

对Haves很好:

  • 我不希望用户警告证书的主机名与浏览器中的主机名不匹配.我认为这是一个很好的,因为它可能是不可能的.

不要:

  • 我不想为每个盒子运送相同的静态密钥集."不能"列表暗示的那种,但我知道风险.

是的,我知道..

  • 我可以并且确实为用户提供了上传他们自己的证书/密钥的机制,但我认为这是"高级模式"并超出了这个问题的范围.如果用户足够先进以拥有自己的内部CA或购买密钥,那么他们很棒,我喜欢它们.

思考上限时间

我使用SSL的经验是生成由"真正的"root签名的证书/密钥,以及通过制作我自己的内部CA,在内部分发"自签名"证书来加强我的游戏.我知道你可以链接证书,但我不确定操作的顺序是什么.即浏览器"向上走"链是否看到有效的根CA并将其视为有效证书 - 或者您是否需要在每个级别进行验证?

我遇到了中间证书权限的描述,这让我想到了潜在的解决方案.我可能已经从"简单的解决方案"变为"梦魇模式",但是有可能:

疯狂的想法#1

  • 获取由"真实"CA签署的中间证书颁发机构证书.(ICA-1)
    • ROOT_CA - > ICA-1
  • 该证书将在制造时用于生成每个盒子的唯一无密码子中间证书颁发机构对.
    • ICA-1 - > ICA-2
  • 使用ICA-2生成唯一的服务器证书/密钥.需要注意的是,您是否可以为IP生成密钥/对(而不是DNS名称?)?即一个潜在的用例是用户最初通过http连接到盒子,然后使用重定向URL中的IP将客户端重定向到SSL服务(这样浏览器就不会抱怨不匹配).这可能是让房子倒塌的卡片.由于必须在任何重定向发生之前建立SSL连接,我才能看到这也是一个问题.但是,如果这一切都神奇地起作用
  • 然后我可以使用ICA-2在盒子改变IP时生成新的证书/密钥对,这样当Web服务器恢复时,它总是有一个"有效"的密钥链.
    • ICA-2 - > SP-1

好的,你太聪明了

最有可能的是,我错综复杂的解决方案是行不通的 - 但如果确实如此,它会很棒.你有类似的问题吗?你做了什么?有什么权衡?

security ssl certificate-authority ssl-certificate

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

什么是推荐的扭曲哨兵/乌鸦整合?

raven有很多集成,包括python日志记录.一方面,twisted不使用python的日志记录.而在另一方面,没有直接整合乌鸦在扭曲.

那么在基于扭曲的设置中使用raven的当前最佳实践是什么?

twisted sentry raven

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

sqlalchemy backref没有名字但是级联

我们为注册到系统的人员提供了一个User类.我们有一大堆属于用户的类(和插件添加更多).因此,如果用户被删除,他的东西应该被删除.所以这就是我们目前正在做的事情:

class User(Base):
    id = Column(Integer, primary_key=True)
class Thing(Base):
    user_id = Column(Integer, ForeignKey(User.id))
    user = relationship(
        User,
        backref=backref("list_of_things",
            cascade="all, delete-orphan"))
Run Code Online (Sandbox Code Playgroud)

这有效.

假设我们从不使用User.list_of_things:有没有办法将其排除在外?但仍然得到backref级联行为?如果我们需要User.list_of_things,我们当然可以添加它.但在那之前,把它留下来会很好.

你可以说"嗯,只是说出一个名字并且不在乎".这就是我们正在做的事情.两件事情:

  1. 我们需要为那个东西定义一个命名约定,这样来自插件的名称就不会在User类上与其他插件和/或我们的主要属性发生冲突.
  2. 会使事情更容易读/写.

小更新:对我们手头的问题的一个未经测试的解决方案将是一个混合线,但它不会回答没有名称的backrefs的问题:

class OwnedbyUserMixin(object):
    @declared_attr
    def user_id(cls):
        return Column(Integer, ForeignKey(User.id),
            nullable=False)

    @declared_attr
    def user(cls):
        return relationship(
            User,
            backref=backref("list_of_" + cls.__tablename__,
                cascade="all, delete-orphan"))
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

6
推荐指数
0
解决办法
367
查看次数

如何在 Twisted 中将 TCP Keepalive 与端点一起使用?

Twisted 确实支持TCP Keepalive。但是我找不到在端点(客户端和服务器)上设置这些的简单方法。

这样做的最佳当前做法是什么?

python tcp twisted

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

python:如何在运行时检查额外要求?

我们的主应用程序有一些额外的功能,用户可以启用。这些功能在它们自己的目录中。这些功能可能需要额外的依赖项。我正在考虑将它们放在requires.txt那里的文件中。在运行时,我们想让人们知道该功能是否会中断。我目前正在考虑这样的事情:

def checkfeature(feature):
  everything_okay = True
  f = pkg_resources.resource_stream(feature, "requires.txt")
  with f:
    for r in pkg_resources.parse_requirements(f):
      if pkg_resources.working_set.find(r) is None:
        print "%r not found, please install, otherwise this feature does not work" % (r,)
        everything_okay = False
  return everything_okay
Run Code Online (Sandbox Code Playgroud)

这是正确的,pythonic 的做事方式吗?这有意义吗?

小更新:为什么如此复杂,而不是try: import ... except ImportError: ...像一个答案中所建议的那样:

  1. 我们的插件可能有一堆依赖项。创建如下所示的实际代码非常冗长。
  2. 某些插件可能需要特定版本的包。需要特定包装测试或pkg_resources无论如何使用的测试。所以这就是我上面的想法使用 pkg_resources 的原因。
  3. 我们想为可以运行的插件运行单元测试。在单元测试中处理 ImportError 并不好。拥有一个can_we_unit_test_this_plugin(plugin)功能使事情变得更容易。

第二次更新:extra_requireinsetup.py呢?

  1. 人们经常错过安装那些。好吧,糟糕的借口。
  2. 我的愿景是,从上面提到的各个功能的各个子目录中直接setup.py加载。但这确实是下一步。extra_requirerequires.txt

python pkg-resources

3
推荐指数
1
解决办法
2100
查看次数