![](/img/trans.png)
[英]Redirect a user after login with ajax validation to the same page where he was
[英]Do not want to prompt login screen again for the user after he register and log's in first time. Django
我希望用戶在首次登錄后每次都能登錄。 腳步:
現在,下次用戶已經注冊,並且我不想再詢問他的用戶名和密碼,因為他已經注冊並登錄了。因此,此時,當他單擊登錄按鈕時,應直接將其重定向到無需輸入用戶名和密碼的應用程序。
我的登錄views.py是
from datetime import datetime
from django.contrib import auth
from django.core import serializers
from django.core.exceptions import ValidationError
@csrf_exempt
def login_android(request):
print "i am in view"
if request.method == "POST":
print "you are in method"
username = request.POST['name']
password = request.POST['password']
#user = auth.authenticate(username=username,password=password)
print username
login_api(request,username,password)
user = auth.authenticate(username=username,password=password)
print user
if user==None:
print "user is not available"
dict = {'username': 'Wrong username or password'}
response = json.dumps(dict)
return HttpResponse(response, mimetype="application/json")
else:
response = json.dumps((model_to_dict(user)), cls=DjangoJSONEncoder)
return HttpResponse(response, mimetype="application/json")
我的登錄api.py文件是
def login_api(request,username,password):
print "you are in login api"
user = auth.authenticate(username=username,password=password)
print user
if user:
if user.is_authenticated():
print "user aunticated"
auth.login(request,user)
else:
raise ValidationError
return user
我在.html頁面中的登錄
$(function()
{
localStorage['domain'] = "http://122.171.89.190";
var domain = localStorage['domain'];
$('#fac1').on('click', function () {
var username = $("#username").val();
var password = $("#pwd").val();
data = {
name: username,
password: password
};
$.ajax({
url: domain + "/login/login_android_here/",
type: "POST",
data: data,
success: function (response) {
dat=response.username;
if (dat==username){
window.location = 'file:///android_asset/www/posts.html';
}
else{
$("#danger").html(dat);
$("#danger").css("color","red");
}
},
error: function () {
}
});
return false;
});
});
如果用戶已經注冊並登錄,我希望用戶單擊登錄按鈕后直接將其重定向到應用程序。
用戶單擊登錄按鈕時會調用哪個視圖? 當用戶單擊登錄按鈕時,是否會調用login_android視圖? 如果是,請在視圖的開頭添加以下行:
from django.conf import settings
def login_android(request):
if request.user.is_authenticated():
return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
#if the redirect URL is not part of the Django app and you do not know where auth.login(request, user) redirects to, then try
#user = request.user
#auth.login(request, user)
這將檢查用戶是否已經登錄,如果已經登錄,它將把他重定向到任何地方
auth.login(request, user)
重定向到。 只是換了
return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
行以重定向到應用程序的URL(我不確定您將應用程序的URL設置為什么)。
在這里,您可以在注冊時做一件事,您可以將用戶重定向到主應用程序頁面。 這樣用戶將自動獲得登錄信息。
if request.method == "POST":
print "you are in method"
username = request.POST['name']
password = request.POST['password']
login_api(request,username,password)
user = auth.authenticate(username=username,password=password)
if user==None:
dict = {'username': 'Wrong username or password'}
response = json.dumps(dict)
return HttpResponse(response, mimetype="application/json")
else:
response = json.dumps((model_to_dict(user)), cls=DjangoJSONEncoder)
return HttpResponse(response, mimetype="application/json")
並在ajax請求中執行所需的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.