【问题标题】:execute api function on button click using Django urls - Django/Python使用 Django url 在按钮单击时执行 api 函数 - Django/Python
【发布时间】:2015-07-01 13:49:36
【问题描述】:

就目前而言,我已经设置了我的网站,并且有一个搜索栏和搜索按钮,我希望执行位于我的 api.py 文件中的我的 api 函数。 api.py 文件如下所示:

import urllib2
import json

locu_api = '****'

def loc_search(request):
    query = request.GET.get('query')
    api_key = locu_api
    url = 'https://api.locu.com/v1_0/venue/search/?api_key=' + api_key
    locality = query.replace(' ', '%20')
    final_url = url + "&locality=" + locality + "&category=restaurant"
    json_obj = urllib2.urlopen(final_url)
    data = json.load(json_obj)

    for item in data['objects']:
        print item['name']
        print item['phone']

我已经像这样添加到我的 urls.py 中:

from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.views.generic import TemplateView

from django.contrib import admin


urlpatterns = patterns(
"",
url(r"^$", TemplateView.as_view(template_name="homepage.html"), name="home"),
url(r"^admin/", include(admin.site.urls)),
url(r"^account/", include("account.urls")),
url(r"^api/", 'loc_search', name="search"),
)

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我是否在我的网址中正确调用它?我的 api 文件和我的 urls.py 一起在我的主文件夹中吗?话虽这么说,然后我在我的表格中这样称呼它:

          <form action="{% url "search" %}">
<div class="input-group">
<input id="address" type="textbox" placeholder="City or Zipcode" class="form-control">
<span class="input-group-btn">
<button class="btn btn-default" type="button" id="addressSearch">Search</button>
</span>
</div>
</form>

但是当我搜索时,什么也没有发生。据我所知,我相信我已经正确设置了它,但我显然错了,我对 django 还很陌生,所以任何帮助都将不胜感激

【问题讨论】:

  • 好吧,你的 loc_search 函数似乎没有返回任何东西,所以你一定是从 Django 得到一个异常。
  • 不返回姓名和电话号码吗?当我在 python shell 中测试它时它确实如此
  • 不,它将它们打印到控制台,它不会返回它们。同样,Django 将向您显示一条错误消息,因为必须从视图返回响应。您应该阅读该错误。
  • 打印它们,这与返回值有很大不同(在 Django 视图中意义不大)。
  • 我明白了,点了,那么有什么简单的方法来测试这个,比如直接打印到文本框中?

标签: python django api url


【解决方案1】:

第一个问题是你的 api 调用

我强烈建议你使用 requests 否则你会做像 locality = query.replace(' ', '%20') 这样的东西,它对空格进行 urlencodes 但是像 öäü + * 这样的所有其他东西呢?等等?

import requests

api_params = {'api_key':locu_api, 'locality': locality, 'category':'restaurant'}
apicall = requests.get(api_url, params=api_params)
json_respons = apicall.json()

您的第二个问题是(Daniel Roseman 提到过)这是一个视图(应该在 views.py 中)并且必须返回一个 http 响应。 docs

复制粘贴

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    # this will return a html as a http response
    return HttpResponse(html)

在询问基础知识之前,您应该先咨询django tutorial

【讨论】:

  • 非常感谢大家,我一回到家就试试这个并告诉你
猜你喜欢
  • 2014-10-15
  • 1970-01-01
  • 2019-07-03
  • 2020-08-29
  • 2013-02-26
  • 2021-11-25
  • 2022-12-03
  • 2020-08-29
  • 1970-01-01
相关资源
最近更新 更多