推奨答え
モジュール
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]
MIDDLEWARE
で
settings.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
を追加することを忘れないでください