【问题标题】:pass the url with variable param from javascript to flask endpoint将带有变量参数的 url 从 javascript 传递到烧瓶端点
【发布时间】:2020-08-06 20:18:37
【问题描述】:

视图页面有一个触发点击抓取的按钮,并且按钮逻辑是在 javascript 中。现在我已将按钮单击绑定到烧瓶功能。 URL 包含烧瓶变量(例如,scrape.route('/'))。现在我想提取这个域值并将其传递给烧瓶函数。

#blueprint
def create_blueprint():
    scrape = Blueprint('scrape', __name__, url_prefix='/jarvis')


    @scrape.route('<domain>/start_scrape')
    def start_scrape(domain):
      resp = get_links(domain)
      return resp
#button logic
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type=text/javascript>
  $(function() {
      $('a#start_button').bind('click', function() {
          if(!startScrape()) {
                return false;
          }
          document.getElementById('start_button').style.display = "none";
          var url = window.location.href;
          var url_splits = url.split('/');
          var domain_v = String(url_splits[url_splits.length - 1]);
          document.write(domain_v)
          $.getJSON({{ url_for('scrape.start_scrape', domain=domain_v)|tojson}}, {
                  name : $('input[name="scrape_name_input"]').val(),
                  queries : $('textarea[name="query_input"]').val()
              }, function(data) {
                endScrape();
                console.log(data);
                alert(data["message"]);
                window.location.reload();
                scrape_name_input.value = "";
              });
          return false;
      });
  });

我通过拆分 url 并提取最后一部分来绑定到域,但是当我尝试使用 url_for 构建 url 时,它的行为很奇怪。 Url for 在构建 URL 时需要域变量,如果我硬编码一个值,它就可以工作,例如'bing' 但如果我使用上面代码中提到的变量,它会失败并且端点 url 变为:

GET /jarvis//start_scrape

我不知道为什么会这样。我需要动态获取域,因此我无法对其进行硬编码。我提到以下但没有帮助: Flaskr url_for with parameters not working when called from javascript to python, Pass argument to flask from javascript, Pass JavaScript variable to Flask url_for

任何想法都将受到高度赞赏。

【问题讨论】:

    标签: javascript python jquery ajax flask


    【解决方案1】:

    您正在混合后端和前端。

    在这个sn-p中

    $.getJSON({{ url_for('scrape.start_scrape', domain=domain_v)|tojson}}, {})
    

    这些花括号 {{}} 中的所有内容都是 python 端代码。变量 domain_v 是前端 Javascript 变量,不能传递后端函数。

    您有 2 个选项来解决此问题。 您也可以在后端使用 URL 解析功能定义 domain_v。 或者您可以删除 url_for('scrape.start_scrape', domain=domain_v) 并在 Javascript 端执行相同操作。

    【讨论】:

    • 有没有办法在后端代码中获取 URL? @哈里
    • 我们如何在后端获取当前 URL?
    • 或者有没有办法将变量从前端传递到后端? - @哈里
    • 这里是如何从后端 stackoverflow.com/questions/43062047/… 获取当前 URL。对于另一个问题,您不能将变量从一种语言传递到另一种语言,但可以传递数据。所以发出AJAX请求并传递你想要的任何东西,后端可以得到它。为此,您需要一个特定的端点,该端点将期望来自客户端的特定数据,然后采取相应的行动。
    猜你喜欢
    • 2020-12-21
    • 2017-02-21
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2017-08-20
    相关资源
    最近更新 更多