小编Jul*_*era的帖子

如何在Python中打破一系列链式方法?

我有一行以下代码(不要责怪命名约定,它们不是我的):

subkeyword = Session.query(
    Subkeyword.subkeyword_id, Subkeyword.subkeyword_word
).filter_by(
    subkeyword_company_id=self.e_company_id
).filter_by(
    subkeyword_word=subkeyword_word
).filter_by(
    subkeyword_active=True
).one()
Run Code Online (Sandbox Code Playgroud)

我不喜欢它的样子(不要太可读),但我没有任何更好的主意来限制这种情况下,行79个字符.是否有更好的方法来打破它(最好没有反斜杠)?

python coding-style pep8

126
推荐指数
5
解决办法
3万
查看次数

SQLAlchemy,清除数据库内容但不删除架构

我正在开发一个基于exisitng数据库的Pylons应用程序,所以我正在使用反射.我有一个SQL文件,其中包含我用来创建测试数据库的模式.这就是为什么我不能简单地使用drop_allcreate_all.

我想写一些单元测试,我遇到了每次测试后清除数据库内容的问题.我只想删除所有数据,但保持表格完好无损.这可能吗?

该应用程序使用Postgres,这也是必须用于测试的内容.

python pylons sqlalchemy

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

开源Web应用程序中良好的JavaScript代码示例

我正在努力寻找一种编写优秀JavaScript代码的方法,这些代码效率很高,被其他开发人员广泛接受并且不是很难看.

直到最近,我使用的只是文字对象和jQuery的一些内容,但在阅读了Douglas Crockford的"JavaScript:The Good Parts"后,我现在完全意识到JavaScript比AJAX,DOM修改和简单动画更多.

问题是JavaScript似乎没有太多标准化.可用的OOP /继承模式的数量超过了我.我并不习惯每个框架/库都提供自己的继承.我也不想对这些事情做出错误的决定,因为这意味着在出现一些问题时重写所有代码.

所以我正在寻找的是现有的开源Web应用程序,如果可能的话,在客户端使用JavaScript,以查看实际项目中使用的模式.我想看看Web应用程序的代码,而不是框架或库.我不介意,如果这些网络应用程序是基于某个框架(如果它是Dojo或RequireJS,它会更好,因为我正在使用它们;)

javascript open-source design-patterns

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

装饰器类和装饰器函数之间的区别

我想这就是它们的调用方式,但我会举例说明以防万一.

装饰者类:

class decorator(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print 'something'
        self.func(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

装饰功能:

def decorator(func):
    def wrapper(*args, **kwargs):
        print 'something'
        return func(*args, **kwargs)
    return wrapper
Run Code Online (Sandbox Code Playgroud)

使用其中一个只是一个品味的问题?有什么实际区别吗?

python syntax decorator

11
推荐指数
1
解决办法
2827
查看次数

在Pylons中使用自动加载(反射)的SQLAlchemy声明性语法

我想使用自动加载来使用现有数据库.我知道如何在没有声明性语法(model/_ init _.py)的情况下执行此操作:

def init_model(engine):
    """Call me before using any of the tables or classes in the model"""
    t_events = Table('events', Base.metadata, schema='events', autoload=True, autoload_with=engine)
    orm.mapper(Event, t_events)

    Session.configure(bind=engine)  

class Event(object):
    pass
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想使用声明性语法:

class Event(Base):
    __tablename__ = 'events'
    __table_args__ = {'schema': 'events', 'autoload': True}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这样我得到:

sqlalchemy.exc.UnboundExecutionError:没有引擎绑定到此Table的MetaData.通过autoload_with = <someengine>将引擎传递给表,或通过metadata.bind = <someengine>将MetaData与引擎相关联

这里的问题是我不知道在导入模型的阶段从哪里获取引擎(在autoload_with中使用它)(它在init_model()中可用).我尝试添加

meta.Base.metadata.bind(engine)
Run Code Online (Sandbox Code Playgroud)

到environment.py但它不起作用.有人找到了一些优雅的解决方案

python reflection pylons sqlalchemy declarative

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

获取fixture中的主键(id)(Python,SQLAlchemy)

我正在使用fixture来测试Pylons应用程序,但我偶然发现了一个问题.

假设我有这样的数据集:

class CompanyData(DataSet):

    class test_company:
        company_full_name = u'Firma T?st'
        company_short_name = u'T?stCo'

class UserData(DataSet):

    class test_user:
        user_login = 'testuser'
        user_password = 'test'
        company = CompanyData.test_company
Run Code Online (Sandbox Code Playgroud)

现在,问题是,当我在功能测试中使用这些数据时(如http://farmdev.com/projects/fixture/using-fixture-with-pylons.html所述),我无法获取id (主键)公司.

在我的应用程序中,用户登录后应重定向到公司资料页面,这就是我需要公司ID的原因.测试看起来或多或少像这样:

self.app.post(url(controller='main', action='login'), params={
    'login': UserData.test_user.user_login,
    'password': UserData.test_user.user_password
})

response = self.app.get(url(
    controller='events', action='index',
    company_id=UserData.test_user.company.company_id, # This doesn't work
    view='active'))
assert ... in response
Run Code Online (Sandbox Code Playgroud)

第一个请求登录用户,第二个请求检查登录后是否可以访问公司配置文件页面.

这样我得到:

AttributeError:类test_company没有属性'company_id'

我也尝试过:

UserData.test_user.company.ref('company_id')
Run Code Online (Sandbox Code Playgroud)

但它导致:

<Ref.RefValue for CompanyData.test_company.company_id(尚未加载)>

这对我来说似乎很奇怪...为什么不装?

有没有办法找出什么是主键?

python pylons fixture sqlalchemy

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

最佳密码盐长度

可能重复:
用户密码盐的最佳长度是多少?

我试图在Stack Overflow上找到这个问题的答案而没有任何成功.

假设我使用SHA-1哈希存储密码(所以它是160位),让我们假设SHA-1对我的应用程序来说足够了.用于生成密码哈希值的盐应该多长时间?

我找到的唯一答案是,使它比散列本身(在这种情况下为160位)更长,这听起来合乎逻辑,但我应该把它做多久吗?例如,Ubuntu使用带有SHA-512的8字节盐(我猜),因此对于SHA-1来说8个字节也足够了,或者它可能太多了?

security passwords cryptography salt

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

MongoDB(Mongoid)与附加数据(附加字段)的多对多关系

假设我的模型是用户和项目。每个用户可以分配给多个项目,每个项目可以分配多个用户。这是典型的多对多关系,可以存储为():

# The user document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
  "project_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]
}

# The project document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
  "user_ids" : [ ObjectId("4d3ed089fb60ab534684b7e9") ]
}
Run Code Online (Sandbox Code Playgroud)

问题是,我想分配更多描述这种关系的数据,例如用户在项目中拥有的角色(管理员、经理等)。在 RDBMS 中,我只需向连接表添加一个附加列。在 MongoDB 中,我真的不知道该怎么做。

我应该在用户或项目中创建额外的嵌入文档吗?我在想这样的事情:

# The project document.
{
  "_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
  "assigned_users" : [
    { user_id: ObjectId("4d3ed089fb60ab534684b7e9"), role: "admin" },
    ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

但我想获取所有用户项目的查询会变得相当复杂,对吧?

我正在使用 Mongoid,但如果有任何通用解决方案,我将不胜感激(然后我将弄清楚如何将其映射到 Mongoid;)此外,我无法将数据库更改为 RDBMS。

database-design mongodb mongoid

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

PostgreSQL用SSH端口转发密码问题

我正在尝试将我的计算机连接到PostgreSQL数据库,该数据库只能在某些服务器上访问(db只允许本地连接).我以为我可以像这样使用端口转发:

$ ssh someserver.com -L 5100:127.0.0.1:5432
Run Code Online (Sandbox Code Playgroud)

然后连接到数据库,如下所示:

$ psql -h 127.0.0.1 -p 5100 -U postgres dbname
Run Code Online (Sandbox Code Playgroud)

但是,问题是在服务器上没有密码,但是当我尝试连接到转发端口时,它会要求我输入密码.当我把它留空时,它返回"psql:fe_sendauth:没有提供密码"并且不允许我连接.

可能是什么原因?我的计算机上还有一个PostgreSQL实例,这会引起一些冲突吗?

postgresql ssh forwarding

2
推荐指数
1
解决办法
2766
查看次数

在 Rails 3.1 项目中使用 RSpec 时出现“未初始化的常量”错误

我正在尝试使用 RSpec 来测试 Rails 3.1rc4 项目。我想测试我的lib/目录中的代码。我越来越:

/home/julas/myapp/spec/lib/operation_spec.rb:3:in `<top (required)>': uninitialized constant MyApp (NameError)
Run Code Online (Sandbox Code Playgroud)

MyApp 是一个模块(命名空间),每当我尝试使用此命名空间中的某些内容时都会出现问题,例如当我尝试这样做时

describe MyApp::Something do
Run Code Online (Sandbox Code Playgroud)

在我的测试中。

之前的测试没有任何问题。我lib/通过添加config.autoload_paths += Dir["#{config.root}/lib/**/"]application.rb.

我真的不知道是什么原因造成的。有人经历过类似的事情吗?

更新:它似乎与 Spork 无关。我肯定错过了什么。

rspec spork rspec2 ruby-on-rails-3 ruby-on-rails-3.1

2
推荐指数
1
解决办法
3519
查看次数