2014-06-24 58 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