[v2,2/9] urls: Use new login/password change CBVs

Message ID 20171102102844.18931-3-stephen@that.guru
State New
Headers show
Series
  • Add support for Django 1.11
Related show

Commit Message

Stephen Finucane Nov. 2, 2017, 10:28 a.m.
The function based views are deprecated in Django 1.11 [1], so support
the newer class based views.

[1] https://docs.djangoproject.com/en/dev/releases/1.11/#id2

Signed-off-by: Stephen Finucane <stephen@that.guru>
---
 patchwork/urls.py | 94 +++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 70 insertions(+), 24 deletions(-)

Comments

Daniel Axtens Nov. 16, 2017, 9:59 a.m. | #1
Hi Stephen,

I have 2 changes:
 - fixed a > where >= was probably intended
 - use reverse_lazy in url patterns - fixes a bug in my testing, see:
     https://docs.djangoproject.com/en/1.11/ref/urlresolvers/#reverse-lazy
     http://www.boxtricks.com/keyerror-en-us-when-doing-a-reverse-lookup-in-urls-py/

The following diff on top of your patch should be sufficient, apart from
that it looks good to me. Feel free to add my Signed-off to this patch
if you apply it.

diff --git a/patchwork/compat.py b/patchwork/compat.py
index 38a844d93d03..b609aab487ca 100644
--- a/patchwork/compat.py
+++ b/patchwork/compat.py
@@ -86,9 +86,11 @@ if settings.ENABLE_REST_API:
 if django.VERSION >= (1, 10):
     from django.urls import NoReverseMatch  # noqa
     from django.urls import reverse  # noqa
+    from django.urls import reverse_lazy  # noqa
 else:
     from django.core.urlresolvers import NoReverseMatch  # noqa
     from django.core.urlresolvers import reverse  # noqa
+    from django.core.urlresolvers import reverse_lazy  # noqa
diff --git a/patchwork/urls.py b/patchwork/urls.py
index 6d49d648f635..719347220a86 100644
--- a/patchwork/urls.py
+++ b/patchwork/urls.py
@@ -23,7 +23,7 @@ from django.conf.urls import url, include
 from django.contrib import admin
 from django.contrib.auth import views as auth_views
 
-from patchwork.compat import reverse
+from patchwork.compat import reverse_lazy
 from patchwork.views import about as about_views
 from patchwork.views import api as api_views
 from patchwork.views import bundle as bundle_views
@@ -90,7 +90,7 @@ urlpatterns = [
 ]
 
 # password change
-if django.VERSION > (1, 11):
+if django.VERSION >= (1, 11):
     urlpatterns += [
         url(r'^user/password-change/$',
             auth_views.PasswordChangeView.as_view(),
@@ -142,7 +142,7 @@ if django.VERSION >= (1, 11):
             template_name='patchwork/login.html'),
             name='auth_login'),
         url(r'^user/logout/$', auth_views.LogoutView.as_view(
-            next_page=reverse('project-list')),
+            next_page=reverse_lazy('project-list')),
             name='auth_logout'),
     ]
 else:
@@ -151,7 +151,7 @@ else:
             {'template_name': 'patchwork/login.html'},
             name='auth_login'),
         url(r'^user/logout/$', auth_views.logout,
-            {'next_page': reverse('project-list')},
+            {'next_page': reverse_lazy('project-list')},
             name='auth_logout'),
     ]


> The function based views are deprecated in Django 1.11 [1], so support
> the newer class based views.
>
> [1] https://docs.djangoproject.com/en/dev/releases/1.11/#id2
>
> Signed-off-by: Stephen Finucane <stephen@that.guru>
> ---
>  patchwork/urls.py | 94 +++++++++++++++++++++++++++++++++++++++++--------------
>  1 file changed, 70 insertions(+), 24 deletions(-)
>
> diff --git a/patchwork/urls.py b/patchwork/urls.py
> index 285d5659..b33b01c4 100644
> --- a/patchwork/urls.py
> +++ b/patchwork/urls.py
> @@ -17,11 +17,13 @@
>  # along with Patchwork; if not, write to the Free Software
>  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
>  
> +import django
>  from django.conf import settings
>  from django.conf.urls import url, include
>  from django.contrib import admin
>  from django.contrib.auth import views as auth_views
>  
> +from patchwork.compat import reverse
>  from patchwork.views import about as about_views
>  from patchwork.views import api as api_views
>  from patchwork.views import bundle as bundle_views
> @@ -85,32 +87,75 @@ urlpatterns = [
>          name='user-link'),
>      url(r'^user/unlink/(?P<person_id>[^/]+)/$', user_views.unlink,
>          name='user-unlink'),
> +]
>  
> -    # password change
> -    url(r'^user/password-change/$', auth_views.password_change,
> -        name='password_change'),
> -    url(r'^user/password-change/done/$', auth_views.password_change_done,
> -        name='password_change_done'),
> -    url(r'^user/password-reset/$', auth_views.password_reset,
> -        name='password_reset'),
> -    url(r'^user/password-reset/mail-sent/$', auth_views.password_reset_done,
> -        name='password_reset_done'),
> -    url(r'^user/password-reset/(?P<uidb64>[0-9A-Za-z_\-]+)/'
> -        r'(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
> -        auth_views.password_reset_confirm,
> -        name='password_reset_confirm'),
> -    url(r'^user/password-reset/complete/$',
> -        auth_views.password_reset_complete,
> -        name='password_reset_complete'),
> -
> -    # login/logout
> -    url(r'^user/login/$', auth_views.login,
> -        {'template_name': 'patchwork/login.html'},
> -        name='auth_login'),
> -    url(r'^user/logout/$', auth_views.logout,
> -        {'next_page': '/'},
> -        name='auth_logout'),
> +# password change
> +if django.VERSION > (1, 11):
> +    urlpatterns += [
> +        url(r'^user/password-change/$',
> +            auth_views.PasswordChangeView.as_view(),
> +            name='password_change'),
> +        url(r'^user/password-change/done/$',
> +            auth_views.PasswordChangeDoneView.as_view(),
> +            name='password_change_done'),
> +        url(r'^user/password-reset/$',
> +            auth_views.PasswordResetView.as_view(),
> +            name='password_reset'),
> +        url(r'^user/password-reset/mail-sent/$',
> +            auth_views.PasswordResetDoneView.as_view(),
> +            name='password_reset_done'),
> +        url(r'^user/password-reset/(?P<uidb64>[0-9A-Za-z_\-]+)/'
> +            r'(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
> +            auth_views.PasswordResetConfirmView.as_view(),
> +            name='password_reset_confirm'),
> +        url(r'^user/password-reset/complete/$',
> +            auth_views.PasswordResetCompleteView.as_view(),
> +            name='password_reset_complete'),
> +    ]
> +else:
> +    urlpatterns += [
> +        url(r'^user/password-change/$',
> +            auth_views.password_change,
> +            name='password_change'),
> +        url(r'^user/password-change/done/$',
> +            auth_views.password_change_done,
> +            name='password_change_done'),
> +        url(r'^user/password-reset/$',
> +            auth_views.password_reset,
> +            name='password_reset'),
> +        url(r'^user/password-reset/mail-sent/$',
> +            auth_views.password_reset_done,
> +            name='password_reset_done'),
> +        url(r'^user/password-reset/(?P<uidb64>[0-9A-Za-z_\-]+)/'
> +            r'(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
> +            auth_views.password_reset_confirm,
> +            name='password_reset_confirm'),
> +        url(r'^user/password-reset/complete/$',
> +            auth_views.password_reset_complete,
> +            name='password_reset_complete'),
> +    ]
>  
> +# login/logout
> +if django.VERSION >= (1, 11):
> +    urlpatterns += [
> +        url(r'^user/login/$', auth_views.LoginView.as_view(
> +            template_name='patchwork/login.html'),
> +            name='auth_login'),
> +        url(r'^user/logout/$', auth_views.LogoutView.as_view(
> +            next_page=reverse('project-list')),
> +            name='auth_logout'),
> +    ]
> +else:
> +    urlpatterns += [
> +        url(r'^user/login/$', auth_views.login,
> +            {'template_name': 'patchwork/login.html'},
> +            name='auth_login'),
> +        url(r'^user/logout/$', auth_views.logout,
> +            {'next_page': reverse('project-list')},
> +            name='auth_logout'),
> +    ]
> +
> +urlpatterns += [
>      # registration
>      url(r'^register/', user_views.register, name='user-register'),
>  
> @@ -144,6 +189,7 @@ urlpatterns = [
>  
>  if 'debug_toolbar' in settings.INSTALLED_APPS:
>      import debug_toolbar
> +
>      urlpatterns += [
>          url(r'^__debug__/', include(debug_toolbar.urls)),
>      ]
> -- 
> 2.13.6
>
> _______________________________________________
> Patchwork mailing list
> Patchwork@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork

Patch

diff --git a/patchwork/urls.py b/patchwork/urls.py
index 285d5659..b33b01c4 100644
--- a/patchwork/urls.py
+++ b/patchwork/urls.py
@@ -17,11 +17,13 @@ 
 # along with Patchwork; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
+import django
 from django.conf import settings
 from django.conf.urls import url, include
 from django.contrib import admin
 from django.contrib.auth import views as auth_views
 
+from patchwork.compat import reverse
 from patchwork.views import about as about_views
 from patchwork.views import api as api_views
 from patchwork.views import bundle as bundle_views
@@ -85,32 +87,75 @@  urlpatterns = [
         name='user-link'),
     url(r'^user/unlink/(?P<person_id>[^/]+)/$', user_views.unlink,
         name='user-unlink'),
+]
 
-    # password change
-    url(r'^user/password-change/$', auth_views.password_change,
-        name='password_change'),
-    url(r'^user/password-change/done/$', auth_views.password_change_done,
-        name='password_change_done'),
-    url(r'^user/password-reset/$', auth_views.password_reset,
-        name='password_reset'),
-    url(r'^user/password-reset/mail-sent/$', auth_views.password_reset_done,
-        name='password_reset_done'),
-    url(r'^user/password-reset/(?P<uidb64>[0-9A-Za-z_\-]+)/'
-        r'(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
-        auth_views.password_reset_confirm,
-        name='password_reset_confirm'),
-    url(r'^user/password-reset/complete/$',
-        auth_views.password_reset_complete,
-        name='password_reset_complete'),
-
-    # login/logout
-    url(r'^user/login/$', auth_views.login,
-        {'template_name': 'patchwork/login.html'},
-        name='auth_login'),
-    url(r'^user/logout/$', auth_views.logout,
-        {'next_page': '/'},
-        name='auth_logout'),
+# password change
+if django.VERSION > (1, 11):
+    urlpatterns += [
+        url(r'^user/password-change/$',
+            auth_views.PasswordChangeView.as_view(),
+            name='password_change'),
+        url(r'^user/password-change/done/$',
+            auth_views.PasswordChangeDoneView.as_view(),
+            name='password_change_done'),
+        url(r'^user/password-reset/$',
+            auth_views.PasswordResetView.as_view(),
+            name='password_reset'),
+        url(r'^user/password-reset/mail-sent/$',
+            auth_views.PasswordResetDoneView.as_view(),
+            name='password_reset_done'),
+        url(r'^user/password-reset/(?P<uidb64>[0-9A-Za-z_\-]+)/'
+            r'(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
+            auth_views.PasswordResetConfirmView.as_view(),
+            name='password_reset_confirm'),
+        url(r'^user/password-reset/complete/$',
+            auth_views.PasswordResetCompleteView.as_view(),
+            name='password_reset_complete'),
+    ]
+else:
+    urlpatterns += [
+        url(r'^user/password-change/$',
+            auth_views.password_change,
+            name='password_change'),
+        url(r'^user/password-change/done/$',
+            auth_views.password_change_done,
+            name='password_change_done'),
+        url(r'^user/password-reset/$',
+            auth_views.password_reset,
+            name='password_reset'),
+        url(r'^user/password-reset/mail-sent/$',
+            auth_views.password_reset_done,
+            name='password_reset_done'),
+        url(r'^user/password-reset/(?P<uidb64>[0-9A-Za-z_\-]+)/'
+            r'(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
+            auth_views.password_reset_confirm,
+            name='password_reset_confirm'),
+        url(r'^user/password-reset/complete/$',
+            auth_views.password_reset_complete,
+            name='password_reset_complete'),
+    ]
 
+# login/logout
+if django.VERSION >= (1, 11):
+    urlpatterns += [
+        url(r'^user/login/$', auth_views.LoginView.as_view(
+            template_name='patchwork/login.html'),
+            name='auth_login'),
+        url(r'^user/logout/$', auth_views.LogoutView.as_view(
+            next_page=reverse('project-list')),
+            name='auth_logout'),
+    ]
+else:
+    urlpatterns += [
+        url(r'^user/login/$', auth_views.login,
+            {'template_name': 'patchwork/login.html'},
+            name='auth_login'),
+        url(r'^user/logout/$', auth_views.logout,
+            {'next_page': reverse('project-list')},
+            name='auth_logout'),
+    ]
+
+urlpatterns += [
     # registration
     url(r'^register/', user_views.register, name='user-register'),
 
@@ -144,6 +189,7 @@  urlpatterns = [
 
 if 'debug_toolbar' in settings.INSTALLED_APPS:
     import debug_toolbar
+
     urlpatterns += [
         url(r'^__debug__/', include(debug_toolbar.urls)),
     ]