2010-01-19 58 views
6

因此,我将Django与Google App Engine结合使用,并且我有一个urls.py文件,可将每个网址重定向到相应的方法。这些方法中的每一个都会自动传递“请求”作为参数之一,我相信这是一个HttpRequest对象。如何在Django中创建请求对象?

如何从我的代码中创建此填充的请求对象?例如,如果我在代码中的某个方法内,我想访问这个请求对象,而不必将它传递给每个函数以确保它可用。假设urls.py调用方法FOO,目前我做的方式是:

foo(request): 
    # stuff here 
    bar(request) 
    # more stuff here 

bar(request): 
    # stuff here<stuff> 
    baz(request) 
    # more stuff here 

baz(request): 
    do something with request here 

,因为我有过不需要它的功能只是让我必须通过请求,这似乎是错误的它在巴兹可用。

我想这样做:

foo(request): 
    # stuff here 
    bar() 
    # more stuff here 

bar(): 
    # stuff here 
    baz() 
    # more stuff here 

baz(): 
    request = HttpRequest() 
    do something with request here 

即无法通过要求各地如果我没有到。然而,做请求= HttpRequest() 返回一个空的请求对象...我想要的是一个完全填充的版本,就像传入从urls.py调用的每个方法的内容。

我瞥了一眼HttpRequest的文档: http://docs.djangoproject.com/en/dev/ref/request-response/ 但是没有看到办法。

任何想法将不胜感激。

感谢, 瑞安

回答

0

只需创建视图定义之前的请求变量并将其值设置,当你从视图中获得它(使用示例代码):

current_request = None 

foo(request): 
    current_request = request 
    # stuff here 
    bar() 
    # more stuff here 

bar(): 
    # stuff here 
    baz() 
    # more stuff here 

baz(): 
    # do something with currest_request here 

参见:Notes on Python variable scope

更新:This question是非常类似于你和接受的解决方案是基本上创建一个全局的请求变量,并在将其转换为设置。

+0

对不起兰斯,我不认为我的工作做得很好解释什么问题是我原来的帖子。我已经更新了它......希望现在更清楚。 – ryan 2010-01-19 23:36:32

+1

我仍然认为这个问题与变量范围有关。我已经更新了我的答案以使用全局变量。 – 2010-01-19 23:45:49

+0

谢谢兰斯。我的功能都在不同的.py文件,我真的不想去使用全局变量的路线。 – ryan 2010-01-20 17:02:42

1

request = HttpRequest()会给你一个空的,但你可以写一些东西给它。

这是我在项目中使用的一个例子:

def new(request): 
    ... 
    newrequest = HttpRequest() 
    newrequest.method = 'GET' 
    newrequest.user = request.user 
    resp = result_email(newrequest , obj-id , token) 
    send_email(resp , ...) 
    return HttpResponseRedirect(...) 
    ... 
def result_email(request , ...): 
    ... 
    return render(request , ...) 
相关问题