0

必要な承認。いくつかの記事を読み、すべての組み込みメカニズムについて読み、それを実行します。彼はやり始めました。

登録はモジュールdjango-registrationを取り、自分でログインを書き込み、libを使用しdjango.contrib.authました。次のようになります。ログインページでログインします。すべて問題ないようですが、別のページに移動すると、認証が奇跡的に消えます。私が理解しているように、認証はセッションに書き込まれず、ログインページでのみ認証を取得します。

私は次のことをしました:

  1. ログインページで承認されました。
  2. Userオブジェクト全体をに記録しましたsession
  3. 各ページで、ページが読み込まれるときに最初に確認するのはUser、セッションデータがあるかどうかです。ある場合は、そこから読み取ります。

ソースは次のようになります。

def login_user(request):
state = "Please log in below..."
username = password = ''
if request.POST:
    username = request.POST.get('username')
    password = request.POST.get('password')

    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            state = "You're successfully logged in!"
        else:
            state = "Your account is not active, please contact the site admin."
    else:
        state = "Your username and/or password were incorrect."
    request.session['user'] = user
    return render(request,'auth.html',{'state':state, 'username': username, 'info':'info'})

と私が読んだページsession

@csrf_protect
def home(request):
    if "user" in request.session:
        user = request.session['user']
    else:
        user = None
    return render_to_response('home.html', {'user_name' : user}, context_instance = RequestContext(request))

しかし、私はそれが非常に愚かな方法だと思います。より適切な方法を提案できますか?

4

2 に答える 2

1

あなたが何を達成したいのかよくわかりません。ユーザーがログインするとすぐに、アクセスしrequest.user.is_authenticated()て、ビューで認証されたユーザーを確認したりrequest.user、ユーザー自体にアクセスしたりできます。

于 2012-08-31T10:23:18.923 に答える
0

セッションにユーザーを追加する必要はありません。これは、認証ミドルウェアによって自動的に行われます。

ユーザーを手動で確認する必要もありません。login_requiredデコレータを使用します。

これを組み合わせると、ログイン ビューは次のようになります。

def login_user(request):
    state = "Please log in below..."
    username = password = ''
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')
    else:
        return redirect('login/')

    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            state = "You're successfully logged in!"
        else:
            state = "Your account is not active, please contact the site admin."
    else:
        state = "Your username and/or password were incorrect."
    return render(request,'auth.html',{'state':state, 'info':'info'})

そして、あなたの他の見解では:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@csrf_protect
@login_required
def home(request):
    return render(request, 'home.html')

テンプレートで(ドキュメントから):

{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
于 2012-08-31T10:35:20.027 に答える