2015-04-06 92 views
1

嗨几周以来,我在玩webapp2和Python。简而言之,我进入了路由主题。 我发现一个有帮助的link,给出了一个想法如何可以完成路由......不知何故在我的项目中,我正在努力与此没有任何成功的景象。webapp2 CRUD路由返回405

基本上我想要做的就是添加国家,然后在链接/国家/ country_id(国家ID应该是iso3)时单独查看每个国家/地区,以便以后能够更新其属性jQuery的xeditable或删除它们。更好地称为CRUD

我可以在这里得到任何帮助吗?这可能是一个非常愚蠢的解决方案......我的大脑并没有得到它的权利...... :-(

我不断收到这样的:

INFO 2015年4月6日15:33:49839 module.py :737]默认: “GET/HTTP/1.1” 405 187

这里是我的处理代码:

class HomePage(BaseRequestHandler): 
     def get(self): 
     self.render_template('index.html') 

class CountriesHandler(BaseRequestHandler): 
    def create(self): 
    """I want to get this from https://github.com/mledoze/countries 
     Could this be possible to get it from json...? to be researched 
    """ 
     country_key = ndb.Key(Country, self.request.get('ccn3')) 
     country = Country((country_key), 
      name = self.request.get('name'), 
      ccn3 = self.request.get('ccn3'), 
      region = self.request.get('region'), 
     ) 

     country.put() 
     """I might be doing wrong here...""" 
     self.redirect('/countries/country') 

     self.render_template('add_country.html') 

     def list(self, country_key): 
     self.render_template('list.html') 

     def view(self, country_key): 
    """I think I have to do something here to get thinks to work with routing 
    """ 
     self.render_template('country.html') 

     def update(self, ndb_key): 
     """This should update one single field""" 
     if type(ndb_key) is ndb.key.Key: 
      key = ndb_key 
     else: 
      key = ndb.Key(urlsafe=ndb_key) 
     item = key.get() 
     item.self.request.get('value') 
     item.put() 

     def delete(self, ndb_key): 
     """This should delete an entity""" 
     if type(ndb_key) is ndb.key.Key: 
      key = ndb_key 
     else: 
      key = ndb.Key(urlsafe=ndb_key) 
     key.delete() 

这里是我的路由器代码:

"""Here i get always confused which one I should use and how I should use""" 
    _route_info = [ 
     ('Main', 'GET', '/',     HomePage, 'home'), 
     ('country.list', 'GET', '/countries/',     CountriesHandler, 'list'), 
     ('country.create', None, '/countries/create/',   CountriesHandler, 'create'), 
     ('country.view', 'GET', '/countries/<id:\d+>/',  CountriesHandler, 'view'), 
     ('country.delete', None, '/countries/<id:\d+>/delete/', CountriesHandler, 'delete'), 
     ('country.update', None, '/countries/<id:\d+>/update/', CountriesHandler, 'update'), 
    ] 

更新1

我改变了一下代码。 但仍然收到相同的错误:

class CountriesHandler(BaseRequestHandler): 
    def create(self): 
    if self.request.method == 'POST': 
      country_key = ndb.Key(Country, self.request.get('ccn3')) 
      country = Country((country_key), 
       name = self.request.get('name'), 
       ccn3 = self.request.get('ccn3'), 
       region = self.request.get('region'), 
      ) 

      country.put() 
     return self.redirect(self.uri_for('country.view')) 
    else: 
     return self.render_template('putcountry.html') 

回答

1

使用Route类。就像这样:

_route_info = [ 
    webapp2.Route('/countries', CountriesHandler, name='country.list', methods=['GET'], handler_method='list') 
] 

全部文档here

+0

谢谢,它帮助我部分。其余我从这里得到:[链接](https://github.com/5aket/cpfthw/blob/master/webapp2/views.py) 我的代码缺少适当的方式来路由实体。 –

0

这是一个有趣的问题,因为没有内置的映射。我选择了带有国家名称和城市名称的手动数据存储ID映射,以实现像我的web应用的<country>/<city>/<category>这样的URL路由。我结束了我的yaml,想要跟随城市和国家的地图。

includes: 
- br.yaml # Brazil 
- in.yaml # India 

然后在in.yaml

handlers: 
- url: /(india/for_sale|goa.*|delhi.*|gujarat.*|haryana.*|andaman.*|andhra_pradesh.*|arunachal_pradesh.*|uttar_pradesh.*|uttaranchal.*|tripura.*|tamil_nadu.*|sikkim.*|rajasthan.*|punjab.*|manipur.*|meghalaya.*|mizoram.*|nagaland.*|orissa.*|madhya_pradesh.*|kerala.*|karnataka.*|jharkhand.*|jammu_kashmir.*|himachal_pradesh.*|west_bengal.*|assam.*|bihar.*|chhattisgarh.*|maharashtra.*|pondicherry.*|lakshadweep.*|daman_diu.*|dadra.*|dadra_nagar_haveli.*|chandigarh.*|andaman_nicobar_islands.*|sindh.*) 
    script: in.app 

- url: /india/jobs.* 
    script: india_jobs.application 

- url: /india/cars-for_sale.* 
    script: india_cars-for_sale.application 

- url: /india/real_estate.* 
    script: india_real_estate.application