我有一個站點使用Django中的自定義身份驗證,使用用戶名,密碼和域對Web服務進行身份驗證。我需要爲每個後續視圖的請求對象存儲這些信息。Django調用Django會話
似乎一切順利,直到我試圖做一個jQuery的$ .ajax調用,調試從ajax請求調用的視圖我沒有會話信息,用戶是AnonymousUser。
我需要會話變量來隨後調用Web服務才能顯示數據。我已經嘗試了幾件事,但似乎沒有任何工作正常。我想確保用戶能夠提交這些Web服務查詢之前登錄,因爲我想讓用戶名/域在視圖中查找密碼(並且不在客戶端)並確保用戶始終。登錄
views.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匹配查詢不存在。查找參數爲{「用戶名」:無,「域」:無}
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);
}
});
a)request.POST'的內容是什麼?你確定你正在編碼你的js中的正確數據 - 什麼是$(this)綁定? '$(this).serialize()'的內容是什麼? Web開發工具(Firebug或Google Chrome開發工具)應該能夠向您顯示請求和響應數據 – scytale 2013-04-22 12:43:21
request.POST/.GET都是空字典(螢火蟲中的argv未定義)。 Cookies只有csrftoken,session是一個空字典,request.user是AnonymouseUser。我覺得我要麼沒有堅持請求對象的Ajax請求或非常相似的東西。 $(this).serialize()是我在其他代碼中看到的東西,我曾希望它會序列化響應...但是...這是一個假設,顯然不是這種情況。 – microbial 2013-04-22 18:33:27
啊。您可能應該對如何編寫AJAX登錄表單做更多的研究。基本上你需要從表單和''ajax'調用的'data'參數中獲得'username'和'password'。如果'ajax'調用以正確的方式綁定到'onSubmit'形式,'$(this).serialize()'會爲你做這件事。 – scytale 2013-04-23 09:36:10