2013-11-14 18 views
19

Tôi đang cố gắng để nâng cấp webapp của tôi từ Django 1,5 đến Django 1,6 và như một phần của bộ ứng dụng django của tôi Tôi đang sử dụng django-registration 1.0.Django 1.6 và django-đăng ký: được xây dựng trong quan điểm xác thực không chọn

Sau khi nâng cấp lên Django 1.6, ứng dụng của tôi không nhận dạng được built-in authentication views nữa. Chúng được tích hợp trong đăng ký django như có thể được nhìn thấy here, nhưng chúng ngừng hoạt động.

Ghi chú phát hành Django mô tả change in the way these views should be integrated, khi so sánh ghi chú đó với mã nguồn trong ứng dụng đăng ký có vẻ ổn.

Tôi đang giới thiệu các url đăng ký như sau:

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

tôi nhận được một lỗi khi yêu cầu xây dựng trong url như /accounts/password/change/

django.core.urlresolvers.NoReverseMatch 

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

Có ai có một ý tưởng tại sao tôi nhận được một lỗi không khớp ngược?

Trả lời

35

Lý do gây ra lỗi này là django.contrib.auth.views sử dụng các tên url khác với tên địa chỉ registration.auth_urls. Để vá lỗi này, hãy ghi đè lên các url mặc định cho đến khi đăng ký django được cập nhật cho django 1.6 và sử dụng cùng tên với 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

Tôi đã thêm mã Jay được liệt kê ở trên vào đăng ký/backends/simple/urls.py. Tôi đoán nếu bạn đang sử dụng mặc định, bạn sẽ thêm nó vào đăng ký/backends/default/urls.py. Điều đó làm việc cho tôi. – teewuane

+0

Tôi đã làm điều này cũng có, và nó hoạt động cho tôi, tuy nhiên các mẫu của tôi đang bị bỏ qua và các mẫu Admin Django đang được sử dụng để đặt lại mật khẩu và thay đổi mật khẩu. –

+3

Có một yêu cầu kéo mở cho vấn đề này trên kho đăng ký django. Tôi cho rằng nó sẽ được tích hợp trong bản phát hành tiếp theo. Thực hiện theo các cuộc thảo luận ở đây: https://bitbucket.org/ubernostrum/django-registration/pull-request/63/ – yellowcap

8

Dưới đây là những gì tôi đã sử dụng:

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

Django contrib hiện nay bao gồm các url thiếu

+0

Điều này thực sự làm việc tốt cho tôi vào lúc này. Sẽ giữ một mắt trên nó mặc dù. –

0

nền

Vấn đề này dường như đã cắt một lần nữa cho django đăng ký = = 1.0 và Django == 1.6 và được ghi lại here về yêu cầu kéo đăng ký django chính thức. Tôi đã sử dụng giải pháp được cung cấp bởi @Jay nhưng nó không hoạt động riêng cho phần đặt lại mật khẩu. Tôi đã kết thúc với lỗi này:

Lỗi

password_reset_confirm() got an unexpected keyword argument 'uidb36' 

Giải pháp

Thay vào đó tôi kéo từ một kho django đăng ký (như đã đề cập trong yêu cầu kéo chính thức trên) bằng cách làm như như sau:

  1. pip uninstall django-registration
  2. pips cài đặt git + git: //github.com/macropin/django-registration.git
  3. Sửa đổi mã cho 'urls.py' như đã đề cập trong bài viết bởi @ Jay
  4. Hãy nhớ điều này (cảm ơn!) là giải pháp tạm thời cho đến khi hỗ trợ đăng ký django chính thức được cập nhật cho Django 1.6
+0

Không phải là đăng ký django [không còn được duy trì] (https://bitbucket.org/ubernostrum/django-registration/wiki/Home)? (Tôi muốn nhiều hơn điều này đã được thực hiện chính thức một phần của Django hơn Nam, nhưng có lẽ đó là một cái gì đó cho 1.8!) –

+0

Tôi hy vọng đăng ký django được thực hiện bởi một ai đó (hoặc có thể nó sẽ không được). Tôi nâng cấp mỏ lên 1.6 và vì mọi thứ khác đã hoạt động, tôi đã sử dụng cái nĩa để khắc phục vấn đề này. – Will

Các vấn đề liên quan