Skip to content

Commit

Permalink
View → MethodView
Browse files Browse the repository at this point in the history
  • Loading branch information
pierre-24 committed Aug 13, 2024
1 parent 012664c commit 19e848c
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 100 deletions.
59 changes: 9 additions & 50 deletions AM_Nihoul_website/admin/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import bs4
import flask
from flask import Blueprint, jsonify, current_app
from flask.views import View
from flask.views import MethodView
import flask_login
from flask_login import login_required
from flask_uploads import UploadNotAllowed
Expand Down Expand Up @@ -248,7 +248,7 @@ def post_deletion(self, obj):
admin_blueprint.add_url_rule('/page-suppression-<int:id>.html', view_func=PageDeleteView.as_view('page-delete'))


class PageToggleVisibility(AdminBaseMixin, ObjectManagementMixin, View):
class PageToggleVisibility(AdminBaseMixin, ObjectManagementMixin, MethodView):
methods = ['GET']
model = Page

Expand All @@ -261,12 +261,6 @@ def get(self, *args, **kwargs):

return flask.redirect(flask.url_for('admin.pages'))

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


admin_blueprint.add_url_rule(
'/page-visible-<int:id>.html', view_func=PageToggleVisibility.as_view('page-toggle-visibility'))
Expand Down Expand Up @@ -329,7 +323,7 @@ def post_deletion(self, obj):
'/catégorie-suppression-<int:id>.html', view_func=CategoryDeleteView.as_view('category-delete'))


class BaseMoveView(AdminBaseMixin, ObjectManagementMixin, View):
class BaseMoveView(AdminBaseMixin, ObjectManagementMixin, MethodView):
redirect_url = ''
methods = ['GET']

Expand All @@ -346,12 +340,6 @@ def get(self, *args, **kwargs):

return flask.redirect(flask.url_for(self.redirect_url))

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


class CategoryMoveView(BaseMoveView):
model = Category
Expand All @@ -362,7 +350,7 @@ class CategoryMoveView(BaseMoveView):
'/catégorie-mouvement-<string:action>-<int:id>.html', view_func=CategoryMoveView.as_view('category-move'))


class CategoryToggleVisibility(AdminBaseMixin, ObjectManagementMixin, View):
class CategoryToggleVisibility(AdminBaseMixin, ObjectManagementMixin, MethodView):
methods = ['GET']
model = Category

Expand All @@ -375,12 +363,6 @@ def get(self, *args, **kwargs):

return flask.redirect(flask.url_for('admin.categories'))

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


admin_blueprint.add_url_rule(
'/catégorie-visible-<int:id>.html', view_func=CategoryToggleVisibility.as_view('category-toggle-visibility'))
Expand Down Expand Up @@ -438,7 +420,7 @@ def form_valid(self, form):
admin_blueprint.add_url_rule('/fichiers.html', view_func=FilesView.as_view('files'))


class UploadBase64(AdminBaseMixin, View):
class UploadBase64(AdminBaseMixin, MethodView):
"""Upload an image as base64 encoded string"""

methods = ['POST']
Expand Down Expand Up @@ -496,12 +478,6 @@ def post(self, *args, **kwargs):
return jsonify(
success=True, url=flask.url_for('visitor.upload-view', id=u.id, filename=u.file_name, _external=True))

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'POST':
return self.post(*args, **kwargs)
else:
flask.abort(403)


admin_blueprint.add_url_rule('/api/image-base64', view_func=UploadBase64.as_view('image-base64'))

Expand Down Expand Up @@ -649,8 +625,9 @@ def post_deletion(self, obj):
'/infolettre-suppression-<int:id>.html', view_func=NewsletterDeleteView.as_view('newsletter-delete'))


class NewsletterCleanupView(AdminBaseMixin, ObjectManagementMixin, View):
class NewsletterCleanupView(AdminBaseMixin, ObjectManagementMixin, MethodView):
model = Newsletter
methods = ['GET']

def get(self, *args, **kwargs):
self.get_object_or_abort(*args, **kwargs)
Expand Down Expand Up @@ -712,12 +689,6 @@ def clean_empty(tag):
flask.flash('Le code a été nettoyé!')
return flask.redirect(flask.url_for('admin.newsletters'))

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


admin_blueprint.add_url_rule(
'/infolettre-nettoyage-<int:id>.html', view_func=NewsletterCleanupView.as_view('newsletter-cleanup'))
Expand Down Expand Up @@ -1064,7 +1035,7 @@ def form_valid(self, form):
'/album-<int:id>-upload.html', view_func=AlbumDropzoneUpload.as_view(name='album-dropzone-upload'))


class AlbumSetThumbnailView(AdminBaseMixin, ObjectManagementMixin, View):
class AlbumSetThumbnailView(AdminBaseMixin, ObjectManagementMixin, MethodView):
methods = ['GET']
model = Album

Expand All @@ -1083,12 +1054,6 @@ def get(self, *args, **kwargs):

return flask.redirect(flask.url_for('admin.album', id=self.object.id))

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


admin_blueprint.add_url_rule(
'/album-<int:id>-miniature-<int:picture>.html', view_func=AlbumSetThumbnailView.as_view(name='album-set-thumbnail'))
Expand Down Expand Up @@ -1197,7 +1162,7 @@ def post_deletion(self, obj):
admin_blueprint.add_url_rule('/brève-suppression-<int:id>.html', view_func=BriefDeleteView.as_view('brief-delete'))


class BriefToggleVisibility(AdminBaseMixin, ObjectManagementMixin, View):
class BriefToggleVisibility(AdminBaseMixin, ObjectManagementMixin, MethodView):
methods = ['GET']
model = Brief

Expand All @@ -1210,12 +1175,6 @@ def get(self, *args, **kwargs):

return flask.redirect(flask.url_for('admin.briefs'))

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


admin_blueprint.add_url_rule(
'/brève-visible-<int:id>.html', view_func=BriefToggleVisibility.as_view('brief-toggle-visibility'))
Expand Down
30 changes: 3 additions & 27 deletions AM_Nihoul_website/base_views.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import flask
from flask.views import View
from flask.views import MethodView

import AM_Nihoul_website
from AM_Nihoul_website import db
from AM_Nihoul_website.visitor.forms import NewsletterForm
from AM_Nihoul_website.visitor.models import MenuType


class RenderTemplateView(View):
class RenderTemplateView(MethodView):
methods = ['GET']
template_name = None

Expand All @@ -23,12 +23,6 @@ def get(self, *args, **kwargs):
context_data = self.get_context_data(*args, **kwargs)
return flask.render_template(self.template_name, **context_data)

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


class FormView(RenderTemplateView):

Expand Down Expand Up @@ -92,17 +86,8 @@ def form_invalid(self, form):
else:
return flask.redirect(self.failure_url)

def dispatch_request(self, *args, **kwargs):

if flask.request.method == 'POST':
return self.post(*args, **kwargs)
elif flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


class DeleteView(View):
class DeleteView(MethodView):

methods = ['POST', 'DELETE']
success_url = '/'
Expand Down Expand Up @@ -133,15 +118,6 @@ def delete(self, *args, **kwargs):

return flask.redirect(self.success_url)

def dispatch_request(self, *args, **kwargs):

if flask.request.method == 'POST':
return self.delete(*args, **kwargs)
elif flask.request.method == 'DELETE':
return self.delete(*args, **kwargs)
else:
flask.abort(403)


# --- Object management
class ObjectManagementMixin:
Expand Down
6 changes: 4 additions & 2 deletions AM_Nihoul_website/tests/tests_categories.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@ def test_category_edit_not_admin_ko(self):
def test_category_delete_ok(self):
self.assertEqual(Category.query.count(), self.num_cat)

response = self.client.post(flask.url_for('admin.category-delete', id=self.category.id), follow_redirects=False)
response = self.client.delete(
flask.url_for('admin.category-delete', id=self.category.id), follow_redirects=False)
self.assertEqual(response.status_code, 302)

self.assertEqual(Category.query.count(), self.num_cat - 1)
Expand All @@ -100,7 +101,8 @@ def test_category_delete_not_admin_ko(self):
self.assertEqual(Category.query.count(), self.num_cat)
self.logout()

response = self.client.post(flask.url_for('admin.category-delete', id=self.category.id), follow_redirects=False)
response = self.client.delete(
flask.url_for('admin.category-delete', id=self.category.id), follow_redirects=False)
self.assertEqual(response.status_code, 302)

self.assertEqual(Category.query.count(), self.num_cat)
Expand Down
24 changes: 3 additions & 21 deletions AM_Nihoul_website/visitor/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ def get(self, *args, **kwargs):
"""


class RobotsView(views.View):
class RobotsView(views.MethodView):
methods = ['GET']

def get(self, *args, **kwargs):
Expand All @@ -121,12 +121,6 @@ def get(self, *args, **kwargs):

return response

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


visitor_blueprint.add_url_rule('/robots.txt', view_func=RobotsView.as_view(name='robots'))

Expand Down Expand Up @@ -162,7 +156,7 @@ def get_context_data(self, *args, **kwargs):


# -- Uploads
class UploadView(ObjectManagementMixin, views.View):
class UploadView(ObjectManagementMixin, views.MethodView):
methods = ['GET']
model = UploadedFile

Expand All @@ -185,12 +179,6 @@ def get(self, *args, **kwargs):

return response

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


visitor_blueprint.add_url_rule('/fichier/<int:id>/<string:filename>', view_func=UploadView.as_view(name='upload-view'))

Expand Down Expand Up @@ -263,7 +251,7 @@ def form_valid(self, form):
'/infolettres-inscription.html', view_func=NewsletterRegisterView.as_view(name='newsletter-subscribe'))


class BaseNewsletterMixin(BaseMixin, ObjectManagementMixin, views.View):
class BaseNewsletterMixin(BaseMixin, ObjectManagementMixin, views.MethodView):
model = NewsletterRecipient

def get_object_or_abort(self, error_code=404, *args, **kwargs):
Expand All @@ -275,12 +263,6 @@ def get_object_or_abort(self, error_code=404, *args, **kwargs):
def get(self, *args, **kwargs):
raise NotImplementedError()

def dispatch_request(self, *args, **kwargs):
if flask.request.method == 'GET':
return self.get(*args, **kwargs)
else:
flask.abort(403)


class NewsletterSubscribeConfirmView(BaseNewsletterMixin):

Expand Down

0 comments on commit 19e848c

Please sign in to comment.