Джанго + Вью. Не удается подключить параметры - PullRequest
0 голосов
/ 16 сентября 2018

Итак, проблема в том, что я не могу соединить 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 url:

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 голосов
/ 16 сентября 2018

Несоответствие между вашим axios.get и private представлением.В вашем axios.get вы передаете данные через параметры GET (строка запроса).Находясь в шаблонах URL, вы записываете параметр city как часть URL.

Использование строки запроса (GET параметры)

Вы можете дляНапример, измените значение urlpatterns на:

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

В представлении вы можете получить значение, связанное с city через:

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

В случае cityпараметр отсутствует в строке запроса, здесь city будет None, поэтому, возможно, вы захотите проверить это.

Использование URL

Мы также можем закодировать параметр в URLв этом случае вам нужно будет выполнить некоторое форматирование, чтобы url выглядело так:

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