Как передать данные в метод представления на основе класса? - PullRequest
2 голосов
/ 02 июня 2019

Я пытаюсь выяснить, как передать данные из формы в метод представления на основе классов, который служит конечной точкой API.

Просмотр домашней страницы (есть форма для ввода тикера):

def home(request):

# data = get_stock_data('TSLA', key)

if request.method == 'POST':
    form = TickerForm(request.POST)
    if form.is_valid():
        ticker = form.cleaned_data['ticker']
        stock_data = get_stock_data(ticker, api_key)
        return redirect('chart-data', ticker=ticker) # this line I am having trouble with

else:
    form = TickerForm()
    stock_data = None

return render(request, 'app/home.html', {'data': stock_data, 'form':form})

Представление API:

class ChartData(APIView):

authentication_classes = []
permission_classes = []

def get(self, request, ticker, format=None):
    # get stock data
    stock_data = get_stock_data(ticker, api_key) # how do I pass the ticker?
    labels = []
    default_items = []
    # get label & values
    for key, value in stock_data.items():
        labels.append(key)
        default_items.append(value['4. close'])
    # prepare data
    data = {
        'labels': labels[::-1],
        'default_items': default_items[::-1]
    }
    return Response(data)

urls.py

urlpatterns = [
   path('', views.home, name="homepage"),
   path('api/chart/data', views.ChartData.as_view(), name="chart-data"),
]

Затем я получаю данные с помощью Javascript и отображаю график на внешнем интерфейсе, который работает нормально. Единственное, что я не могу понять, как передать аргумент тикера в метод get моего представления ChartData. Я надеюсь, что моя проблема ясна.

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Вы должны включить ticker в путь URL.

path('api/chart/data/<slug:ticker>/', views.ChartData.as_view(), name="chart-data"),

Предполагается, что ticker является строкой типа 'TSLA'.

0 голосов
/ 02 июня 2019
   return redirect('chart-data', {'ticker':ticker})

Я должен использовать словарь, я полагаю ...

...