Django AJAX登录表单验证

时间:2016-12-29 07:35:04

标签: javascript jquery python ajax django

我正在尝试在Django中创建一个AJAX登录表单,其中包括检查用户是否输入了正确的usernamepassword。这是我现在的代码:

urls.py

urlpatterns = [
    url(r'^$', views.boxes_view, name='news'),
    url(r'^user_login/', views.user_login, name='user_login'),
]

forms.py

class UserLoginForm(forms.Form):
    username = forms.CharField(max_length=25)
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User

        fields = [
            'username',
            'password',
        ]

base.html文件

<form method="post" enctype="multipart/form-data" action="{% url 'user_login' %}" class="form_login">{% csrf_token %}
<div class="loginWrapper">
<div class="login">
    <div class="loginBox">
        {{ form_login.username|placeholder:"username"|add_class:"login_username" }}
        {{ form_login.password|placeholder:"password"|add_class:"login_password" }}

        <input type="submit" value="login"/>
    </div>
</div>
</div>
</form>

这是我的jQuery函数。它成功将输入的usernamepassword记录到控制台。

base.js

$('.form_login').on('submit', function(e) {

    $.ajax({
        type: 'POST',
        url: 'http://127.0.0.1:8000/user_login/',
        data: {'username': $('.login_username').val(),
                'password': $('.login_password').val()},
        success: function (data) {
            console.log(data)
                }
        }
    )
})

如何从jQuery函数中获取data到我的views.py?这是我当前的视图,可以正常登录用户,但是如果输入了错误的凭据,它只是提交表单,这就是为什么我想实现AJAX以防止提交和列出错误(如果发生这种情况)。

views.py

def user_login(request):
    form_login = UserLoginForm(request.POST or None)
    if form_login.is_valid():
        username = form_login.cleaned_data['username']
        password = form_login.cleaned_data['password']
        user = authenticate(username=username, password=password)
        if user is not None and user.is_active:
            login(request, user)
        else:
            pass
    else:
        print(form_login.errors)
        print(form_login.non_field_errors)
        form_login = UserLoginForm()

    return redirect('/')

然后我如何在views.py中验证jQuery数据?

1 个答案:

答案 0 :(得分:1)

首先,您不应该编写自己的注册/身份验证系统。那里有很多经过试验和测试的解决方案。 Django Allauth浮现在脑海中。

其次,如果你在ajax中发送登录数据,你会希望视图返回一个ajax响应

    if user is not None and user.is_active:
        login(request, user)
        return JsonResponse({'status': 'ok'});
    else:
        return JsonResponse({'status': 'login failed'});

然后在您的表单无效部分中,您只是重定向到另一个页面。使用ajax并不能很好地工作。

else:
    return JsonResponse(form_login.errors.as_json())