使用 Django url 在按钮单击上执行 api 函数 - Django/Python

execute api function on button click using Django urls - Django/Python

就目前而言,我已经设置了我的网站,并且有一个搜索栏和搜索按钮,我希望在我的 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 还很陌生,所以非常感谢任何帮助

第一个问题是您的 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 中)并且必须 return 一个 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