django管理员没有身份验证

问题描述 投票:0回答:6

是否有一种准备使用Django管理页面而没有任何形式的身份验证的方法?我知道我可以使用this方法,但这是Django 1.3。是否有任何更改可以让我在Django 1.6中更容易做到这一点? 我的主要动机是,我想拥有尽可能少的数据库表,而我仅在本地使用它,因此不需要任何形式的身份验证(无论如何我只在Localhost上运行服务器)。

接受的答案已经非常简单了,但是在解决此问题之后,我发现在django的最新版本中(因为admin.site.has_permission成为一件事...> = 1.8?),您无需中间件就可以做到这一点。

在您的项目的urls.py:
python django
6个回答
19
投票
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), ]

如果您有访问者扩展用户,则可以忽略

__getattr__

部分,这是返回某些东西时的一种方法。

创建一个模块

auto_auth.py


14
投票

dedit

MIDDLEWARE
在您的

settings.py
中:


add
如果您想要特定的用户,您可以更改为其他东西。

    回应您的评论:是的。 要在没有用户的情况下运行Django管理员,请尝试以下操作:
  • 'django.contrib.auth.middleware.AuthenticationMiddleware'
  • 'auto_auth.AutoAuthMiddleware'
    中删除
  • User.objects.filter()[0]

但是,如果您使用任何依赖Auth应用程序的应用程序,则您的时间很差。


为Django版本改编的接受答案> =1.10

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'

in
INSTALLED_APPS
对于

/[yourapp]/middleware.py

列表:


7
投票
COMCMENT或删除:

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



对于大多数人来说,很明显,但请注意,该解决方案仍然需要一个用户存在。手动创建一个或使用脚本自动创建一个:


如何自动在django上创建植物植物?
每个模式Django

  • 在码头容器中创建Django超级用户,而无需输入密码
  • 
    
其他选项允许任何人访问:

让第一个用户绕过身份验证

MIDDLEWARE

python manage.py createsuperuser

5
投票

以下解决方案

django5.1.2
中的工作,只是涉及修改
# 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

0
投票
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
对象而无需保存到数据库中,这可能会在Django尝试在

admin.py

表中记录更改时会产生错误。)
urls.py
并将其注册在

createsuperuser

0
投票

User


用于所有使用Django 3.0,
concomment此代码

auth_user_model ='customuser'

在您的设置中。
创建超级用户后,然后取消点击此代码
auth_user_model='customuser'
.

这发生在我身上,这就是我对Django3.0
你应该很好。希望它有帮助
    


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.