Django在发布请求后下载csv

the_gañañufla

我想创建一个端点,在这个端点中它可以发送POST请求,如果POST请求经过验证,则该页面下载一个csv

我创建了序列化器表单来轻松验证接收到的数据

我的问题是csv可以轻松地下载到HttpResponse中,但是我需要必要的东西才能在发送请求时制作一个端点并验证数据。

我的主要问题是我无法exportvalidation

这是我的档案

#urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^hello-view/', views.HelloApiView.as_view()),
]

序列化器

#serializers.py
from rest_framework import serializers

class HelloSerializer(serializers.Serializer):
    """Serializes a name field """

    name = serializers.CharField(max_length=100)
    seller_id =  serializers.CharField(max_length=100)

    def validate_name(self, dob):
        UnitOfMeasureName = ["Each", "Grams", "Ounces", "Pounds", "Kilograms", "Metric Tons"]
        if dob in UnitOfMeasureName:
            return dob
        else:
            raise serializers.ValidationError('Wrong username')

和视图文件在此文件中,我创建了导出功能以尝试导出csv数据,但不起作用

import csv
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework import viewsets
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

from . import serializers


class HelloApiView(APIView):

    def export(self, request):
        response = HttpResponse(content_type='text/csv')
        writer = csv.writer(response)
        writer.writerow(['First name', 'Last name', 'ID'])

        response['Content-Disposition'] = 'attachment; filename="one.csv"'
        return response

    serializer_class = serializers.HelloSerializer

    def get(self, request, format=None):

        an_apiview = [
            'Uses HTTP METHOD as function',
            'Its is similar to a traditional django view'
        ]

        return Response({'message': 'Hello', 'anapi': an_apiview})

    def post(self, request):
        serializer = serializers.HelloSerializer(data = request.data)

        if serializer.is_valid():
                in this place i want to return the file


        else:
            return Response(
                serializer.errors, status = status.HTTP_400_BAD_REQUEST)
迈克尔·罗姆雷尔

将新端点添加到您的urls.py文件中

#urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^hello-view/', views.HelloApiView.as_view()),
    url(r'^csv_download/$', views.csv_download, name="csv_download"),
]

然后,在您的views.py文件中,添加一个名为的函数csv_download并将所有内容移到那里(这可能是不必要的,但这肯定会使代码更清晰,可读性更高)

# views.py

import csv
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework import viewsets
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

from . import serializers


class HelloApiView(APIView):
    def get(self, request, format=None):
        an_apiview = [
            'Uses HTTP METHOD as function',
            'Its is similar to a traditional django view'
        ]
        return Response({'message': 'Hello', 'anapi': an_apiview})


def csv_download(request):


    if request.method == 'POST':
        serializer_class = serializers.HelloSerializer
        serializer = serializers.HelloSerializer(data = request.data)
        if serializer.is_valid():
            response = HttpResponse(content_type='text/csv')
            response['Content-Disposition'] = 'attachment; filename="one.csv"'
            writer = csv.writer(response,delimiter=',') # I always like to specify the delimeter
            writer.writerow(['First name', 'Last name', 'ID'])



            #Then you may actually want to write some data to the CSV file, currently, you've only defined the headers (first row). An example would be like:
            for value in list_of_objects:
                writer.writerow([
                value.first_name,
                value.last_name,
                value.id
                ])

            return response


        else:
            return Response(
                serializer.errors, status = status.HTTP_400_BAD_REQUEST)

    else:
        # redirect them or do something here if they hit this URL without a POST request

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用CasperJS单击链接后下载CSV

来自分类Dev

添加CSV文件后下载的zip存档为空

来自分类Dev

Flask:单击按钮后下载一个csv文件

来自分类Dev

添加CSV文件后下载的zip存档为空

来自分类Dev

按下按钮然后下载csv文件

来自分类Dev

通过发布将数据发送到php,然后下载

来自分类Dev

Django Ajax发布请求

来自分类Dev

使用python请求下载CSV

来自分类Dev

Django发布请求数据

来自分类Dev

发布请求Django REST框架

来自分类Dev

使用EPPlus创建后下载Excel文件

来自分类Dev

XMLHttpRequest POST后下载png文件

来自分类Dev

压缩所有文件,然后下载

来自分类Dev

带发布请求的angular2下载文件

来自分类Dev

Net :: HTTP在发布请求后未开始下载文件

来自分类Dev

带发布请求的angular2下载文件

来自分类Dev

使用ImageLoad(Android)下载图像后下载URL

来自分类Dev

Django从外部来源接收json发布请求

来自分类Dev

在Django中使用ModelFormSet测试发布请求

来自分类Dev

Django和python的AJAX发布请求

来自分类Dev

Django从外部来源接收json发布请求

来自分类Dev

使用 django 1.10.5 的 Ajax 发布请求错误

来自分类Dev

Django 测试发布请求耗尽数据

来自分类Dev

使用setuptools,如何在安装后下载外部数据?

来自分类Dev

使用PHP导出数据后下载的文件为空

来自分类Dev

使用setuptools,如何在安装后下载外部数据?

来自分类Dev

将blob转换为文件然后下载

来自分类Dev

Django从模型数据库下载csv

来自分类Dev

从我的项目路径django下载csv文件