有没有准备好的方式来使用Django管理页面没有任何形式的身份验证?我知道我可以使用this method,但那是用于Django 1.3。是否有任何更改可以让我在Django 1.6中更轻松地执行此操作?Django管理员没有身份验证
我的主要动机是我希望拥有尽可能少的数据库表,并且我只在本地使用它,所以不需要任何形式的身份验证(我只在服务器上运行反正localhost)。
有没有准备好的方式来使用Django管理页面没有任何形式的身份验证?我知道我可以使用this method,但那是用于Django 1.3。是否有任何更改可以让我在Django 1.6中更轻松地执行此操作?Django管理员没有身份验证
我的主要动机是我希望拥有尽可能少的数据库表,并且我只在本地使用它,所以不需要任何形式的身份验证(我只在服务器上运行反正localhost)。
创建一个模块auto_auth.py
:
from django.contrib.auth.models import User
class Middleware(object):
def process_request(self, request):
request.user = User.objects.filter()[0]
编辑MIDDLEWARE_CLASSES
在settings.py
:
'django.contrib.auth.middleware.AuthenticationMiddleware'
'auto_auth.Middleware'
您可以更改User.objects.filter()[0]
如果你想要一个特定的用户,就可以使用其他的东西。
回应你的评论:是的。试试这个:
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 Middleware(object):
def process_request(self, request):
request.user = User()
而且从INSTALLED_APPS
删除'django.contrib.auth'
但是如果你使用的是依赖于身份验证的应用程序的任何应用,你将有一个坏的时间。
接受的答案已经超级简单了,但是在弄乱了这个之后,我发现在最近的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或类似的被称为哈克的方式。
请注意,当一个人试图改变这种结构的东西时,django管理员抱怨:'在表上插入或更新“django_admin_log”违反外键约束“django_admin_log_user_id_c564eba6_fk_auth_user_id” 详细信息:Key(user_id)=(1) auth_user“。,所以你需要有一个用户,如果你需要的功能。 – Jieter
有没有办法完全消除用户,还是专门与用户模型绑定的管理站点?或者,我可以为每个请求创建一个新的假超级用户吗? – pseudonym117
看到我的编辑为答案。 –
谢谢!我将它用作完全独立应用程序的SQLite数据库的简单编辑器,因此这可以很好地工作。 – pseudonym117