2015-04-06 93 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