用户成功登录后重定向Django

时间:2015-07-07 14:52:28

标签: jquery python ajax django

我想在成功登录后重定向用户。目前,我这样做。 PS:我不想使用Django Forms。我这样做的方式是重定向用户的标准方式吗?

HTML

<form role="form">
    <div class="form-group">
        <label for="sender-email" class="control-label">Username:</label>
        <div class="input-icon"> <i class="icon-user fa"></i>
            <input id="sender-email" type="text" placeholder="Username" class="form-control email">
        </div>
    </div>
    <div class="form-group">
        <label for="user-pass" class="control-label">Password:</label>
        <div class="input-icon"> <i class="icon-lock fa"></i>
            <input type="password" class="form-control" placeholder="Password" id="user-pass">
        </div>
    </div>
    <div class="form-group">
        <a href="#" class="btn btn-primary btn-block" id="authenticate_user">Submit</a>
    </div>
</form>

JS

$(function(){
    $('#authenticate_user').click(function(){
        username = $('#sender-email').val();
        password = $('#user-pass').val();
        $.ajax({
            type : "POST",
            url: '/login',
            data: {'username':username, 'password':password},
            success : function(result){
                window.location = '/';
            },
            error: function (xhr, status, error) {
                var err = eval("(" + xhr.responseText + ")");
                alert(err.Message);
            },
        });
    })
})

views.py

@csrf_exempt
def signin(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return redirect('%s' % (settings.LOGIN_REDIRECT_URL))
            else:
                return {'error': 'Your account has been disabled.'}
        else:
            return {'error': 'Invalid Login.'}

    if request.user.is_authenticated():
        return redirect('%s' % (settings.LOGIN_REDIRECT_URL))

    ctx = {}
    return render(request, 'login/login.html', ctx)

1 个答案:

答案 0 :(得分:1)

大多数情况下可以,但我会说你可能需要合并一个重定向查询参数,因为经常会遇到客户端试图访问服务器上的资源的情况,并且由于她未经身份验证,她被重定向到登录将原始资源URI作为查询参数的url。登录成功后,Web服务器会将客户端重定向到她尝试访问的原始资源。