所以,问题是我无法将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))
答案 0 :(得分:3)
您的axios.get
和private
视图之间不匹配。在axios.get
中,您通过GET参数(查询字符串)传递数据。在网址格式中,您将city
参数写为网址的一部分。
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
看起来像这样:
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 || ''
})
}