我有以下方法:
def _attempt(actor):
if actor.__class__ != User:
raise TypeError
从视图中调用它:
self.object.attempt(self.request.user)
如您所见,_attempt方法期望actor为type django.contrib.auth.models.User
,但是该对象似乎为type
django.utils.functional.SimpleLazyObject
。为什么会这样呢?更重要的是,如何将LazyObject
(显然是User对象的一种包装器)转换为User
对象?
有关更多信息,Request.user
请参见:https :
//docs.djangoproject.com/en/dev/ref/request-
response/#django.http.HttpRequest.user该文档似乎表明request.user
应该是一个User
对象…
======后期编辑=====
我现在有以下方法:
def _attempt(obj, action, actor, msg):
actor.is_authenticated()
if isinstance(actor, LazyObject):
print type(actor)
我通过了一个用户,但是if
条件仍然为true,actor仍然是LazyObject
。为什么会这样呢?
看到我对类似问题的回答。
Django延迟加载,request.user
因此它可以是User
或AnonymousUser
取决于身份验证状态。它仅“唤醒”并在访问属性时返回适当的类。不幸的是,__class__
这不算在内,因为那是原始的类属性。有时您可能需要知道这实际上是一种SimpleLazyObject
类型,因此将其代理到User
或将是错误的AnonymousUser
。
总而言之,您根本无法进行这种比较。但是,您 真正
要在这里实现什么?如果你想检查它是否是一个User
或者AnonymousUser
,有request.user.is_authenticated()
针对,例如。
作为一般规则,您不应滥用鸭子类型。参数必须始终是特殊的类型或子类型(User
或UserSubClass
),即使不必 一定
如此。否则,您将得到混乱而脆弱的代码。
本文向大家介绍HTML5如何唤醒APP?相关面试题,主要包含被问及HTML5如何唤醒APP?时的应答技巧和注意事项,需要的朋友参考一下 有以下几种方式 URL Scheme:最常见 Intent: // :Android Universal Link : iOS, 通过传统的 HTTP 链接即可打开 APP 唤醒途径 iframe的src a标签的src window.location 参考资料:
问题内容: 我正在用C++编写程序。我注意到,它获得了许多线程,它们的目的是定期执行某项操作,其中有3或4个线程。我决定通过编写一个调度程序服务来重构,以便使用这些线程的其他地方可以预订该服务,这应该将我随时运行的额外事件线程的数量减少到一个。 我还没有使用此代码的代码。在开始编写之前,我想知道是否有可能,并获得有关我的设计的一些反馈。我要完成的任务的简要说明是这样的: 添加事件 呼叫者提供事件和
假设10个进程使用sem_wait(). 等待一个信号量,第11个进程调用该信号量的sem_post。 10个进程中哪一个将进入临界块? 像随机吗?所有进程将被唤醒并努力实现锁。 ,CPU将为其中一个进程提供锁,其余的进程将返回等待状态
下面我们来看看睡眠和醒来的基本模型。假设有两个系统调用作为睡眠和唤醒。呼叫睡眠的过程将被阻止,而调用的过程将被唤醒。 有一个叫做生产者消费者问题的流行例子,它是模拟睡眠和唤醒机制的最流行的问题。 睡眠和觉醒的概念非常简单。如果关键部分不是空的,那么该过程将进入休眠状态。它将被临界区内正在执行的其他进程唤醒,以便进程可以进入临界区。 在生产者消费者问题中,让我们说有两个过程,一个过程写某事,而另一个
休眠与唤醒 [HW,ACPI] acpi_sleep={s3_bios,s3_mode,s3_beep,s4_nohwsig,old_ordering,nonvs,sci_force_enable} ACPI休眠选项。 (1)s3_bios和s3_mode与显卡有关。计算机从S3状态(挂起到内存)恢复时,硬件需要被正确的初始化。这对大多数硬件都不是问题,但因为显 卡是由BIOS初始化的,内核无法获
Future 一次polled 就能完成的,并不常见。而多数情况下,Future 需要确保一旦准备好前进,就再次进行轮询(poll) 。而这是通过Waker类型,辅助完成的。 每次 Future poll 时,都会将其作为“任务(task)”的一部分。任务是已提交给 executor 的顶级 Future 。 Waker提供一个wake()方法,它可以用来告诉 executor,应该唤醒的相关任务