3

私はDjangoを使い始めましたが、ユーザー認証に関してはよくわからないことがわかりました(通常のdjango.contrib.authメカニズムを使用)。

を使って「サイト」を作るとき

django-admin.py startproject mysite 

私は「サーバー」のようなものを作成することを理解しています。次に、アプリを作成する必要があります(「はじめに」チュートリアルで説明されています)。サーバーではなく、アプリ用にモデルを作成します。私が持っている考え(これは完全に間違っているかもしれません)は、アプリはそれらの間でかなり独立している(互いにかなり分離されている)ということです。アプリごとにモデルを作成します。アプリごとに異なる「ビュー」のセットがあります。

しかし、ユーザー管理に関しては、その管理はプロジェクト全体(または「サーバー」)に対してグローバルであるように見えます。すべての設定はグローバルsettings.pyファイルを介して指定され、組み込みのログインページはグローバルtemplates/ディレクトリに保存されます... 2つのアプリがあり、それらのログインページに異なる側面を持たせたい場合はどうなりますか?ログインに成功した後、ユーザーがログインしようとしたアプリに応じて、app#1の特定のページまたはapp#2の別の特定のページにリダイレクトしたい場合はどうなりますか?たぶん私はDjangoアプリの背後にある概念全体を誤解していますか?

基本的に、私はmystartappと呼ばれるプロジェクト内にアプリケーションを持っていますmyserver。組み込みのログインビューを使用して、フォームをに送信してい"django.contrib.auth.views.login"ます。デフォルトの設定では、ログインに成功すると、私はにリダイレクトされませhttp://127.0.0.1:8000/accounts/profile/んでした。

settings.pyグローバルファイルとグローバルファイルを編集することで回避策を見つけることができurls.pyます。

---------- settings.py ----------
[ . . . ]
# User Logging in Settings
LOGIN_URL = '/login'
LOGIN_REDIRECT_URL = '/'
[ . . . ]
---------------------------------

------------ urls.py ------------
urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'myserver.views.home', name='home'),
    # url(r'^myserver/', include('myserver.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    #The following line will include the urls for the "mystartapp" application 
    url(r'^s', include('mystartapp.urls', namespace="mystartapp")), #Dirty trick
    url(r'^mystartapp/', include('mystartapp.urls', namespace="mystartapp")),
    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    url(r'^login/$', 'django.contrib.auth.views.login'),
)
------------------------------

このように、10行目(コメント付きの行)のおかげで、#'Dirty trick'のルートに行くすべてのものが、127.0.0.1:8000/を使用した場合と同じURLのセットにリダイレクトされ、のオプション127.0.0.1:8000/mystartapp/と組み合わせて 、ブラウザーを作成することになります。正しくログインした後、にリダイレクトしますが、それは「クリーン」ではないようです。LOGIN_REDIRECT_URL = '/'settings.py127.0.0.1:8080/mystartapp/index.html

へのリダイレクトを確立するためのより良い方法はあり127.0.0.1:8080/mystartapp/index.htmlますか?汚いトリックは本当に汚いトリックですか、それともそれが機能するはずの方法ですか?ここで何かが足りませんか?(ただし、この最後の質問に対する答えは「はい」だと確信しています)

前もって感謝します。

4

1 に答える 1

3

LOGIN_REDIRECT_URL = '/mystartapp/index.html'あなたの場合、使用がうまくいかない理由はありますか?


アプリの概念に関しては、それらは機能の独立したビットであると想定されています(そのため、「再利用可能」とラベル付けされることがあります)。ただし、アプリをプロジェクトに結び付けると、ある時点でそれらが連携して機能することが目標になります。

の場合、この再利用性は、使用したパラメーター(またはなど)でcontrib.auth表されます。これにより、プロジェクトで機能するようにアプリの動作を構成できます。LOGIN_URLLOGIN_REDIRECT_URL

たとえば、販売者側の場合、複数のアプリを使用して、プロジェクトに関連するさまざまなアクションを実行できます。

  • 実際の機能(製品、ページなど)を備えたアプリ
  • 検索用アプリ(のようなdjango-solr
  • 登録用アプリ(django-registration
  • 認証、セッションのためのアプリの提供
  • 支払い用のマーチャントアプリ

アプリはさまざまな機能を実行しますが、すべて同じ目的を果たし、一緒にプロジェクトを構成します。


アプリを完全に独立した方法で動作させる必要がある場合は、そもそも同じプロジェクトの一部であってはなりません。(たとえば、プロジェクトPとQでアプリAを使用し、PでのみアプリBを使用できます)。

于 2012-11-14T22:48:08.757 に答える