0
私はquerysetをcsvファイルに変換しています。しかし、ブラウザは返されたcsvファイルをダウンロードしていません。私はクロムです。Django HttpResponse csvを生成していますが、ダウンロードしていません
class CSVMixin(object):
csv_filename = 'csvfile.csv'
def get_csv_filename(self):
return self.csv_filename
def render_to_csv(self, queryset):
response = HttpResponse(content_type='text/csv')
cd = 'attachment; filename="{0}"'.format(self.get_csv_filename())
response['Content-Disposition'] = cd
headers = queryset[0].keys()
dict_writer = csv.DictWriter(response, fieldnames=headers)
dict_writer.writeheader()
dict_writer.writerows(queryset)
return response
class EmailCampaignViewSet(CSVMixin, OrionAdminModelViewset):
queryset = MyObject.objects.all()
pagination_class = DefaultLimitOffsetPagination
filter_class = EmailCampaignFilter
@list_route()
def report(self, request):
query = self.request.query_params
data_format = query['data_format'] if query['data_format'] else None
if data_format == 'csv':
return self.render_to_csv(queryset)
レポートルートを呼び出すと、応答の中にcsv形式のテキストが表示されます。しかし、それはダウンロードを誘発していません。ここで
は反応するから私の要求です:
this.getReport = (format="json") => {
this.setState({btnDisabled: true});
const requestObj = {
method: 'GET',
headers: {
'Authorization': 'Token ' + this.props.session_token,
'Content-Type': 'application/json',
}
};
const uri = new URI(`${API_ENDPOINT}/email-campaign/report`);
const campaigns = this.state.campaignList.map((campaign)=>(
campaign.value
));
uri.setSearch({
campaigns: [campaigns],
date_from: stringToDateISOString(this.state.dateFrom),
date_to: stringToDateISOString(this.state.dateTo),
data_format: format,
});
return fetch(uri.toString(), requestObj).then(restJSONResponseToPromise).then(responseJSON => {
if (responseJSON.results){
this.setState({report: responseJSON.results, btnDisabled: false});
}
}, (response) => {
clearSessionIfInvalidToken(this.props.clearSession);
this.setState({btnDisabled: false});
});
}
レスポンスヘッダ:
HTTP/1.0 200 OK
日:月、2017年6月12日夜七時58分03秒GMT
サーバー:WSGIServer/0.2 CPython/3.5.3
コンテンツタイプ:text/csv
X-フレーム・オプション:SAMEORIGIN
アクセス制御が許原産地:http://localhost:3000
ヴァリ:、原産地
を受け入れ許可:GET、OPTIONS
コンテンツディスポジション:アタッチメント; filename = emailcampaign_export.csv;
のCache-Control:キャッシュなし
あなたのミックスインが正しく見えます。あなたのビューに 'data_format'がどこに定義されていますか?あなたはそれが誤りではないと確信していますか? – Brobin
私は誤りではない、私は質問にその行を含めることを忘れていた。私はレスポンスボディに期待されるcsvと共に、200のhttpレスポンスを得ました。そのファイルは私のシステムにダウンロードされていません。 –
http応答にContent-Dispositionヘッダーがありますか? https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition –