Skip to main content
 首页 » 编程设计

python之GAE/Python之将请求从 Controller 传递到模型的最佳方式是什么

2025年05月04日16xiaohuochai

在下面的示例代码中,我说明了如何解决将请求从 Controller 传递到模型的问题。有更好的方法吗?

模型/MyModel.py

from google.appengine.ext import db 
 
class MyModel(db.model): 
    a = db.StringProperty(required=True) 
    b = db.StringProperty(required=True) 
    c = db.StringProperty(required=True) 
 
class Update: 
    def __init__(self, x) 
        self.x = x 
 
    def do_something(self) 
        myquery = db.GqlQuery('SELECT * FROM MyModel WHERE a = :1' self.x) 
        v = myquery.get() 
 
        if not v: 
            somevalue = MyModel(a = self.request.get('a'), # Doesn't work unless 
                                b = self.request.get('b'), # the request has been 
                                c = self.request.get('c')) # passed 
            somevalue.put() 

Controller /MyController.py

import webapp2 
from models.MyModel import Update 
 
class WebHandler(webapp2.RequestHandler): 
    def get(self): 
        var_x = "string" 
        var_y = "string" 
        z = Update(var_x) 
        z.request = self.request  # <--- Is there a better way? 
        z.do_something() 

编辑:(2012 年 5 月 30 日) 我最终创建了一个函数来将请求变量作为参数传递给模型。我希望有一些 python 魔法可以避免所有重复,但我没有找到。

请您参考如下方法:

将请求移交给模型意味着您正在混合模型和 Controller 。

正常情况下,模型甚至不应该知道这是一个请求。从请求中获取参数是 Controller 的工作,而不是模型。如果您的 do_something 方法必须使用参数,那么它应该将它们作为参数并返回一个结果(通常是一个实体)。