2014-06-24 56 views
4

有没有准备好的方式来使用Django管理页面没有任何形式的身份验证?我知道我可以使用this method,但那是用于Django 1.3。是否有任何更改可以让我在Django 1.6中更轻松地执行此操作?Django管理员没有身份验证

我的主要动机是我希望拥有尽可能少的数据库表,并且我只在本地使用它,所以不需要任何形式的身份验证(我只在服务器上运行反正localhost)。

回答

7

创建一个模块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_CLASSESsettings.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'但是如果你使用的是依赖于身份验证的应用程序的任何应用,你将有一个坏的时间。

+0

有没有办法完全消除用户,还是专门与用户模型绑定的管理站点?或者,我可以为每个请求创建一个新的假超级用户吗? – pseudonym117

+0

看到我的编辑为答案。 –

+0

谢谢!我将它用作完全独立应用程序的SQLite数据库的简单编辑器,因此这可以很好地工作。 – pseudonym117

5

接受的答案已经超级简单了,但是在弄乱了这个之后,我发现在最近的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或类似的被称为哈克的方式。

+0

请注意,当一个人试图改变这种结构的东西时,django管理员抱怨:'在表上插入或更新“django_admin_log”违反外键约束“django_admin_log_user_id_c564eba6_fk_auth_user_id” 详细信息:Key(user_id)=(1) auth_user“。,所以你需要有一个用户,如果你需要的功能。 – Jieter