小编Him*_*rzi的帖子

request.user返回一个SimpleLazyObject,我如何"唤醒"它?

我有以下方法:

def _attempt(actor):
    if actor.__class__ != User:
        raise TypeError
Run Code Online (Sandbox Code Playgroud)

从视图中调用:

self.object.attempt(self.request.user)
Run Code Online (Sandbox Code Playgroud)

如您所见,_attempt方法期望actor是类型django.contrib.auth.models.User,但是对象看起来是类型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) 
Run Code Online (Sandbox Code Playgroud)

我正在传递一个用户,但if条件仍然是真的,演员仍然是LazyObject.为什么会这样?

python django django-contrib django-users

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

S3 CORS无法在Chrome中使用JQuery Ajax请求

我有以下S3桶:http://my-bucket.s3-website-eu-west-1.amazonaws.com/

我已根据http://docs.amazonwebservices.com/AmazonS3/latest/dev/cors.html添加了CORS配置:

<CORSConfiguration>
 <CORSRule>
<AllowedHeader>x-requested-with</AllowedHeader>
 <AllowedHeader>*</AllowedHeader>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>POST</AllowedMethod>
    </CORSRule>
 <CORSRule>
   <AllowedOrigin>http://*.test.com</AllowedOrigin>
   <AllowedMethod>POST</AllowedMethod>
 </CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)

我使用jquery向我的存储桶发出一个AJAX Post请求(注意,origin是jd.test.com:8000):

$.ajax('http://my-bucket.s3-website-eu-west-1.amazonaws.com/', {
    type: "POST",
    data: $(":hidden", self).serializeArray(),
    files: $(":file", self),
    statusCode: {
      204: function(){
        //do something
      }
    }
});
Run Code Online (Sandbox Code Playgroud)

在提出请求后,我的chrome控制台抱怨:

XMLHttpRequest cannot load http://my-bucket.s3-website-eu-west-1.amazonaws.com/. Origin http://www.jd.test.com:8000 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

任何关于为什么没有提出POST请求的帮助将不胜感激.

谢谢 !

jquery google-chrome amazon-s3 amazon-web-services cors

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

未显示集合视图,从不调用cellForItemAtIndexPath

我有一个UITableView自定义单元格包含UIStackView.作为准备新单元格的一部分,当表视图通过其cellForRowAtIndexPath方法添加新单元格时,它会实例化并添加任何集合视图(类型MultaCollectionView)以及任何UILabel需要添加到单元格的堆栈视图中的单元格(单元格可能包含各种集合视图) ).理论上,堆栈视图包含一系列标签和集合视图.

虽然标签显示正确,但是在运行时不显示集合视图.我试图显示的集合视图在.xibInterface Builder文档中定义.

numberOfSectionsInCollectionView调用Collection View的方法,但是collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)从不调用该方法.

为什么collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)从不调用该方法?为什么不在堆栈视图中呈现集合视图?

import UIKit
private let reuseIdentifier = "Cell"

class MultaCollectionView: UICollectionView, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.delegate = self
        self.dataSource = self
    }
    class func instanceFromNib() -> UICollectionView {
        return UINib(nibName: "multas", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! UICollectionView
    }

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> …
Run Code Online (Sandbox Code Playgroud)

ios swift xcode7

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

SICP练习4.6:在评估程序中实现let作为基于lambda的派生表达式

我正在尝试编写一个转换let形式表达式的函数:

(let ((var1 exp1) ... (varn expn))
  body)
Run Code Online (Sandbox Code Playgroud)

转换lambda为以下形式的(等效)表达式:

((lambda (var1 ... varn) body) exp1 ... expn)

我发现该问题的大多数解决方案似乎都是错误的,有人可以确认是这种情况吗?

SICP的此解决方案为例Wiki

 ;; let expression 
 (define (let-vars expr) (map car (cadr expr))) 
 (define (let-inits expr) (map cadr (cadr expr))) 
 (define (let-body expr) (cddr expr)) 

 (define (let->combination expr) 
   (cons (make-lambda (let-vars expr) (let-body expr)) 
         (let-inits expr))) 
Run Code Online (Sandbox Code Playgroud)

我相信let->combination会返回这种形式的清单:

((lambda (var1 ... varn) body) (exp1 ... expn))
Run Code Online (Sandbox Code Playgroud)

但是,我认为它应该返回的是以下形式的列表:

((lambda (var1 ... varn) body) exp1 ... …

lisp evaluation scheme functional-programming sicp

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