小编r-m*_*m-n的帖子

Flask同时验证装饰器的多个字段

我一直在使用sqlalchemy.orm中的@validates装饰器来验证字段,只要所有字段彼此独立,所有字段都很顺利,例如:

@validates('field_one')
def validates_field_one(self, key, value):
   #field one validation

@validates('field_two')
def validates_field_two(self, key, value):
   #field two validation
Run Code Online (Sandbox Code Playgroud)

但是,现在我需要进行一些验证,这需要同时访问field_one和field_two.看起来验证接受验证装饰器的多个参数,但是,它只会为每个参数运行一次验证函数,如下所示:

@validates('field_one', 'field_two')
def validates_fields(self, keys, values):
   #field validation
Run Code Online (Sandbox Code Playgroud)

结果验证field_one的工作流程,然后验证field_two.但是,我想同时验证两者(一个简单的例子是断言field_one的值不是field_two的值,其中一个示例是禁止在图中的自循环,其中field_one和field_two引用节点,它正在边缘上执行验证).如何才能成为最佳方式?

python validation sqlalchemy flask flask-sqlalchemy

23
推荐指数
1
解决办法
1195
查看次数

Python Flask从变量渲染文本,如render_template

我知道烧瓶的功能render_template.我必须给出模板的文件名.但现在我想渲染一个模板的字符串(即模板的内容).那讲得通.但我现在不想解释原因.如何简单地渲染模板的文本?

python python-2.x jinja2 flask

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

无法在django站点管理框架中添加内联

admin.py如下: -

class SiteDetailInline(admin.TabularInline):
    model = SiteDetail 
    form = SiteDetailForm
    fields = ('name', )
    can_delete = False
    extra = 1
    max_num = 1

    def get_readonly_fields(self, request, obj=None):
       if obj:
           return ('clmsid',) + self.readonly_fields
       return self.readonly_fields

class SiteAdmin(admin.ModelAdmin):
    inlines = [ SiteDetailInline, ]
    def queryset(self, queryset):
        return Site.objects.filter(~Q(id = settings.SITE_ID))
    signals.post_save.connect(create_sites_default_user, sender=Site)

admin.site.unregister(Site)
admin.site.register(Site, SiteAdmin)
Run Code Online (Sandbox Code Playgroud)

models.py如下: -

class SiteDetail(models.Model):
    name = models.CharField(max_length=100, unique=True)
    client = models.ForeignKey(client)
    site = models.ForeignKey(Site)
    clmsid = models.CharField(max_length=15, unique=True, verbose_name='clms id', help_text='clms identifier', ) # unique identifier …
Run Code Online (Sandbox Code Playgroud)

python django django-admin django-sites

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

sqlalchemy:“‘InstrumentedAttribute’对象和‘Comparator’对象都没有属性”错误

我已经使用 sqlalchemy 和 sqlalchemy-migrate 向数据库添加了一个表,当我对命中数据库的无关代码运行单元测试时,出现以下错误:

Traceback (most recent call last):
  File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 208, in run
    self.setUp()
  File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 291, in setUp
    self.setupContext(ancestor)
  File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 314, in setupContext
    try_run(context, names)
  File "/Users/lorin/nova/instance_type_metadata/.nova-venv/lib/python2.6/site-packages/nose/util.py", line 478, in try_run
    return func()
  File "/Users/lorin/nova/metadata-debugging/nova/tests/__init__.py", line 62, in setup
    FLAGS.vpn_start,
  File "/Users/lorin/nova/metadata-debugging/nova/network/manager.py", line 577, in create_networks
    network_ref = db.network_get_by_cidr(context, cidr)
  File "/Users/lorin/nova/metadata-debugging/nova/db/api.py", line 628, in network_get_by_cidr
    return IMPL.network_get_by_cidr(context, cidr)
  File "/Users/lorin/nova/metadata-debugging/nova/db/sqlalchemy/api.py", line 99, in wrapper
    return f(*args, **kwargs)
  File "/Users/lorin/nova/metadata-debugging/nova/db/sqlalchemy/api.py", line 1308, in …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy sqlalchemy-migrate

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

Flask-sqlalchemy禁用整个会话的autoflush

我正在使用Flask-sqlalchemy,我该如何配置它no autoflush.目前我正在做类似的事情

db = SQLAlchemy()
...
db.init_app(app)
...
db.session.configure(autoflush=False)
Run Code Online (Sandbox Code Playgroud)

但它给出了错误.如何解决这个问题.

python sqlalchemy flask-sqlalchemy

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

SQLAlchemy Migrate - 我可以将列添加(或修改)到现有表的某个位置吗?

我想将列添加到现有表的某个位置或移动其中一列.但我在Sqlalchemy-migrate中找不到任何方法.

我想知道sqlalchemy-migrate中MySQL查询后的等效方法

ALTER TABLE tablename ADD column_name2 INT AFTER column_name1
ALTER TABLE tablename ADD column_name2 INT FIRST
ALTER TABLE tablename MODIFY COLUMN column_name2 INT AFTER column_name1;
Run Code Online (Sandbox Code Playgroud)

python sql sqlalchemy sqlalchemy-migrate

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

SQLAlchemy自动加载线程安全吗?

自动加载线程安全吗?我找不到与此有关的任何文档。通过以下代码,无法在大约前20毫秒内成功加载表(无异常,没有警告或更高级别的日志,但table.columns是一个空列表)。

from sqlalchemy import *
import logging
import threading
import time

logging.basicConfig(level = logging.INFO, format = '%(asctime)s:%(message)s', filename = "autoload_test.log")
logging.getLogger("sqlalchemy").setLevel(logging.DEBUG)
engine = create_engine("postgresql://madk@localhost/mydb", echo = False)
metadata = MetaData(bind=engine)

lock = threading.Lock()
def load_table():
    while True:
        try:
            table = Table('mytbl', metadata, autoload=True, autoload_with=engine)
            logging.info("size of columns:[%s]", len(table.columns))
        except:
            logging.warn("error occured", exc_info = True)

for i in range(5):
    t = threading.Thread(target = load_table)
    t.daemon = False
    t.start()

time.sleep(4)
Run Code Online (Sandbox Code Playgroud)
  1. 1个线程:成功加载
  2. 具有多线程且没有锁定保护:所有线程在开始的20ms失败(空列),然后所有线程正常工作
  3. 多线程带锁保护:添加线程成功加载

python sqlalchemy

5
推荐指数
0
解决办法
95
查看次数

查明持久 sqlalchemy 映射对象是否被修改

有没有办法查明持久 sqlalchemy 映射对象是否被修改?

这意味着我从数据库收到一个对象(持久的,具有身份的)。然后用户(也许!)在对话框窗口中修改其数据。

有没有办法找出内存/RAM 中的对象与数据库本身中的实例相比是否被修改?我不想将每个属性与对话框窗口中的数据进行比较。

python sqlalchemy

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

python flask template返回前150个字符

我想在我的网站上创建元描述,此刻我具有用于获取产品描述的功能:

{{ product.description|nl2br }}                                 
Run Code Online (Sandbox Code Playgroud)

需要编辑此功能以仅获取用于创建元描述的前150个字符,这可能在模板中吗?还是需要在views.py中创建此功能?

python jinja2 flask

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

修改子表后如何更新父表时间戳?

修改子表后,如何更新父时间戳?

我想使用父表时间戳检查我的其余客户端是否应更新这些表的本地版本。

class Parent(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    version = db.Column(db.Integer)
    timestamp = db.Column(db.DateTime,
                          default=datetime.utcnow,
                          onupdate=datetime.utcnow)
    childs = db.relationship('Children',
                             backref='parent',
                             lazy='dynamic',
                             cascade="all, delete-orphan")

class Children(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    version = db.Column(db.Integer)
    timestamp = db.Column(db.DateTime,
                          default=datetime.utcnow,
                          onupdate=datetime.utcnow)
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'), nullable=False)
Run Code Online (Sandbox Code Playgroud)

并测试一下:

    db.create_all()
    parent = Parent(version=1)
    child = Children(version=1, parent=parent)
    db.session.add_all([parent, child])
    db.session.commit()
    print "parent timestamp: %s, child timestamp %s" % (parent.timestamp, child.timestamp)
    previous_timestamp = parent.timestamp
    parent.version = 2
    db.session.add(parent)
    db.session.commit()
    assert parent.timestamp != previous_timestamp # this works
    print …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

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

Flask:在alertbox中显示flash消息

我一直在研究烧瓶,我遇到了闪光灯.如果在服务器端调用了闪存,它会在页面上显示一条消息.但是,我想在警告框中显示内容get_flashed_messages().我尝试创建JS函数并传递{{message}},但循环打印调用,即将调用作为字符串.

{% with messages = get_flashed_messages() %}
{% if messages %}
 <ul class=flashes>
 {% for message in messages %}
  <li>{{ message }}</li>
 {% endfor %}
 </ul>
{% endif %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决吗?

python jinja2 flask flash-message

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