当我尝试登录时显示:
KeyError at /admin/
'loggedin'
只有在我使用正确的用户名和密码提交时才显示此错误。所以我认为这是关于我的管理员观点..
这是我的登录视图:
def log_user_in(request):
if request.method=='POST':
uname = request.POST['username']
password = request.POST['password']
user = authenticate(username=uname, password=password)
form = LoginForm(request.POST)
if form.is_valid():
if user is not None:
request.session['loggedin']="djangoo"
login(request, user)
return HttpResponseRedirect('/admin/')
else:
form = LoginForm()
return render_to_response('login.html',{'form':form,},context_instance=RequestContext(request))
并退出视图:
def log_user_out(request):
user = request.user
try:
del request.session['loggedin']
except KeyError:
pass
logout(request)
return HttpResponseRedirect('/blog/%s/'%(user))
和管理员视图:
def admin_view(request):
if request.session['loggedin'] == "djangoo":
#other codes..
这是我的urls.py:
urlpatterns = patterns('blog.views',
url(r'^superadmin/', include(admin.site.urls)),
url(r'^blog/(?P<username>[-\w]+)/$',view='index', name='index'),
url(r'^blog/(?P<username>[-\w]+)/post/(?P<postslug>[-\w]+)',view='single_post', name='view_blog_post'),
url(r'^login/$', view='log_user_in'), # i log in to admin page from this url
url(r'^admin/$', view='admin_view', name='admin'),# to this url
url(r'^admin/logout/$', view='log_user_out', name='logout'),
url(r'^admin/post/add/$', view='add_post',name='addpost'),
url(r'^admin/post/edit/(?P<post_id>\d+)', view='edit_post', name='editpost'),
url(r'^admin/post/delete/(?P<post_id>\d+)', view='delete_post', name='deletePost'),
)
答案 0 :(得分:4)
当您注销时,您手动删除request.session['loggedin']
键,当您浏览到管理页面时,request.session['loggedin']
会因为您已删除该密钥而失败。
您可以通过以下方式控制request.session
是否具有loggedin
键
`loggedin` in request.session
所以,编写管理员视图,如:
def admin_view(request):
if `loggedin` in request.session and request.session['loggedin'] == "djangoo":
#other codes..
或者只是使用
if request.session.get('loggedin') == 'djangoo'
正如@Alexander Larikov所说
编辑:我需要提一下,检查一个密钥是否存在于字典或类字典结构中是很好的,特别是如果你也可以在其他地方删除该密钥。