小编mkl*_*ber的帖子

为什么我可以在它的post_save信号期间访问一个对象,但是当我触发该信号中的代码时,它会在另一个进程上调用它

总之,我对django信号有一个问题.

我有一个模型为了加快页面加载的响应速度,我正在卸载必须完成的一些密集处理,通过调用我们正在运行的第二个localhost网络服务器,两者都使用相同的数据库.我看到调用进程可以检索对象的行为,但被调用的进程不能.端口80和端口[端口]都指向运行在同一数据库中的django进程.

在models.py中

class A(models.Model):
    stuff...

def trigger_on_post_save( sender, instance, create, raw, **keywords):
    #This line works
    A.objects.get( pk=instance.pk )
    #then we call this
    urlopen( r'http://127.0.0.1:[port]' + 
        reverse(some_view_url, args(instance_pk) ).read()

post_save.connect( trigger_on_post_save, A )
Run Code Online (Sandbox Code Playgroud)

在views.py中

def some_view_function( request, a_pk ):
    #This line raises an object_not_found exception
    A.objects.get( pk=a_pk )
Run Code Online (Sandbox Code Playgroud)

此外,在urlopen调用引发异常之后,该对象在数据库中不存在.据我所知,在保存对象后调用了post_save,并将其写入数据库.这是不正确的?

python django django-signals

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

您可以在运行时更改 python 描述符的 __get__ 方法吗?

所有,正如标题所问,是否可以__get__在运行时更改描述符的方法。我处于这样一种情况,我有一个函数在运行时被装饰和未装饰。我希望这个函数的结果可以作为一个属性使用,类似于@property所做的。我研究了一下,发现它是一个描述符,但似乎描述符的__get__方法是只读的。

class Test( object ):
    def __init__( self ):
        self._x = 10

    def get_x( self ):
        return self._x

    @property
    def x( self ):
        return self.get_x()
Run Code Online (Sandbox Code Playgroud)

上面的代码大致上做了我想要的

  1. 该值在构造函数中设置
  2. 我可以随心所欲地装饰get_x方法
  3. instance.x 返回正确的值

我的问题是我宁愿不必创建该get_x方法,因为它基本上是不必要的。我只是无法装饰__get__x的方法,因为它是只读的。

背景

我正在编写一个回合制策略游戏,我正在使用装饰器来实现持久条件。当我使用测试用例时,我能够有效地实现这些装饰器,但问题是要获取计算值,您必须使用函数调用,而不是属性访问。这似乎是一个坏主意,因为获取描述单元的值会不一致地使用函数或属性。如果可以,我想对属性进行标准化。

python decorator descriptor

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

是否可以在 Selenium 中捕获 POST 数据?

我正在使用Selenium WebDriver 工具,想知道该工具是否提供了一种捕获提交表单时生成的 POST 数据的方法。我正在使用 django 测试框架来测试我的数据是否在后端正确处理,我想使用 Selenium 来验证表单是否生成了预期的数据。

post selenium

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

在 Django 中,可以使用 F() 对象来查看常量是否包含来自字段的字符串?

所有,
我基本上都在尝试进行关键字通知,因此每当创建具有名称的对象时,任何想要收到此名称中的任何单词的通知的人都会被通知。
例如

记录:
   关键词:你好
   关键词:世界

新名称:“你好世界”

返回两条记录


我已经在 sqlite 中创建了一个正确适用于此的查询,并且我知道如何跨数据库翻译它。

SELECT * FROM table t
WHERE "a constant string" LIKE "%" || t.field || "%";
Run Code Online (Sandbox Code Playgroud)

我已经确定在 django 中,可以使用F() 对象将一个字段与另一个字段进行比较,如下所示:

Entry.objects.filter(n_comments__gt=F('n_pingbacks'))
Run Code Online (Sandbox Code Playgroud)

现在有人知道如何用常量字符串替换第一个字段吗?像这样:

Entry.objects.filter("constant string"__icontains=F('n_pingbacks'))
Run Code Online (Sandbox Code Playgroud)

还是我要倒退?

django django-models django-queryset

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