【问题标题】:webapp2 CRUD routing returns 405webapp2 CRUD 路由返回 405
【发布时间】:2015-06-11 01:17:39
【问题描述】:

您好,几周以来我一直在玩 webapp2 和 Python。简而言之,我进入了路由主题。 我发现了一个有用的link,它提供了一个如何完成路由的想法......在我的项目中不知何故我正在努力解决这个问题,但没有看到任何成功。

基本上我想要做的就是添加国家,然后在创建它们时通过链接 /countries/country_id(其中国家 ID 应该是 iso3)单独查看每个国家,以后可以使用 jquery 更新它们的属性可编辑或删除它们。更广为人知的是 CRUD

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

我不断收到这个:

INFO 2015-04-06 15:33:49,839 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')

【问题讨论】:

    标签: python google-app-engine url-routing crud webapp2


    【解决方案1】:

    使用 Route 类。像这样:

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

    完整文档here

    【讨论】:

    • 谢谢,它对我有部分帮助。我从这里得到的其余部分:link 我的代码缺少路由实体的正确方法。
    【解决方案2】:

    这是一个有趣的问题,因为没有内置映射。我选择使用国家名称和城市名称手动映射数据存储 ID 来为我的 web 应用实现 url 路由,例如 &lt;country&gt;/&lt;city&gt;/&lt;category&gt;。我最终让我的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-11
      • 2018-01-12
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多