{"id":3165,"date":"2025-02-08T00:41:40","date_gmt":"2025-02-07T23:41:40","guid":{"rendered":"https:\/\/j-mad.com\/blog\/?p=3165"},"modified":"2025-02-08T00:41:43","modified_gmt":"2025-02-07T23:41:43","slug":"petites-decouvertes-ou-redecouvertes-des-derniers-jours","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2025\/02\/08\/petites-decouvertes-ou-redecouvertes-des-derniers-jours\/","title":{"rendered":"Petites d\u00e9couvertes ou red\u00e9couvertes des derniers jours."},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Le CSRF , mais pourquoi faire ?<\/h2>\n\n\n\n<p>Imaginons, juste comme \u00e7a hypoth\u00e9tiquement, que vous vouliez d\u00e9sactiver de mani\u00e8re globale la protection CSRF sur la totalit\u00e9 des urls d\u2019un site django.<\/p>\n\n\n\n<p>Vous pensez qu\u2019il suffit de d\u00e9sactiver le middleware qui va bien (soit <strong>django.middleware.csrf.CsrfViewMiddleware<\/strong> ) pour que op c\u2019est bon, la v\u00e9rification CSRF n\u2019est plus mise en place ?<\/p>\n\n\n\n<p>Vous serez alors d\u00e9contenanc\u00e9 de voir que non, cela ne suffit pas. Il faut aussi ajouter le d\u00e9corateur <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">csrf_exempt<\/mark><\/strong> ( qui se trouve dans django.views.decorators.csrf ) sur chacune de vos urls. Un peu compliqu\u00e9 en vrai, surtout si vous avez beaucoup d&#8217;urls.\u00a0_<\/p>\n\n\n\n<p>Comment faire ?<\/p>\n\n\n\n<p>Tout simplement coder un middleware qui va l\u2019enlever pour vous. Vous n\u2019aurez ensuite qu\u2019\u00e0 le d\u00e9clarer dans les middleware actifs.<\/p>\n\n\n\n<pre class=\"wp-block-code\">\n\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:435px;\"><div class=\"text codecolorer\">class NOCSRFMiddleware(object):<br \/>\ndef __init__(self, get_response):<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; self.get_response = get_response<br \/>\n<br \/>\n&nbsp; &nbsp; def __call__(self, request):<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; setattr(request, '_dont_enforce_csrf_checks', True)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; response = self.get_response(request)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; return response<\/div><\/div>\n\n<\/pre>\n\n\n\n<p>Et voila ! Il suffit ensuite de le d\u00e9clarer dans MIDDLEWARE et le tour est jou\u00e9 ( par exemple avec un \u00a0BadIdeaApp.BadMiddleware.NOCSRFMiddleware<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Groupons, Groupons, Groupons !!!<\/h2>\n\n\n\n<p>J\u2019avais totalement oubli\u00e9 l\u2019existence du templatetags <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">regroup<\/mark><\/strong> qui permet de regrouper des objets identique par un attribut commun. Comme regrouper une liste de dictionnaires par les valeurs de l\u2019un des attributs. La documentation compl\u00e8te est disponible ici : <a href=\"https:\/\/docs.djangoproject.com\/en\/4.2\/ref\/templates\/builtins\/#regroup\">https:\/\/docs.djangoproject.com\/en\/4.2\/ref\/templates\/builtins\/#regroup<\/a><\/p>\n\n\n\n<p>Et red\u00e9couvrir ce templatetags m\u2019a \u00e9t\u00e9 bien utile. Surtout en le couplant avec un autre templatetags que j\u2019avais \u00e9galement oubli\u00e9, <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">dicsort<\/mark><\/strong> ( <a href=\"https:\/\/docs.djangoproject.com\/fr\/4.2\/ref\/templates\/builtins\/#std-templatefilter-dictsort\">https:\/\/docs.djangoproject.com\/fr\/4.2\/ref\/templates\/builtins\/#std-templatefilter-dictsort<\/a>) qui va trier une liste de dictionnaire par une des cl\u00e9s des dictionnaires.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le CSRF , mais pourquoi faire ? Imaginons, juste comme \u00e7a hypoth\u00e9tiquement, que vous vouliez d\u00e9sactiver de mani\u00e8re globale la protection CSRF sur la totalit\u00e9 des urls d\u2019un site django. Vous pensez qu\u2019il suffit de d\u00e9sactiver le middleware qui va bien (soit django.middleware.csrf.CsrfViewMiddleware ) pour que op c\u2019est bon, la v\u00e9rification CSRF n\u2019est plus mise &hellip; <a href=\"https:\/\/j-mad.com\/blog\/2025\/02\/08\/petites-decouvertes-ou-redecouvertes-des-derniers-jours\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Petites d\u00e9couvertes ou red\u00e9couvertes des derniers jours.<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[6],"tags":[],"class_list":["post-3165","post","type-post","status-publish","format-standard","hentry","category-django"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-P3","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/3165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/comments?post=3165"}],"version-history":[{"count":2,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/3165\/revisions"}],"predecessor-version":[{"id":3167,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/3165\/revisions\/3167"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=3165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=3165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=3165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}