diff --git a/bookwyrm/templates/preferences/export.html b/bookwyrm/templates/preferences/export.html index 8650514425..61933be3e1 100644 --- a/bookwyrm/templates/preferences/export.html +++ b/bookwyrm/templates/preferences/export.html @@ -13,10 +13,13 @@ {% trans "Your export will include all the books on your shelves, books you have reviewed, and books with reading activity." %}

- - - Download file - +

+ {% csrf_token %} + +

{% endblock %} diff --git a/bookwyrm/tests/views/test_export.py b/bookwyrm/tests/views/preferences/test_export.py similarity index 96% rename from bookwyrm/tests/views/test_export.py rename to bookwyrm/tests/views/preferences/test_export.py index 44c3241647..7b13989f32 100644 --- a/bookwyrm/tests/views/test_export.py +++ b/bookwyrm/tests/views/preferences/test_export.py @@ -54,9 +54,9 @@ def test_export_file(self, *_): user=self.local_user, book=self.book, ) - request = self.factory.get("") + request = self.factory.post("") request.user = self.local_user - export = views.export_user_book_data(request) + export = views.Export.as_view()(request) self.assertIsInstance(export, StreamingHttpResponse) self.assertEqual(export.status_code, 200) result = list(export.streaming_content) diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index cbb468d5a0..faae7dacad 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -482,11 +482,6 @@ name="prefs-password", ), re_path(r"^preferences/export/?$", views.Export.as_view(), name="prefs-export"), - re_path( - r"^preferences/export/file/?$", - views.export_user_book_data, - name="prefs-export-file", - ), re_path(r"^preferences/delete/?$", views.DeleteUser.as_view(), name="prefs-delete"), re_path(r"^preferences/block/?$", views.Block.as_view(), name="prefs-block"), re_path(r"^block/(?P\d+)/?$", views.Block.as_view()), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 2d085b02d9..f199293c01 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -28,7 +28,7 @@ # user preferences from .preferences.change_password import ChangePassword from .preferences.edit_user import EditUser -from .preferences.export import Export, export_user_book_data +from .preferences.export import Export from .preferences.delete_user import DeleteUser from .preferences.block import Block, unblock diff --git a/bookwyrm/views/preferences/export.py b/bookwyrm/views/preferences/export.py index c0015fb86b..2582dda3cc 100644 --- a/bookwyrm/views/preferences/export.py +++ b/bookwyrm/views/preferences/export.py @@ -7,7 +7,6 @@ from django.template.response import TemplateResponse from django.views import View from django.utils.decorators import method_decorator -from django.views.decorators.http import require_GET from bookwyrm import models @@ -20,35 +19,34 @@ def get(self, request): """Request csv file""" return TemplateResponse(request, "preferences/export.html") - -@login_required -@require_GET -def export_user_book_data(request): - """Streaming the csv file of a user's book data""" - data = ( - models.Edition.viewer_aware_objects(request.user) - .filter( - Q(shelves__user=request.user) - | Q(readthrough__user=request.user) - | Q(review__user=request.user) - | Q(comment__user=request.user) - | Q(quotation__user=request.user) + def post(self, request): + """Streaming the csv file of a user's book data""" + data = ( + models.Edition.viewer_aware_objects(request.user) + .filter( + Q(shelves__user=request.user) + | Q(readthrough__user=request.user) + | Q(review__user=request.user) + | Q(comment__user=request.user) + | Q(quotation__user=request.user) + ) + .distinct() ) - .distinct() - ) - generator = csv_row_generator(data, request.user) + generator = csv_row_generator(data, request.user) - pseudo_buffer = Echo() - writer = csv.writer(pseudo_buffer) - # for testing, if you want to see the results in the browser: - # from django.http import JsonResponse - # return JsonResponse(list(generator), safe=False) - return StreamingHttpResponse( - (writer.writerow(row) for row in generator), - content_type="text/csv", - headers={"Content-Disposition": 'attachment; filename="bookwyrm-export.csv"'}, - ) + pseudo_buffer = Echo() + writer = csv.writer(pseudo_buffer) + # for testing, if you want to see the results in the browser: + # from django.http import JsonResponse + # return JsonResponse(list(generator), safe=False) + return StreamingHttpResponse( + (writer.writerow(row) for row in generator), + content_type="text/csv", + headers={ + "Content-Disposition": 'attachment; filename="bookwyrm-export.csv"' + }, + ) def csv_row_generator(books, user):