Django + Vue。无法连接参数

时间:2018-09-16 13:24:44

标签: python django api vue.js django-rest-framework

所以,问题是我无法将Django REST与Vue连接。当我从客户端调用API时,它说:

Not Found: /api/private/
[16/Sep/2018 13:18:59] "GET /api/private/?city=London HTTP/1.1" 404 2129

这是我的代码:

Vue功能

callWeather () {
      const url = `${API_URL}/api/private/`
      return axios.get(url, {
        headers: {
          Authorization: `Bearer ${AuthService.getAuthToken()}`
        },
        params: {
          'city': 'London'
        }
      }).then((response) => {
        console.log(response.data)
        this.message = response.data || ''
      })
    }

Django api网址:

urlpatterns = [
    url(r'^api/public/', views.public),
    url(r'^api/private/(?P<city>\w+)/$', views.private)
]

Django私人功能:

@api_view(['GET'])
def private(request, city):
    return HttpResponse("City is: {}.".format(city))

1 个答案:

答案 0 :(得分:3)

您的axios.getprivate视图之间不匹配。在axios.get中,您通过GET参数(查询字符串)传递数据。在网址格式中,您将city参数写为网址的一部分。

使用 querystring GET参数)

例如,您可以将urlpatterns更改为:

urlpatterns = [
    url(r'^api/public/', views.public),
    url(r'^api/private/$', views.private)
]

然后,在视图中,您可以通过以下方式获取与city关联的值:

@api_view(['GET'])
def private(request):
    city = request.GET.get('city')
    return HttpResponse("City is: {}.".format(city))

如果city参数不在查询字符串中,这里的city将是None,所以也许您想检查一下。

使用URL

我们还可以在URL中对参数进行编码,在这种情况下,您将需要进行一些格式化,以使url看起来像这样:

callWeather () {
      const url = '${API_URL}/api/private/London/'
      return axios.get(url, {
        headers: {
          Authorization: 'Bearer ${AuthService.getAuthToken()}'
        },
      }).then((response) => {
        console.log(response.data)
        this.message = response.data || ''
      })
    }