認証なしのDjango管理者

Source python django

認証なしでDjango管理ページを使用する準備ができている方法はありますか? this methodを使用できることはわかっていますが、それはDjango1.3用でした。 Django 1.6でこれをより簡単に行えるようにする変更はありますか?

これに対する私の主な動機は、データベーステーブルをできるだけ少なくしたいということです。これはローカルでのみ使用しているため、認証は必要ありません(とにかく、サーバーをローカルホストで実行しているだけです)。
推奨答え
モジュールauto_auth.pyを作成します:
from django.contrib.auth.models import User
from django.utils.deprecation import MiddlewareMixin

class AutoAuthMiddleware(MiddlewareMixin):
    def process_request(self, request):
        request.user = User.objects.filter()[0]
MIDDLEWAREsettings.pyを編集します。
  • 'django.contrib.auth.middleware.AuthenticationMiddleware'を削除します
  • 'auto_auth.AutoAuthMiddleware'を追加します

  • 特定のユーザーが必要な場合は、User.objects.filter()[0]を別のコードに変更できます。

    あなたのコメントに応えて:はい。ユーザーなしでDjangoadminを実行するには、次のことを試してください。
    class User:
        is_superuser = True
        is_active = True
        is_staff = True
        id = 1
    
    def return_true(*args, **kwargs):
        return True
    User.has_module_perms = return_true
    User.has_perm = return_true
    
    class AutoAuthMiddleware(MiddlewareMixin):
        def process_request(self, request):
            request.user = User()
    
    そして、'django.contrib.auth'からINSTALLED_APPSを削除します
    ただし、認証アプリに依存するアプリを使用すると、ひどい時間を過ごすことになります。
    その他答え #1
    受け入れられた答えはすでに非常に単純ですが、これをいじった後、最近のバージョンのDjango(admin.site.has_permissionが問題になったため...> = 1.8?)では、ミドルウェアなしでそれを実行できることがわかりました。

    プロジェクトのurls.py:
    from django.contrib import admin
    
    class AccessUser:
        has_module_perms = has_perm = __getattr__ = lambda s,*a,**kw: True
    
    admin.site.has_permission = lambda r: setattr(r, 'user', AccessUser()) or True
    
    # Register the admin views or call admin.autodiscover()
    
    urlpatterns = [
        # Your url configs then...
        url(r'^admin/', admin.site.urls),
    ]
    

    AccessUser拡張ユーザーを使用している場合は、__getattr__部分を省略できます。これは、user.pkなどが呼び出されたときに何かを返すためのハッキーな方法です。
    その他答え #2
    Djangoバージョン> = 1.10に適合した受け入れられた回答
    /[yourapp]/middleware.py:
    from django.contrib.auth.models import User
    
    class AuthenticationMiddleware(object):
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request):
            request.user = User.objects.filter()[0]
            return self.get_response(request)  
    
    [yourproject]/settings.pyリストのMIDDLEWARE:
  • コメントまたは削除:'django.contrib.auth.middleware.AuthenticationMiddleware',
  • 追加:'[yourapp].middleware.AuthenticationMiddleware',

  • おそらくほとんどの人にとって明らかですが、ソリューションにはまだ1人のユーザーが存在する必要があることに注意してください。手動でpython manage.py createsuperuserを作成するか、スクリプトを使用して自動的に作成します。
  • How to automate createsuperuser on django?
  • Autocreate superuser with each schema django
  • Create django super user in a docker container without inputting password
  • その他答え #3
    別のオプションでは、誰からでもアクセスできます。は、最初のユーザーに認証をバイパスさせます
    # app/admin.py
    from django.contrib.auth.models import User
    anonymous_user = User.objects.all().first()
    admin.site.has_permission = lambda r: setattr(r, 'user', anonymous_user) or True
    
    その他答え #4
    django> = 2.1の新しいバージョンの場合、次のようなことを行う必要があります。

    auto_auth.py
    class User:
        is_superuser = True
        is_active = True
        is_staff = True
        id = 1
        pk = 1
    
    
    User.has_module_perms = True
    User.has_perm = True
    
    
    class Middleware(object):
         def __init__(self, get_response):
              self.response = get_response
    
         def __call__(self, request):
             request.user = User()
             return self.response(request)
    

    また、設定ミドルウェアを変更し、django.contrib.authを非アクティブ化し、auto_authを追加することを忘れないでください

    関連記事

    Kubernetesでポッドの他のコンテナにアクセスする
    Freemarkerリスト間でコンマを取得する方法
    オブジェクトを再帰的にダンプします
    Excelでcsvデータを太字にする方法は?
    PyTorchの.pt、.pth、.pwf拡張子の違いは何ですか?