ユーザー名、パスワード、およびドメインを使用して Web サービスに対して認証する Django のカスタム認証を使用するサイトがあります。後続のビューのリクエスト オブジェクトごとにこの情報を保存する必要があります。
jquery $.ajax 呼び出しを行い、ajax 要求から呼び出されるビューをデバッグするまで、すべてがうまくいっているようです セッション情報がなく、ユーザーは AnonymousUser です。
データを表示するための Web サービスへの後続の呼び出しを行うには、セッション変数が必要です。そこでいくつか試してみましたが、何も正しく機能していないようです。これらのWebサービスクエリを送信する前に、ユーザーがログインしていることを確認したいのは、ビューでパスワードを検索するためにユーザー名/ドメインを保持し(クライアント側には持たない)、ユーザーが常にログインしました。
ビュー.py
def login(request):
if settings.DEBUG == True:
print "views.login:Attempting loging at views.login(request)"
if request.method == 'POST':
if settings.DEBUG:
print "views.login: method is POST"
form = LoginForm(request.POST)
if form.is_valid():
if settings.DEBUG:
print "Form is valid, attepmting to authenticate"
Login(request, form.get_user())
str = reverse('cm_base.views.index')
request.session['username']=form.get_user()
request.session['domain']=form.get_domain()
return render_to_response('cm_base/index.html',
{"DEBUG": True,
"user":request.session.get('username'),
'tabs': settings.TAB_LIST},
context_instance=RequestContext(request))
else:
# Their password / email combination must have been incorrect
pass
else:
form = LoginForm()
return render_to_response('cm_base/login.html',
{"DEBUG": True,
'form' : form
},
context_instance=RequestContext(request))
@login_required()
def index(request):
if request.method == 'POST':
print "POSTING"
if settings.DEBUG == True:
print "views.index:Opening index"
return render_to_response('cm_base/index.html',
{"DEBUG": True,
"user":"user",
'tabs': settings.TAB_LIST},
context_instance=RequestContext(request))
@login_required()
def scorecard(request):
user = CustomUser.objects.get(username=request.session.get('username'),
domain=request.session.get('domain'))
* 上記の行で DoesNotExist: CustomUser matching query does not exist で失敗します。ルックアップ パラメータは {'username': None, 'domain': None} でした
base.js
$.ajax({
url : path,
data: $(this).serialize(),
headers: {'X-CSRFToken':getCookie('csrftoken')
,'sessionid':getCookie('sessionid')
},
success : function(data) {
console.log($(this));
//refresh right div
$('#contentpane').empty();
$('#contentpane').html(data.rhtml);
console.log(data.rhtml);
}
});