2013-11-14 17 views
19

Sto provando ad aggiornare la mia webapp da Django 1.5 a Django 1.6 e come parte del mio set di applicazioni django sto usando django-registration 1.0.Django 1.6 e registrazione django: visualizzazioni di autenticazione incorporate non rilevate

Dopo l'aggiornamento a Django 1.6 la mia app non riconosce più lo built-in authentication views. Sono integrati nella registrazione di django come si può vedere here, ma hanno smesso di funzionare.

Le note di rilascio di Django descrivono uno change in the way these views should be integrated, quando lo si confronta con il codice sorgente nell'app di registrazione che sembra soddisfacente.

sto introducendo gli URL di registrazione come segue:

urlpatterns = patterns('', 
    ..., 
    url(r'^accounts/', include('registration.backends.default.urls')), 
) 

ottengo l'errore quando si richiede il costruito nel URL come /accounts/password/change/

django.core.urlresolvers.NoReverseMatch 

NoReverseMatch: Reverse for 'password_change_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

Qualcuno ha un idea del perché ho un errore no-reverse-match?

risposta

35

Il motivo di questo errore è che il django.contrib.auth.views utilizza nomi di URL diversi da quelli registration.auth_urls. Per correggere questo problema, sovrascrivi gli URL predefiniti fino a quando la registrazione di django viene aggiornata per django 1.6 e usi gli stessi nomi di Django.

from django.contrib.auth import views as auth_views 


urlpatterns = patterns('', 

     #override the default urls 
     url(r'^password/change/$', 
        auth_views.password_change, 
        name='password_change'), 
     url(r'^password/change/done/$', 
        auth_views.password_change_done, 
        name='password_change_done'), 
     url(r'^password/reset/$', 
        auth_views.password_reset, 
        name='password_reset'), 
     url(r'^password/reset/done/$', 
        auth_views.password_reset_done, 
        name='password_reset_done'), 
     url(r'^password/reset/complete/$', 
        auth_views.password_reset_complete, 
        name='password_reset_complete'), 
     url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', 
        auth_views.password_reset_confirm, 
        name='password_reset_confirm'), 

     #and now add the registration urls 
     url(r'', include('registration.backends.default.urls')), 
) 
+0

Ho aggiunto il codice Jay elencato sopra alla mia registrazione/backends/simple/urls.py. Immagino che se stai usando il valore predefinito lo aggiungerei alla registrazione/backends/default/urls.py. Questo ha funzionato per me. – teewuane

+0

Ho fatto anche questo, e funziona per me, tuttavia i miei modelli vengono ignorati e i modelli di Django Admin vengono utilizzati per reimpostare la password e cambiare la password. –

+3

C'è una richiesta di pull aperta per questo problema sul repository di registrazione django. Suppongo che sarà integrato nella prossima versione. Segui la discussione qui: https://bitbucket.org/ubernostrum/django-registration/pull-request/63/ – yellowcap

8

Ecco quello che ho usato:

url(r'', include('registration.backends.default.urls')), 
url(r'', include('django.contrib.auth.urls')), 

Django contrib include ora gli URL mancanti

+0

Questo al momento funziona davvero bene per me. Lo terremo comunque d'occhio. –

0

Sfondo

Questo problema sembra essere ritagliata nuovo per django-registrazione = = 1.0 e Django == 1.6 ed è documentato here sulla richiesta ufficiale di registrazione django. Ho usato la soluzione fornita da @Jay ma non ha funzionato in modo specifico per la parte di reimpostazione della password. Ho finito con questo errore:

errore

password_reset_confirm() got an unexpected keyword argument 'uidb36' 

Soluzione

Invece ho tirato da un altro repository django-registrazione (come indicato nella richiesta ufficiale di pull sopra) facendo il di seguito:

  1. pip uninstall django-registration
  2. pip install git + git: //github.com/macropin/django-registration.git
  3. modificare il codice per 'urls.py' come indicato nel post di @Jay
  4. Ricordate questo (grazie!) è una soluzione temporanea fino a quando il supporto ufficiale di registrazione di django viene aggiornato per Django 1.6
+0

Non è la registrazione django [non viene più gestita] (https://bitbucket.org/ubernostrum/django-registration/wiki/Home)? (Preferirei che fosse fatto ufficialmente parte di Django rispetto a Sud, ma forse è qualcosa per 1.8!) –

+0

Spero che la registrazione di django sia presa da qualcuno (o forse non lo sarà). Ho aggiornato il mio a 1.6 e poiché tutto il resto funzionava, ho usato il fork per risolvere questo problema. – Will