Frage

Ich frage mich, ob die Umstrukturierung der URLconfs meiner Apps mit mehreren verschachtelten Mustergruppen zu einer Leistungssteigerung führt, wenn Django nach einem Muster für den Anforderungsabgleich sucht.Ich bin mir nicht sicher, wie ich die Leistung testen soll, aber ich habe es ausprobiert und die neue Version funktioniert zumindest.

Ich weiß, dass eine Leistungssteigerung genauso gut vernachlässigbar sein kann.Ich habe damit nur begonnen, um zu sehen, ob die Muster als Baum leichter zu betrachten sind.Mir geht es mehr darum, Dinge zu vermasseln, als darum, die Geschwindigkeit zu steigern.

Das Folgende ist die URL-Konferenz einer App, die in der Master-URL-Konferenz unter enthalten ist /appname/.

Alte URLconf:

from django.contrib.auth.decorators import login_required
from django.conf.urls.defaults import patterns, include, url
from django.views.generic.simple import redirect_to

from appname import views

urlpatterns = patterns('',
    # Actions on sets of reports
    url(r'^reports/page(?P<page>[0-9]+)/$', login_required(views.appnameListView.as_view())),
    url(r'^reports/bill/', views.bill),

    # Actions on individual reports
    url(r'^report/new/', views.new),
    url(r'^report/(?P<reportNumber>[^/]+)/$', views.detail),
    url(r'^report/(?P<reportNumber>[^/]+)/delete/$', views.delete),
    url(r'^report/(?P<reportNumber>[^/]+)/edit/$', views.edit),
    url(r'^report/(?P<reportNumber>[^/]+)/print/$', views.detail_print),
    # url(r'^report/(?P<reportNumber>[^/]+)/pdf/$', views.detail_pdf),

    # Configure app settings
    url(r'^config/$', views.configure),
    url(r'^config/reporttype/(?P<id>[^/]+)/$', views.configure_ReportType),
    url(r'^config/reporttype/(?P<id>[^/]+)/delete/$', views.configure_ReportType_delete),
    url(r'^config/avgmethod/(?P<name>[^/]+)/$', views.configure_AvgMethod),
    url(r'^config/avgmethod/(?P<name>[^/]+)/delete/$', views.configure_AvgMethod_delete),
    url(r'^config/datatransformer/(?P<name>[^/]+)/$', views.configure_DataTransformer),
    url(r'^config/datatransformer/(?P<name>[^/]+)/delete/$', views.configure_DataTransformer_delete),

    # Catch all; #TODO: 404
    url(r'^', redirect_to, {'url': '/appname/reports/page1/'}),
)

Neue URLconf:

from django.contrib.auth.decorators import login_required
from django.conf.urls.defaults import patterns, include, url
from django.views.generic.simple import redirect_to

from appname import views

urlpatterns = patterns('',
    # Actions on sets of reports
    url(r'^reports/', include(patterns('',
        url(r'^page(?P<page>[0-9]+)/$', login_required(views.appnameListView.as_view())),
        url(r'^bill/', views.bill),
    ))),

    # Actions on individual reports
    url(r'^report/', include(patterns('',
        url(r'^new/', views.new),
        url(r'^(?P<reportNumber>[^/]+)/$', views.detail),
        url(r'^(?P<reportNumber>[^/]+)/delete/$', views.delete),
        url(r'^(?P<reportNumber>[^/]+)/edit/$', views.edit),
        url(r'^(?P<reportNumber>[^/]+)/print/$', views.detail_print),
        # url(r'^(?P<reportNumber>[^/]+)/pdf/$', views.detail_pdf),
    ))),

    # Configure app settings
    url(r'^config/', include(patterns('',
        url(r'^$', views.configure),
        url(r'^reporttype/(?P<id>[^/]+)/$', views.configure_ReportType),
        url(r'^reporttype/(?P<id>[^/]+)/delete/$', views.configure_ReportType_delete),
        url(r'^avgmethod/(?P<name>[^/]+)/$', views.configure_AvgMethod),
        url(r'^avgmethod/(?P<name>[^/]+)/delete/$', views.configure_AvgMethod_delete),
        url(r'^datatransformer/(?P<name>[^/]+)/$', views.configure_DataTransformer),
        url(r'^datatransformer/(?P<name>[^/]+)/delete/$', views.configure_DataTransformer_delete),
    ))),

    # Catch all; #TODO: 404
    url(r'^', redirect_to, {'url': '/appname/reports/page1/'}),
)

Ich könnte sogar noch weiter gehen (4 der 5 mit Regex überprüften Variablen sind mindestens zweimal definiert), aber ich mache mir Sorgen, dass der ursprüngliche Vorteil der Lesbarkeit verloren geht.

War es hilfreich?

Lösung

Wenn du Ich möchte mich nicht wiederholen und dem DRY-Prinzip folgen, das manchmal häufig bei der Entwicklung von Django-Code verwendet wird, sollten Sie Ihre URLs gruppieren.So reduzieren Sie die Menge an doppeltem Code und erstellen Code, der viel einfacher zu warten ist.Denken Sie zum Beispiel daran, dass Sie später möglicherweise den Bericht/die URLs in etwas anderes ändern möchten, dann müssten Sie dies für jede einzelne URL tun!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top