我试图弄清楚如何将数据从表单传递到用作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获取数据,并在前端显示图形,效果很好。我唯一不知道如何将代码参数传递给ChartData视图的get方法。我希望我的问题很清楚。
答案 0 :(得分:0)
return redirect('chart-data', {'ticker':ticker})
我相信必须使用字典
答案 1 :(得分:0)
您应该在网址路径中包含ticker
。
path('api/chart/data/<slug:ticker>/', views.ChartData.as_view(), name="chart-data"),
这假设ticker
是一个类似'TSLA'的字符串。