我无法登录django管理页面。当我输入有效的用户名和密码时,它只会再次显示登录页面,没有错误消息
这个问题出现在django FAQ,但我已经在那里找到答案,但仍无法通过初始登录界面。
我在ubuntu 12.04上使用django 1.4和apache2以及modwsgi。
我已确认我在admin.py
文件中注册了admin,确保在添加INSTALLED_APPS
后同步syncdb。
当我输入错误的密码时,我 DO 收到错误,因此我的管理员用户正在通过身份验证,只是没有进入管理页面。
我已经尝试将SESSION_COOKIE_DOMAIN
设置为机器的IP和无。 (确认cookie域显示为机器的Chrome中的IP)
另外,检查用户是否通过shell进行身份验证:
>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff
True
>>> u.is_superuser
True
>>> u.is_active
True
尝试使用IE8和chrome canary登录,两者都会返回登录界面。
还有其他我想念的东西????
settings.py
...
MIDDLEWARE_CLASSES = (
'django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.staticfiles',
'django.contrib.gis',
'myapp.main',
)
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_SAVE_EVERY_REQUEST = True
SESSION_COOKIE_AGE = 86400 # sec
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_NAME = 'DSESSIONID'
SESSION_COOKIE_SECURE = False
urls.py
from django.conf.urls.defaults import * #@UnusedWildImport
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^bin/', include('myproject.main.urls')),
(r'^layer/r(?P<layer_id>\d+)/$', "myproject.layer.views.get_result_layer"),
(r'^layer/b(?P<layer_id>\d+)/$', "myproject.layer.views.get_baseline_layer"),
(r'^layer/c(?P<layer_id>\d+)/$', "myproject.layer.views.get_candidate_layer"),
(r'^layers/$', "myproject.layer.views.get_layer_definitions"),
(r'^js/mapui.js$', "myproject.layer.views.view_mapjs"),
(r'^tilestache/config/$', "myproject.layer.views.get_tilestache_cfg"),
(r'^admin/', include(admin.site.urls)),
(r'^sites/', include("myproject.sites.urls")),
(r'^$', "myproject.layer.views.view_map"),
)
urlpatterns += staticfiles_urlpatterns()
Apache版本:
Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured
Apache apache2 / sites-available / default:
<VirtualHost *:80>
ServerAdmin ironman@localhost
DocumentRoot /var/www/bin
LogLevel warn
WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
WSGIProcessGroup lbs
WSGIScriptAlias / /var/www/bin/apache/django.wsgi
Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
ServerAdmin ironman@localhost
DocumentRoot /var/www/bin
LogLevel warn
WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
WSGIProcessGroup tilestache
WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>
更新
通过runserver
使用开发服务器时,管理页面会继续运行,因此它似乎是一个wsgi / apache问题。还没有想出来。
解
问题是我将设置文件SESSION_ENGINE
的值设置为'django.contrib.sessions.backends.cache'
,而没有正确配置CACHE_BACKEND
。
我已将SESSION_ENGINE更改为'django.contrib.sessions.backends.db'
以解决问题。
答案 0 :(得分:49)
调试步骤:
django_session
表中看到了正在创建的记录?如果不是
django_session
表格django_session
表中看到了正在创建的记录?如果这出现任何有用的调试,请告诉我。
示例设置文件:https://github.com/fyaconiello/Django-Blank-Bare-Bones-CMS/blob/master/dbbbcms/settings.py
答案 1 :(得分:9)
>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff True
>>> u.is_superuser True
Is there something else I'm missing????
u.is_active
应为True
答案 2 :(得分:3)
我们的应用中遇到了类似的问题,这些问题可能有所帮助:
使用清理命令清除django_sessions中的旧会话
检查firefox(firebug)或chrome开发人员工具中的cookie大小。由于默认情况下在admin(django.contrib.messages.middleware.MessageMiddleware)中启用了消息传递,因此cookie大小有时会大于4096字节,并且会进行多次编辑和删除。一个快速测试是删除“消息”cookie,看看之后是否可以登录。
我们实际上最终切换到nginx / uwsgi路由,因为这和其他与apache有关的内存问题。从那以后在nginx中没有看到过这种情况。
答案 3 :(得分:2)
听起来像会话问题,因为在帖子之后你被重定向并且系统立即忘记你已登录。
尝试以下方法:
答案 4 :(得分:2)
我不相信管理员密码存储在settings.py文件中。它是在你第一次syncdb时创建的。我想你要么跳过创建超级用户,要么只是打错了。 尝试在项目根目录中运行终端。:
python django-admin.py createsuperuser
这将允许您重新键入管理员登录名。另见https://docs.djangoproject.com/en/dev/ref/django-admin/
答案 5 :(得分:1)
我不太确定,但问题可能在于您的网址配置,具体在以下两行:
(r'^admin/', include(admin.site.urls)),
(r'^sites/', include("myproject.sites.urls")),
很久以前,我在浏览Django项目的管理员时遇到了麻烦,因为单个URL配置覆盖了管理URL的一部分。当您指定包含也是管理URL一部分的元素的自定义URL配置时,似乎Django不喜欢它。在您的情况下,您已在django.contrib.sites
中启用了应用settings.py
。您可以转到http://127.0.0.1:8000/admin/sites/
访问此应用的管理面板。可能是您的网址配置r'^sites/'
会覆盖管理网址的一部分。尝试重命名此特定网址配置,或在django.contrib.sites
中停用INSTALLED_APPS
以进行测试。
请注意,这只是一个假设。我所知道的是,Django的管理面板对使用类似名称(如自己的URL)的URL配置有点挑剔。我此刻无法自己测试。但也许这会对你有所帮助。
答案 6 :(得分:1)
检查有关此主题的其他一些文章,它可能与sys.path有关。您可以在运行开发服务器和运行WSGI时检查和比较sys.path。
答案 7 :(得分:1)
您是否尝试过创建用户:
python manage.py createsuperuser
我在测试计算机上创建数据库并将其迁移到部署服务器时遇到同样的问题......
答案 8 :(得分:1)
检查您是否至少有一个site
可以使用。
>>> from django.contrib.sites.models import Site
>>> Site.objects.count()
(0.048) SELECT COUNT(*) FROM `django_site`; args=()
1
如果你在这里看到0 - 创建一个。
答案 9 :(得分:1)
确保具有以下条目的数据库用户表为true:
is_staff => True (if exit).
is_active => True .
is_superuser => True.
答案 10 :(得分:1)
我有这个问题。问题是在生产中我将两个变量设置为True
,允许我使用https连接到网站。
SESSION_COOKIE_SECURE
和CSRF_COOKIE_SECURE
设置为False
。将这两个变量更改为False
后,我可以在本地开发时登录管理站点。
答案 11 :(得分:0)
我有同样的问题,它刚刚在重启服务器后解决了:
systemctl restart nginx
答案 12 :(得分:0)
我的问题是我的管理员页面未加载且无法正常工作。这是我所做的:
pip uninstall django
pip install django==2.2
有关更多详细信息,请检查Django Documentation。
答案 13 :(得分:0)
我要做的是手动导航到我要访问的URL。
就像这样:http://wildlifeapi.herokuapp.com/admin/
返回了可怕的Heroku应用程序错误。
所以我要做的是访问http://wildlifeapi.herokuapp.com/admin/api/animal/
和BINGO!它奏效了。
有趣的是,它在我的手机上运行良好。可能是Django重定向错误。
答案 14 :(得分:0)
无法登录后,我在上面的评论中看到有人提到删除非标准设置。
将其添加到我的本地设置中可以为我解决
SESSION_COOKIE_SECURE =假
答案 15 :(得分:0)
对我来说,我无法登录firefox中的管理页面,但可以使用chrome登录。 问题是我在settings.py中设置了CSRF_COOKIE_PATH。 永远不要使用它。它在django 1.8上无法正常工作。
答案 16 :(得分:0)
我遇到了一个相关的问题,我尝试登录,并且在套接字最终被杀之前页面会挂起。事实证明我确实登录了,但其中一个登录信号处理器正在冻结。
Celery无法将异步任务传递给RabbitMQ,因为RabbitMQ服务器无法启动。
答案 17 :(得分:0)
您可以确保,创建的用户已被标记为Is_staff = True,我有时会忘记将此标记为允许用户登录django admin
答案 18 :(得分:0)
免责声明:我还无法添加评论,因此我必须在此提出澄清,同时提出解决方案。对不起。
登录后用户是否立即注销?像this issue
这样的东西您可以通过多种方式进行检查,我建议在注销信号中添加一个钩子(您可以将它放在models.py中):
from django.contrib.auth.signals import user_logged_out
def alertme(sender, user, request, **kwargs):
print ("USER LOGGED OUT!") #or more sophisticate logging
user_logged_out.connect(alertme)
然后尝试登录并检查控制台中是否显示该消息。如果出现,则必须在登录后检查是否有重定向或自定义模板调用注销。希望它可以帮助您找到问题。
答案 19 :(得分:-1)
使用其他虚拟环境。当我使用conda环境时,它对我有用。