有沒有準備好的方式來使用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