【问题标题】:Sending URL Parameters to a Python REST API using Javascript使用 Javascript 将 URL 参数发送到 Python REST API
【发布时间】:2020-05-26 04:03:11
【问题描述】:

我正在尝试使用 Javascript 将 URL 参数发送到我在 Python 上编写的 API。 我的 Javascript 代码如下:

function createGetRequest() {
        var request = new XMLHttpRequest();
        request.open('GET', 'some-link/api/', true);
        request.onload = function() {
            var data = JSON.parse(this.response);
            document.getElementById("idk").innerHTML = data.news.entry_news_item_title + "</br>" + data.news.entry_news_item_snippet + "</br>"
            + data.news.entry_news_item_url;
        }
        request.send();
    }

而我的 Python REST API 代码如下;

def index():
NewsFeed = feedparser.parse("https://trends.google.com.tr/trends/trendingsearches/daily/rss?geo=TR")

entry = NewsFeed.entries[0]

return {"news" : {"Status" : "OK",
                              "item" : entry['title'],
                              "entry_news_item_title" : entry['ht_news_item_title'],
                              "entry_news_item_snippet" : entry['ht_news_item_snippet'],
                              "entry_news_item_url" : entry['ht_news_item_url']}}

我希望能够从用户那里获取条目的索引,然后返回相应的条目。换句话说,我希望entry = NewsFeed.entries[0] 部分接受一个变量而不是一个 0。我已经在网上尝试了所有方法,但我似乎无法弄清楚。

【问题讨论】:

  • 使用request.open('GET', 'some-link/api/?entry=' + entry);之类的东西,然后在你的Python API中,获取entry参数。
  • 我认为该评论足以成为这个问题的答案:) 你为什么不详细说明一下并将其作为答案? @ChrisG

标签: javascript python api aws-lambda aws-api-gateway


【解决方案1】:

在您的 JavaScript 代码中,向 GET 请求添加条目,如下所示:

function createGetRequest() {
    // code to get number/id you are clicking on
    entry_id = getEntryId();
    var request = new XMLHttpRequest();
    //After question marks you can input your GET request parameters
    request.open('GET', `some-link/api/?entry=${entry_id}`, true); //I am using backticks as interpolation  
    request.onload = function() {
        var data = JSON.parse(this.response);
        document.getElementById("idk").innerHTML = data.news.entry_news_item_title + "</br>" + data.news.entry_news_item_snippet + "</br>"
            + data.news.entry_news_item_url;
        }
        request.send();
    }

在您的 Python 代码中,您只需从请求字符串中收集获取参数,如下所示:

# Add the request parameter to the function
def index(request):
    NewsFeed = feedparser.parse("https://trends.google.com.tr/trends/trendingsearches/daily/rss?geo=TR")
    # Get the parameter from request
    # By using get function if you do not have a parameter with given key it will return None 
    entry_id = request.GET.get('entry')
    if entry_id:
        entry = NewsFeed.entries[entry_id]

        return {"news" : {"Status" : "OK",
                          "item" : entry['title'],
                          "entry_news_item_title" : entry['ht_news_item_title'],
                          "entry_news_item_snippet" : entry['ht_news_item_snippet'],
                          "entry_news_item_url" : entry['ht_news_item_url']}}
    else:
        # Handle bad request
        return {"news":None}

【讨论】:

  • 感谢您的回复!出于某种原因,当我将参数应用到 GET 请求时,我得到一个内部服务器错误。这可能是因为我使用 AWS EC2 作为我的服务器吗?我是否需要通过 API Gateway 指定这些参数?我在这里吐痰,我有点不知道该怎么办。
  • 另外,@app.route() 在这种集成中应该如何看待?
  • 我假设您使用的是 Flask,要使用带有 get 参数的路由,您不需要像往常一样使用任何特殊的东西:@app.route('some-link/api/')
  • 什么时候出现这个错误?也尝试编码你的网址参数let data = encodeURIComponent('entry') + '=' + encodeURIComponent(entry_id); request.open('GET', 'some-link/api/?' + data, true)
  • 我没有做任何特别的事情来集成 Flask,所以如果它不是默认的,不,我没有使用它。
猜你喜欢
  • 2012-11-01
  • 2016-08-03
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
相关资源
最近更新 更多