0

ログインしようとすると、次のように表示されます。

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'),

)
4

1 に答える 1

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が言ったように

編集:キーが辞書または辞書のような構造に存在するかどうかを確認することは良いことです。特に、そのキーを他の場所で削除する可能性がある場合は特にそうです。

于 2012-09-14T13:15:33.077 に答える