我正在尝试在Django中创建一个AJAX登录表单,其中包括检查用户是否输入了正确的username
和password
。这是我现在的代码:
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函数。它成功将输入的username
和password
记录到控制台。
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数据?
答案 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())