小编Lee*_*Lee的帖子

lambda作为jinja2过滤器的参数?

我想在jinja2中有一个自定义过滤器,如下所示:

{{ my_list|my_real_map_filter(lambda i: i.something.else)|some_other_filter }}
Run Code Online (Sandbox Code Playgroud)

但是当我实现它时,我得到了这个错误:

TemplateSyntaxError: expected token ',', got 'i'
Run Code Online (Sandbox Code Playgroud)

看来jinja2的语法不允许lambdas作为参数?有一些不错的解决方法吗?现在,我在python中创建lambda然后将其作为变量传递给模板,但我宁愿能够在模板中创建它.

python lambda jinja2

13
推荐指数
2
解决办法
5876
查看次数

如何使用python PyJWT和公共PEM证书验证JWT?

我最近从PyJWT 0.4.1升级到1.0.1,我无法弄清楚如何验证使用公钥签名的JWT.

我的代码看起来像这样:

import jwt
cert_string = "-----BEGIN CERTIFICATE-----\nMIICITCCAYqgAwIBAgIIBEsUSxL..."
token_string = "eyJhbGciOiJSUzI1NiIsImtpZCI6I..."
jwt.decode(token_string, cert_string, algorithms=['RS256'])
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

File "<stdin>", line 1, in <module>
File "~/.virtualenvs/project/lib/python2.7/site-packages/jwt/api.py", line 117, in decode                            
key, algorithms, **kwargs)                                                                                         
File "~/.virtualenvs/project/lib/python2.7/site-packages/jwt/api.py", line 176, in _verify_signature                 
key = alg_obj.prepare_key(key)                                                                                     
File "~/.virtualenvs/project/lib/python2.7/site-packages/jwt/algorithms.py", line 165, in prepare_key                
key = load_pem_public_key(key, backend=default_backend())                                                          
File "~/.virtualenvs/project/lib/python2.7/site-packages/cryptography/hazmat/primitives/serialization.py", line 24, in load_pem_public_key
return backend.load_pem_public_key(data)                                                                           
File "~/.virtualenvs/project/lib/python2.7/site-packages/cryptography/hazmat/backends/multibackend.py", line 285, in load_pem_public_key
return b.load_pem_public_key(data)
File "~/.virtualenvs/project/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 716, in load_pem_public_key
self._handle_key_loading_error()
File "~/.virtualenvs/project/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 912, in _handle_key_loading_error
raise …
Run Code Online (Sandbox Code Playgroud)

python rsa pem jwt

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

Rails不会在测试数据库中重新创建mysql视图,即使在config.active_record.schema_format =:sql时也是如此

我们在开发和测试数据库中有一些mysql视图,这些视图是在迁移过程中通过执行(sql)语句创建的.Rails的默认schema.rb将这些视图创建为表.当config.active_record.schema_format设置为:sql时,根本不会创建这些视图.

是否有设置确保在测试数据库中重新创建这些视图?

如果没有,有人可以建议解决方法吗?

注意,show create table这个视图是这样的:

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `sales_reports` AS select ...
Run Code Online (Sandbox Code Playgroud)

并且视图包含在 show tables

经过调查,看起来activerecord故意这样做.

active_record/connection_adapters/mysql_adapter.rb

有这么好的理由吗?

ruby mysql migration activerecord ruby-on-rails

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

覆盖rails活动记录会破坏has_and_belongs_to_many关系的意外删除

我有一个继承自ActiveRecord :: Base的Commentable类和一个继承自Commentables的Event类.

我已经覆盖了这两个类中的destroy方法,并且Event.distroy调用了super.然而,一些意外的事情发生了.具体而言,将删除事件的has_and_belongs_to_many关联.我认为这种情况正在发生,因为一些模块被包含在Commentables和Event类之间,但不确定是否有办法阻止它.

这是简化的代码:

class Commentable < ActiveRecord::Base
  has_many :comments

  def destroy
    comments.destroy_all
    self.deleted = true
    self.save!
  end

end

class Event < Commentable
  has_and_belongs_to_many :practitioners, :foreign_key => "commentable_id"

  def destroy
    #some Event specific code
    super
  end

end
Run Code Online (Sandbox Code Playgroud)

我不想从数据库中删除行,只需设置一个"已删除"标志.我也不想删除任何关联.但是,在Event.destroy和Commentable.destroy之间的某处,其他一些rails代码会破坏has_and_belongs_to_many表中的记录.

知道为什么会这样,以及如何阻止它?

inheritance activerecord ruby-on-rails super destroy

0
推荐指数
1
解决办法
3635
查看次数