2011-04-03 43 views
1

此代码是谷歌应用程序引擎网络应用程序的一部分。任何重击吹码的想法?如何重构在python中切换case语句?

def post(self): 
    user = User.all().filter("id =",self.request.get('id')).get() 
    for arg in self.request.arguments(): 
     if arg == 'name': 
      user.name = self.request.get(arg) 
     elif arg == 'sex': 
      user.sex = self.request.get(arg) 
     elif arg == 'age': 
      user.age = self.request.get(arg) 
     elif arg == 'interest': 
      user.interest = self.request.get(arg) 
     elif arg == 'location': 
      user.location = self.request.get(arg) 
     elif arg == 'latitude': 
      user.latitude = self.request.get(arg) 
     elif arg == 'longitude': 
      user.longitude = self.request.get(arg) 
    user.put() 
    response_out_update(self, "true") 

回答

8
valid_args = set(('name', 'sex', 'age', 'interest', 'location', 'latitude', 'longitude')) 

for arg in self.request.arguments(): 
    if arg in valid_args: 
     setattr(user, arg, self.request.get(arg)) 

有可能的原因是你不想让应用程序的用户能够通过制定适当的POST请求只是修改用户对象的属性。即使这个处理程序仅限于管理员提供对CSRF的保护,在赋予它不需要的功能方面也没有明显的好处,因此最好永远不会使用,最坏的情况是有人会弄清楚如何滥用。