如何将数据传递给基于类的视图的方法?

时间:2019-06-02 17:16:26

标签: django django-rest-framework django-views

我试图弄清楚如何将数据从表单传递到用作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方法。我希望我的问题很清楚。

2 个答案:

答案 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'的字符串。