19

まず第一に、私は初心者です。Python2.7に付属するUbuntu11.04を実行しているので、別のディレクトリにPython2.5をインストールして、GoogleAppEngineDjango-Non-Relを実行しました。Guestbookチュートリアルを実行し、管理者アクセスを追加しようとしていますが、正しいusername:passwordを入力すると、Djangoは正しくないと見なします。GAEにデプロイした場合でも機能しません。あなたが知っているなら、正しい方向に私を突いてください。

追加した:

AUTHENTICATION_BACKENDS = ( 
    'django.contrib.auth.backends.ModelBackend', 
)

INSTALLED_APPS = (
    ...
    'django.contrib.admin',
    ....
)

編集
私も追加しました

url(r'^ admin /'、include(admin.site.urls))、

サブプロジェクトディレクトリのurls.pyに。
EOEDIT

次に、スーパーユーザーと同期データベースを作成しました。

> python2.5 xxx-xxx-guestbook/manage.py createsuperuser python2.5
> xxx-xxx-guestbook/manage.py syncdb

その後、アプリを実行し、ログインできません。私は常に同じ結果で複数の異なるスーパーユーザーを作成しました。

EDIT2

助けてくれてありがとう。残念ながら、提供された解決策のどちらも問題を解決しませんでした。私は最初にDjangoを独学で学び、次にGAE Django-nonrelに切り替えることにしました。そのため、この質問はもう関係ありません。誰かにいくつかのポイントを与えるために、私はまだ1つの答えを選ぶべきですか?

4

8 に答える 8

26

django-nonrelにはある種の制限があります。

スーパーユーザーを作成するには:

  • ローカルWebサーバーを停止します
  • スーパーユーザーを作成する

    python manage.py createsuperuser
    
  • Webサーバーを再度実行します

    python manage.py runserver
    
于 2011-08-01T00:51:17.420 に答える
8

あなたが正しいユーザー名とパスワードを持っていると仮定すると、失敗したログインと同じ振る舞いを示す唯一のものはis_staff=False、問題のユーザーのために持っていることです。

データベースに移動し、auth_userテーブルを調べます。ログインに使用しているユーザーで、is_staffがに設定されていることを確認してください。TRUE

于 2011-07-19T18:37:59.780 に答える
5

urls.pyのコメント解除:

# Uncomment the next line to enable the admin:
**# url(r'^admin/', include(admin.site.urls)),**

そしてそれはあなたをレースのために良くするはずです:)

PS。./manage.py syncdbを実行することを忘れないでください。そうすると、管理者ユーザーのセットアップを求められます。

于 2011-07-19T17:34:09.783 に答える
5

私のようなばか者なら、ユーザー名ではなくメールアドレスでログインしようとしている可能性があります。

スーパーユーザーを作成するときに、ユーザー名ではなくメールを入力したことを思い出したので(djangoはユーザー名を入力せずに提供するため)、おそらくユーザー名にメールを使用する通常の慣習です。はは。

于 2014-06-05T16:29:37.377 に答える
5

私はあなたと同じ状況に遭遇しました。そして、認証バックエンドをに切り替えたことがわかりました

someproject.backends.EmailCheckmodelBackend

そして、settings.pyに次の行を追加しました。

AUTHENTICATION_BACKENDS =('someproject.backends.EmailCheckModelBackend'、)

そして、バックエンドは次のようなものです。

class EmailCheckModelBackend(ModelBackend):
def authenticate(self, username = None, password = None, is_staff = None):
    try:
        user = User.objects.get(email = username)
        if user.check_password(password):
            if is_staff is not None:
                if user.is_staff == is_staff:
                    return user
                else:
                    return None
            return user

    except User.DoesNotExist:
        return None

実際には、ユーザー名は「email」によって強制的に変更されます。そのため、メールアカウントでページにログインする必要があります。好きなら

ユーザー名:someone@somewhere.com

パスワード:パスワード

その後、それは動作します。これが皆さんのお役に立てば幸いです。

于 2015-05-31T12:33:16.853 に答える
4

これについてはよくわかりませんが、syncdbによって作成したスーパーユーザーが削除される可能性があります。syncdbのプロンプトが表示されたら、スーパーユーザーを作成してみてください。

それ以外の場合は、のユーザーモデルを確認してください./manage.py shell。チェックしてくださいUser.objects.all()[0].is_superuser

于 2011-07-19T19:35:42.837 に答える
0

同じ問題が発生し、すべての設定が正しいためにログインできなかった理由がわかりませんでした。ただし、最初の大文字を含むスーパーユーザー名を提供してくれたDjangoにたどり着きましたが、実際には名前を完全に小文字で保存しています。

私は当然、大文字のスーパーユーザー名(Djangoが提供する名前)を使用しましたが、認証に失敗しました。'is_staff'などをチェックするためにデータテーブルを検査するとき、私はエラーを見つけました。セットアッププロセスを数回繰り返し、ケースなどの詳細を確認するためにスーパーユーザーの資格情報を記録したので、間違いではなかったことがわかります。

したがって、Djangoが提供するデフォルトの名前を受け入れるときは、モラルに注意してください。嘘だ!

于 2011-07-22T09:00:43.610 に答える
0

修正するのはそれほど難しくありません。まず、デフォルト設定を許可するようにしてください

(DEBUG=TRUE,ALLOWED_HOST=[ ])

Webサイトフォルダの設定ファイルにあります。

(コマンドプロンプトを使用して)Webサイトフォルダーに移動し、次のコマンドを入力します。

$ python manage.py createsuperuser
name:
email:e.g fulluser@admin.com
password:

ブラウザに戻り、サーバーを実行します。以前に作成したパスワードと一緒に、ユーザー名(電子メールではない)を設定します。今回はきっとうまくいくでしょう。

于 2017-06-17T22:33:01.657 に答える