Domanda

Mi chiedo se la ristrutturazione degli URLConfs delle mie app con diversi gruppi di modelli nidificati fornirà una spinta di prestazioni per quando Django cerca un modello di corrispondenza della richiesta.Non sono sicuro di come testare le prestazioni, ma l'ho provato e la nuova versione funziona almeno.

So che se c'è un aumento delle prestazioni, potrebbe anche essere trascurabile.Ho iniziato a farlo solo per vedere se i modelli sarebbero più facili da guardare come un albero;Sono più preoccupato per avvitare le cose rispetto alla velocità di aumento della velocità.

Di seguito è riportato l'URLConf di un'app che è inclusa dal master urlconf su /appname/.

Old 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/'}),
)
.

NUOVO 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/'}),
)
.

Potrei andare ancora oltre (4 delle 5 variabili controllate con Regex sono definite almeno due volte), ma mi preoccupo di perdere il vantaggio originale della leggibilità.

È stato utile?

Soluzione

Se tu non si desidera raccoglierti e seguire il principio di asciutto, che a volte è incorporato molto quando si sviluppa il codice Django, dovresti raggruppare i tuoi URL.Quindi ridurrai il codice duplicato della quantità e il codice di produzione che è molto più facile da mantenere.Pensa ad esempio sul fatto che in seguito si può cambiare il rapporto / URL a qualcos'altro, dovresti farlo per ogni singolo URL allora!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top