19

Web アプリケーションを Django 1.5 から Django 1.6 にアップグレードしようとしています。django アプリのセットの一部として、django-registration 1.0を使用しています。

Django 1.6 にアップグレードした後、私のアプリは組み込みの認証ビューを認識しなくなりました。hereに見られるように、それらはdjango登録に統合されていますが、機能しなくなりました。

Django のリリース ノートでは、これらのビューを統合する方法の変更について説明しています。

以下に登録URLを紹介します。

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

次のような組み込みの URL を要求すると、エラーが発生します。/accounts/password/change/

django.core.urlresolvers.NoReverseMatch

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

no-reverse-match エラーが発生する理由を知っている人はいますか?

4

3 に答える 3

35

このエラーの理由は、 が とはdjango.contrib.auth.views異なる URL 名を使用しているためregistration.auth_urlsです。この問題にパッチを当てるには、django-registration が django 1.6 用に更新されるまでデフォルトの URL をオーバーライドし、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')),
)
于 2013-11-15T08:34:21.433 に答える
0

バックグラウンド

この問題は、django-registration==1.0 および Django==1.6 で再び解消されたようで、公式の django-registration プル リクエストでここに文書化されています。@Jay が提供するソリューションを使用しましたが、特にパスワードのリセット部分では機能しませんでした。私はこのエラーで終わった:

エラー

password_reset_confirm() got an unexpected keyword argument 'uidb36'

解決

代わりに、次のようにして、別の django-registration リポジトリ (上記の公式のプル リクエストで述べたように) からプルしました。

  1. pip アンインストール django-登録
  2. pip インストール git+git://github.com/macropin/django-registration.git
  3. @Jay の投稿に記載されているように、「urls.py」のコードを変更します (ありがとう!)
  4. これは、公式の django-registration サポートが Django 1.6 用に更新されるまでの一時的な解決策であることを忘れないでください。
于 2014-06-09T16:13:23.230 に答える