Маршрут регистрации светокопий Python для разных аргументов - PullRequest
0 голосов
/ 21 мая 2019

Мне удалось вызвать метод route_category при вызове GET / category / category, но я не смог вызвать route_category_with_id при вызове GET / category / category? 2; Я заметил, что я всегда вхожу в метод route_category, даже когда я вызываю / category / category / 2; Как мы можем это исправить?

Я объявил файл инициализации Python для чертежа, как показано ниже

from flask import Blueprint
blueprint = Blueprint(
     'category_blueprint',
      __name__,
      url_prefix='/category',
      template_folder='templates',
      static_folder='static' 
 )

и у меня есть файл rout.py для категории, объявленной как показано ниже

  @blueprint.route('/<template>', methods=["GET", "POST"])
  def route_category(template):
      do_something

  @blueprint.route('/<template>/<int:id>', methods=["GET"])
  def route_category_with_id(template):
      do_something_with_id

Routes.py зарегистрирован как показано ниже в основной программе Python

    module = import_module('category.routes'.format(module_name))
    app.register_blueprint(module.blueprint)

Как решить эту проблему. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 21 мая 2019

Запрос args (request.args) не совпадают с маршрутом переменные .

Значение, route_category_with_id ищет:

http://<ip-address>/category/2

Чтобы сохранить синтаксис ?2, вам необходимо преобразовать его в ?key=value и получить к нему доступ, используя request.args.get('key')

0 голосов
/ 21 мая 2019

Следующие сценарии должны прояснить для вас:

  1. Когда вы вызываете http://example.com/category, он вызывает ваш route_category метод.
  2. Когда вы вызываете http://example.com/category?2, он вызывает ваш route_category со строкой запроса, состоящей из 2. То, что следует после ?, называется строкой запроса - вы можете получить к ней доступ во Flask с помощью flask.request.args. Это должно выглядеть как ?key=value, тогда flask.request.args.get("key")
  3. Когда вы вызываете http://example.com/category/2 -> только тогда, он вызывает ваш route_category_with_id, потому что здесь вы передали параметр маршрута.
0 голосов
/ 21 мая 2019

Вы должны / можете установить несколько маршрутов для одного метода

Таким образом, код должен быть таким;

@blueprint.route('/<template>', methods=["GET", "POST"])
@blueprint.route('/<template>/<int:id>', methods=["GET"])
  def route_category(template, id=None):
      if id is None:
          # do_something
          pass
      else:
          # do_something_with_id
          pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...