Динамическая загрузка на сайт Flask с уникальным URL

#javascript #python #html #ajax #flask

#javascript #python #HTML #ajax #flask

Вопрос:

Я создаю сайт Flask, который динамически загружает некоторую информацию, например, время, но я столкнулся с некоторой проблемой с AJAX с помощью jQuery.

Следуя примеру на сайте flaskhttps://flask.palletsprojects.com/en/1.1.x/patterns/jquery /

Я хочу изменить его на динамический URL на основе уникального идентификатора пользователя вместо статического.

Файл Python:

 from flask import Flask, jsonify, render_template, request
app = Flask(__name__)

@app.route('/_add_numbers/<UNIQUEID>')
def add_numbers():
    a = request.args.get('a', 0, type=int)
    b = request.args.get('b', 0, type=int)
    return jsonify(result=a   b)

@app.route('/')
def index():
    return render_template('index.html')
  

HTML

 <script type=text/javascript>
  $(function() {
    $('a#calculate').bind('click', function() {
      $.getJSON($SCRIPT_ROOT   '/_add_numbers/UNIQUEID', {
        a: $('input[name="a"]').val(),
        b: $('input[name="b"]').val()
      }, function(data) {
        $("#result").text(data.result);
      });
      return false;
    });
  });
</script>
<h1>jQuery Example</h1>
<p><input type=text size=5 name=a>  
   <input type=text size=5 name=b> =
   <span id=result>?</span>
<p><a href=# id=calculate>calculate server side</a>
  

Я не могу понять, как поместить уникальный идентификатор в HTML. Любая помощь очень ценится!

Ответ №1:

Существует множество способов сделать это. Я бы рекомендовал просто добавить идентификатор пользователя в контекст шаблона с помощью render_template("index.html", user_id=current_user.id) (убедитесь, что вы импортируете current_user из flask. Это вернет идентификатор пользователя, если пользователь вошел в систему, и None если нет. Затем вы можете сделать следующее:

 $(function() {
    $("a#calculate").bind("click", function() {
    $.getJSON($SCRIPT_ROOT   "/_add_numbers/{{ user_id }}",
       etc etc: your code goes here
       )}
    )}
  

Это должно сработать.

В качестве альтернативы вы могли бы использовать значение current_user.id (если вы чувствуете, что понимаете его) в шаблоне, поскольку это все равно неявно передается с помощью Jinja. o замените {{ user_id }} на `{{ current_user.id }}.

Комментарии:

1. Спасибо, это определенно полезно! Мой уникальный идентификатор на самом деле взят из моей базы данных flask_sqlalchemy. Я передавал его каждому маршруту в виде URL, например, events / 7. Могу ли я использовать уникальное значение этой базы данных вместо ‘current_user.id ‘?

2. Да, вы можете передать любое значение шаблону. В этом случае это было бы значение идентификатора того, кто сделал запрос