Обновите Api с Ajax до Python - PullRequest
0 голосов
/ 24 декабря 2018

Я не знаю, как добавить данные в API во Flask из JS в Python без использования глобального списка в маршруте Python, в результате чего все пользователи видят одну и ту же информацию API.

У меня есть ajaxотправить запрос в моем статическом файле JS, который позволяет пользователю выбрать элемент, и после выбора этого элемента он отправляет эти данные в маршрут Python, который затем загружает данные и добавляет их в глобальный массив.И затем в рамках маршрута я возвращаю список JSON в API.Я пытаюсь найти другой способ сделать это, потому что с этим методом, во-первых, насколько я понимаю, глобальные переменные ужасны для Бога именно по этой причине, потому что все пользователи могут видеть глобальную информацию API.

// On load cart
window.onload = function wowzers(){
  var array = [];
  var sum = 0;
  // Get Data
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'pricing/orders/' + username +'/api', true);
  xhr.onload = function(){
    var data = JSON.parse(this.response);

    if(xhr.status >= 200 && xhr.status < 400){
      for(x in data){
        for(key in data[x]){
          array.push(Number(data[x][key]));
          sum+=Number(data[x][key]);
          subtotal.innerHTML = sum;
          row = cart.insertRow(-1);
          // Delete Data
          row.addEventListener('click', function deleterow(){
            index = this.rowIndex;
            $.post('pricing/orders/delete', {
              delete_item: index
            });
             cart.deleteRow(index);
             subtotal.innerHTML = sum-Number(cart.rows[index].cells[1].innerHTML);
          });
          cell1 = row.insertCell(0);
          cell2 = row.insertCell(1);
          cell3 = row.insertCell(2);
          cell1.innerHTML = key;
          cell2. innerHTML = data[x][key];
          cell3. innerHTML = "<button class='btn btn-danger'>Delete</button>"
        }
      }
      console.log(sum);
    }else{
      console.log(error)
    }
  }
  xhr.send()
}

//Dynamic Cart
for(x = 0; x < tablerows; x++){
  table.rows[x].addEventListener('click', addCartItem);
}
function addCartItem(ev){
  var array = [];
  var sum = 0;
  index = this.rowIndex;
  equipmentCell = table.rows[index].cells[0];
  priceCell = table.rows[index].cells[1];
  equipmentName = equipmentCell.innerHTML;
  equipmentPrice = priceCell.innerHTML;
  // Post Data
  $.post('/pricing/orders/' + username + '/api', {
    javascript_data: JSON.stringify({[equipmentName]:equipmentPrice})
  });
  cartrow = cart.insertRow(-1);

  // Delete Data
  cartrow.addEventListener('click', function deleterow(){
    index = this.rowIndex;
    subtotal.innerHTML = sum-Number(cart.rows[index].cells[1].innerHTML);
    $.post('pricing/orders/delete', {
      delete_item: index
    });
    cart.deleteRow(index);
  });
  cell1 = cartrow.insertCell(0);
  cell2 = cartrow.insertCell(1);
  cell3 = cartrow.insertCell(2);
  cell1.innerHTML= equipmentName;
  cell2.innerHTML = equipmentPrice;
  cell3.innerHTML = "<button class='btn btn-danger'>Delete</button>";
  // Open Api information
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'pricing/orders/' + username +'/api', true);
  xhr.onload = function(){
    var data = JSON.parse(this.response);
    if(xhr.status >= 200 && xhr.status < 400){
      for(x in data){  
        for(y in data[x]){
          array.push(Number(data[x][y]));
          sum+=Number(data[x][y]);
          subtotal.innerHTML = sum;
        }
      }
    }else{
      console.log(error);
    }
  }
  xhr.send();
}

Логика маршрута

# ---------------------------------- USER CART API -----------------------------
@app.route('/pricing/orders/<user_name>/api', methods=['POST', 'GET'])
@login_required
def api(user_name):
    user_name = current_user.username
    if request.method == 'POST':
        cart.append(json.loads(request.form["javascript_data"]))
    return jsonify(cart)

# ---------------------------- DELETE ITEM IN CART ROUTE ----------------------------------
@app.route('/pricing/orders/delete', methods=['POST', 'GET'])
@login_required
def delete_item():
    if request.method == 'POST':
        print(cart[json.loads(request.form["delete_item"])])
        cart.pop(json.loads(request.form["delete_item"]))
        print(cart)
    return jsonify({"whoa": "there"})

# ----------------------------- DISPLAY CART BADGE LENGTH---------------------------------
@app.context_processor
def inject_badge_length():
    badge_length = len(cart)
    return {'BADGE_LENGTH' : badge_length}

Я надеюсь, что смогу опубликовать данные в маршрут Python, а затем добавить определенные данные в API без глобального списка, чтобы все пользователи могли просматривать только свои собственные данные.Я новичок в RESTFUL API, и мне просто нужно указывать в правильном направлении.

1 Ответ

0 голосов
/ 25 декабря 2018

Похоже, что у вас возникла проблема с хранением данных .

Скорее всего, вам понадобится какой-то тип ORM, например SQLAlchemy , для обработки ваших данныхместо хранения.У него есть некоторая кривая обучения, но в долгосрочной перспективе ему будет намного легче управлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...