mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Bump Django to 2.0 and simplify URL routing syntax
See: https://docs.djangoproject.com/en/stable/releases/2.0/ The only required changes are - as reported in #1466 - the addition of `app_name` in `urls.py` for URL namespaces.
This commit is contained in:
+55
-53
@@ -1,6 +1,6 @@
|
||||
"""Admin urls."""
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
from .views import (
|
||||
@@ -8,71 +8,73 @@ from .views import (
|
||||
identity as identity_views, import_ as import_views
|
||||
)
|
||||
|
||||
app_name = "admin"
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', domain_views.index, name="index"),
|
||||
url(r'^domains/$', domain_views.domains, name="domain_list"),
|
||||
url(r'^domains/(?P<pk>\d+)/$', views.DomainDetailView.as_view(),
|
||||
name="domain_detail"),
|
||||
url(r'^domains/(?P<pk>\d+)/dnsbl/$', views.DNSBLDomainDetailView.as_view(),
|
||||
name="dnsbl_domain_detail"),
|
||||
url(r'^domains/(?P<pk>\d+)/mx/$', views.MXDomainDetailView.as_view(),
|
||||
name="mx_domain_detail"),
|
||||
url(r'^domains/list/$', domain_views._domains, name="_domain_list"),
|
||||
url(r'^domains/quotas/$', domain_views.list_quotas,
|
||||
name="domain_quota_list"),
|
||||
url(r'^domains/flatlist/$', domain_views.domains_list,
|
||||
name="domain_flat_list"),
|
||||
url(r'^domains/new/', domain_views.newdomain, name="domain_add"),
|
||||
url(r'^domains/(?P<dom_id>\d+)/edit/$', domain_views.editdomain,
|
||||
name="domain_change"),
|
||||
url(r'^domains/(?P<dom_id>\d+)/delete/$', domain_views.deldomain,
|
||||
name="domain_delete"),
|
||||
url(r'^domains/page/$', domain_views.get_next_page,
|
||||
name="domain_page"),
|
||||
path('', domain_views.index, name="index"),
|
||||
path('domains/', domain_views.domains, name="domain_list"),
|
||||
path('domains/<int:pk>/', views.DomainDetailView.as_view(),
|
||||
name="domain_detail"),
|
||||
path('domains/<int:pk>/dnsbl/', views.DNSBLDomainDetailView.as_view(),
|
||||
name="dnsbl_domain_detail"),
|
||||
path('domains/<int:pk>/mx/', views.MXDomainDetailView.as_view(),
|
||||
name="mx_domain_detail"),
|
||||
path('domains/list/', domain_views._domains, name="_domain_list"),
|
||||
path('domains/quotas/', domain_views.list_quotas,
|
||||
name="domain_quota_list"),
|
||||
path('domains/flatlist/', domain_views.domains_list,
|
||||
name="domain_flat_list"),
|
||||
path('domains/new/', domain_views.newdomain, name="domain_add"),
|
||||
path('domains/<int:dom_id>/edit/', domain_views.editdomain,
|
||||
name="domain_change"),
|
||||
path('domains/<int:dom_id>/delete/', domain_views.deldomain,
|
||||
name="domain_delete"),
|
||||
path('domains/page/', domain_views.get_next_page,
|
||||
name="domain_page"),
|
||||
]
|
||||
|
||||
urlpatterns += [
|
||||
url(r'^permissions/remove/$', identity_views.remove_permission,
|
||||
name="permission_remove"),
|
||||
path('permissions/remove/', identity_views.remove_permission,
|
||||
name="permission_remove"),
|
||||
|
||||
url(r'^identities/$', identity_views.identities, name="identity_list"),
|
||||
url(r'^identities/list/$', identity_views._identities,
|
||||
name="_identity_list"),
|
||||
url(r'^identities/quotas/$', identity_views.list_quotas,
|
||||
name="identity_quota_list"),
|
||||
url(r'^identities/page/$', identity_views.get_next_page,
|
||||
name="identity_page"),
|
||||
path('identities/', identity_views.identities, name="identity_list"),
|
||||
path('identities/list/', identity_views._identities,
|
||||
name="_identity_list"),
|
||||
path('identities/quotas/', identity_views.list_quotas,
|
||||
name="identity_quota_list"),
|
||||
path('identities/page/', identity_views.get_next_page,
|
||||
name="identity_page"),
|
||||
|
||||
url(r'^accounts/list/$', identity_views.accounts_list,
|
||||
name="account_list"),
|
||||
url(r'^accounts/new/$', identity_views.newaccount, name="account_add"),
|
||||
url(r'^accounts/(?P<pk>\d+)/$', views.AccountDetailView.as_view(),
|
||||
name="account_detail"),
|
||||
url(r'^accounts/(?P<pk>\d+)/edit/$', identity_views.editaccount,
|
||||
name="account_change"),
|
||||
url(r'^accounts/(?P<pk>\d+)/delete/$', identity_views.delaccount,
|
||||
name="account_delete"),
|
||||
path('accounts/list/', identity_views.accounts_list,
|
||||
name="account_list"),
|
||||
path('accounts/new/', identity_views.newaccount, name="account_add"),
|
||||
path('accounts/<int:pk>/', views.AccountDetailView.as_view(),
|
||||
name="account_detail"),
|
||||
path('accounts/<int:pk>/edit/', identity_views.editaccount,
|
||||
name="account_change"),
|
||||
path('accounts/<int:pk>/delete/', identity_views.delaccount,
|
||||
name="account_delete"),
|
||||
]
|
||||
|
||||
urlpatterns += [
|
||||
url(r'^aliases/new/$', alias_views.newalias, name="alias_add"),
|
||||
url(r'^aliases/(?P<pk>\d+)/$', views.AliasDetailView.as_view(),
|
||||
name="alias_detail"),
|
||||
url(r'^aliases/(?P<alid>\d+)/edit/$', alias_views.editalias,
|
||||
name="alias_change"),
|
||||
url(r'^aliases/delete/$', alias_views.delalias, name="alias_delete"),
|
||||
path('aliases/new/', alias_views.newalias, name="alias_add"),
|
||||
path('aliases/<int:pk>/', views.AliasDetailView.as_view(),
|
||||
name="alias_detail"),
|
||||
path('aliases/<int:alid>/edit/', alias_views.editalias,
|
||||
name="alias_change"),
|
||||
path('aliases/delete/', alias_views.delalias, name="alias_delete"),
|
||||
]
|
||||
|
||||
urlpatterns += [
|
||||
url(r'^domains/import/$', import_views.import_domains,
|
||||
name="domain_import"),
|
||||
url(r'^identities/import/$', import_views.import_identities,
|
||||
name="identity_import"),
|
||||
path('domains/import/', import_views.import_domains,
|
||||
name="domain_import"),
|
||||
path('identities/import/', import_views.import_identities,
|
||||
name="identity_import"),
|
||||
]
|
||||
|
||||
urlpatterns += [
|
||||
url(r'^domains/export/$', export_views.export_domains,
|
||||
name="domain_export"),
|
||||
url(r'^identities/export/$', export_views.export_identities,
|
||||
name="identity_export"),
|
||||
path('domains/export/', export_views.export_domains,
|
||||
name="domain_export"),
|
||||
path('identities/export/', export_views.export_identities,
|
||||
name="identity_export"),
|
||||
]
|
||||
|
||||
@@ -103,17 +103,15 @@ class ExtensionsPool(object):
|
||||
result = []
|
||||
for ext_name in list(self.extensions.keys()):
|
||||
ext = self.get_extension(ext_name)
|
||||
options = {}
|
||||
if category == "api":
|
||||
root = ""
|
||||
pattern = "{}.urls_api"
|
||||
else:
|
||||
root = r"^{}/".format(ext.get_url())
|
||||
options.update({"namespace": ext_name})
|
||||
pattern = "{}.urls"
|
||||
try:
|
||||
result.append(
|
||||
url(root, include(pattern.format(ext_name), **options))
|
||||
url(root, include(pattern.format(ext_name)))
|
||||
)
|
||||
except ImportError:
|
||||
# No urls for this extension
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 2.0.13 on 2020-01-04 17:14
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0017_auto_20190705_1045'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='last_name',
|
||||
field=models.CharField(blank=True, max_length=150, verbose_name='last name'),
|
||||
),
|
||||
]
|
||||
+20
-18
@@ -1,28 +1,30 @@
|
||||
"""Core urls."""
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
app_name = "core"
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', views.RootDispatchView.as_view(), name="root"),
|
||||
url(r'^dashboard/$', views.DashboardView.as_view(), name="dashboard"),
|
||||
path('', views.RootDispatchView.as_view(), name="root"),
|
||||
path('dashboard/', views.DashboardView.as_view(), name="dashboard"),
|
||||
|
||||
url(r'^accounts/login/$', views.dologin, name="login"),
|
||||
url(r'^accounts/logout/$', views.dologout, name="logout"),
|
||||
path('accounts/login/', views.dologin, name="login"),
|
||||
path('accounts/logout/', views.dologout, name="logout"),
|
||||
|
||||
url(r'^core/$', views.viewsettings, name="index"),
|
||||
url(r'^core/parameters/$', views.parameters, name="parameters"),
|
||||
url(r'^core/info/$', views.information, name="information"),
|
||||
url(r'^core/logs/$', views.logs, name="log_list"),
|
||||
url(r'^core/logs/page/$', views.logs_page, name="logs_page"),
|
||||
url(r'^core/top_notifications/check/$',
|
||||
views.check_top_notifications,
|
||||
name="top_notifications_check"),
|
||||
path('core/', views.viewsettings, name="index"),
|
||||
path('core/parameters/', views.parameters, name="parameters"),
|
||||
path('core/info/', views.information, name="information"),
|
||||
path('core/logs/', views.logs, name="log_list"),
|
||||
path('core/logs/page/', views.logs_page, name="logs_page"),
|
||||
path('core/top_notifications/check/',
|
||||
views.check_top_notifications,
|
||||
name="top_notifications_check"),
|
||||
|
||||
url(r'^user/$', views.index, name="user_index"),
|
||||
url(r'^user/preferences/$', views.preferences,
|
||||
name="user_preferences"),
|
||||
url(r'^user/profile/$', views.profile, name="user_profile"),
|
||||
url(r'^user/api/$', views.api_access, name="user_api_access"),
|
||||
path('user/', views.index, name="user_index"),
|
||||
path('user/preferences/', views.preferences,
|
||||
name="user_preferences"),
|
||||
path('user/profile/', views.profile, name="user_profile"),
|
||||
path('user/api/', views.api_access, name="user_api_access"),
|
||||
]
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
"""App related urls."""
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
app_name = "dnstools"
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^dnsrecords/(?P<pk>\d+)/$', views.DNSRecordDetailView.as_view(),
|
||||
name="dns_record_detail"),
|
||||
url(r'^dnsrecords/autoconfig/(?P<pk>\d+)/$',
|
||||
views.AutoConfigRecordsStatusView.as_view(),
|
||||
name="autoconfig_records_status"),
|
||||
url(r'^configuration/(?P<pk>\d+)/$',
|
||||
views.DomainDNSConfigurationView.as_view(),
|
||||
name="domain_dns_configuration"),
|
||||
path('dnsrecords/<int:pk>/', views.DNSRecordDetailView.as_view(),
|
||||
name="dns_record_detail"),
|
||||
path('dnsrecords/autoconfig/<int:pk>/',
|
||||
views.AutoConfigRecordsStatusView.as_view(),
|
||||
name="autoconfig_records_status"),
|
||||
path('configuration/<int:pk>/',
|
||||
views.DomainDNSConfigurationView.as_view(),
|
||||
name="domain_dns_configuration"),
|
||||
]
|
||||
|
||||
+25
-23
@@ -3,39 +3,41 @@ from functools import reduce
|
||||
from ckeditor_uploader import views as cku_views
|
||||
|
||||
from django.conf import settings
|
||||
from django.conf.urls import include, url
|
||||
from django.contrib.auth import views as auth_views
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.urls import include, path
|
||||
from django.views.generic import TemplateView
|
||||
from django.views.i18n import JavaScriptCatalog
|
||||
|
||||
from rest_framework.renderers import JSONOpenAPIRenderer
|
||||
from rest_framework.schemas import get_schema_view
|
||||
|
||||
from modoboa.admin.views.user import forward
|
||||
from modoboa.admin.views import user as user_views
|
||||
from modoboa.core import signals as core_signals, views as core_views
|
||||
from modoboa.core.extensions import exts_pool
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^jsi18n/$', JavaScriptCatalog.as_view(), name="javascript-catalog"),
|
||||
url(r'^ckeditor/upload/', login_required(cku_views.upload),
|
||||
name="ckeditor_upload"),
|
||||
url(r'^ckeditor/browse/', login_required(cku_views.browse),
|
||||
name="ckeditor_browse"),
|
||||
url("", include("modoboa.core.urls", namespace="core")),
|
||||
url("^user/forward/", forward, name="user_forward"),
|
||||
url("admin/", include("modoboa.admin.urls", namespace="admin")),
|
||||
url("dnstools/", include("modoboa.dnstools.urls", namespace="dnstools")),
|
||||
# No namespace
|
||||
url(r'^accounts/password_reset/$', core_views.password_reset,
|
||||
name="password_reset"),
|
||||
url(r'^accounts/password_reset/done/$', auth_views.password_reset_done,
|
||||
name="password_reset_done"),
|
||||
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', # noqa
|
||||
auth_views.password_reset_confirm, name="password_reset_confirm"),
|
||||
url(r'^reset/done/$', auth_views.password_reset_complete,
|
||||
name="password_reset_complete"),
|
||||
path('jsi18n/', JavaScriptCatalog.as_view(), name="javascript-catalog"),
|
||||
|
||||
path('ckeditor/upload/', login_required(cku_views.upload),
|
||||
name="ckeditor_upload"),
|
||||
path('ckeditor/browse/', login_required(cku_views.browse),
|
||||
name="ckeditor_browse"),
|
||||
|
||||
path('', include("modoboa.core.urls")),
|
||||
path('admin/', include("modoboa.admin.urls")),
|
||||
path('dnstools/', include("modoboa.dnstools.urls")),
|
||||
|
||||
path('user/forward/', user_views.forward, name="user_forward"),
|
||||
|
||||
path('accounts/password_reset/', core_views.password_reset,
|
||||
name="password_reset"),
|
||||
path('accounts/password_reset/done/', auth_views.password_reset_done,
|
||||
name="password_reset_done"),
|
||||
path('reset/<uidb64>/<token>/', auth_views.password_reset_confirm,
|
||||
name="password_reset_confirm"),
|
||||
path('reset/done/', auth_views.password_reset_complete,
|
||||
name="password_reset_complete"),
|
||||
]
|
||||
|
||||
exts_pool.load_all()
|
||||
@@ -55,10 +57,10 @@ schema_view = get_schema_view(
|
||||
renderer_classes=[JSONOpenAPIRenderer],
|
||||
)
|
||||
urlpatterns += [
|
||||
url(r'^docs/openapi.json$', schema_view, name="openapi_schema"),
|
||||
url(r'^docs/api/', login_required(
|
||||
path('docs/openapi.json', schema_view, name="openapi_schema"),
|
||||
path('docs/api/', login_required(
|
||||
TemplateView.as_view(template_name="swagger-ui.html"))),
|
||||
url("^api/v1/", include("modoboa.urls_api", namespace="api")),
|
||||
path('api/v1/', include("modoboa.urls_api")),
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
|
||||
+7
-6
@@ -1,12 +1,13 @@
|
||||
"""External API urls."""
|
||||
|
||||
from django.conf.urls import include, url
|
||||
from django.urls import include, path
|
||||
|
||||
from modoboa.core.extensions import exts_pool
|
||||
|
||||
app_name = "api"
|
||||
|
||||
urlpatterns = [
|
||||
url("", include("modoboa.admin.urls_api")),
|
||||
url("", include("modoboa.limits.urls_api")),
|
||||
url("", include("modoboa.relaydomains.urls_api")),
|
||||
]
|
||||
urlpatterns += exts_pool.get_urls(category="api")
|
||||
path('', include("modoboa.admin.urls_api")),
|
||||
path('', include("modoboa.limits.urls_api")),
|
||||
path('', include("modoboa.relaydomains.urls_api")),
|
||||
] + exts_pool.get_urls(category="api")
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
django>=1.11.8,<=1.11.99
|
||||
django>=2.0,<2.1
|
||||
django-braces==1.14.0
|
||||
django-ckeditor==5.8.0
|
||||
django-reversion==3.0.5
|
||||
|
||||
Reference in New Issue
Block a user