django - 单击Django表单中的按钮后Ajax无法正常工作
问题描述
我有一个使用 AJAX 的登录表单。我计划调用一个 API 并使用 JWT 取回令牌。但是,单击按钮时,AJAX 调用不起作用,我仍在登录页面中。
这是我到目前为止所做的:
视图.py:
def login(request):
return render(request, 'myapp/login.html')
class LoginAPI(APIView):
permission_classes = [AllowAny]
def post(self, request, format = None):
username = request.data['username']
password = request.data['password']
new_user = authenticate(username = username, password = password)
if new_user is not None:
url = 'http://localhost:8000/api/token/'
values = {
'username' : username,
'password' : password
}
r = requests.post(url, data = values)
token_data = r.json()
return Response(token_data)
else:
return Response({"status" : "Denied"}, status=status.HTTP_400_BAD_REQUEST)
登录.html:
{% extends 'users/base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block javascript %}
<script src='{% static "myapp/js/main.js" %}'></script>
{% endblock %}
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
Usernam> <input id="username" type="text" name="username" value="" required="">
Password <input id="password" type="password" name="password" value="" required="">
<button id ='login_button' type="button" value="submit" > Login </button>
</form>
</div>
{% endblock content %}
主.js:
$(document).ready(function() {
$('#login_button').click(function () {
var username = $('#username').val();
var password = $('#password').val();
$.ajax({
cache: false,
method: 'POST',
url: "/login_api/",
data: {username:username, password: password},
datatype: 'json',
success: function(data) {
console.log(data.access);
localStorage.setItem('access', data.access);
window.location.href = 'http://127.0.0.1:8000/interface.html';
});
});
});
base.html:
#script tags included in base template
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
{% block javascript %}{% endblock javascript %}
网址.py:
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', my_views.login, name = 'login'),
path('login_api/', LoginAPI.as_view(), name = 'login_api'),
]
单击“登录”按钮时,未调用 AJAX,因此未访问 API,并且我未收到任何令牌。我该如何解决这个问题?我哪里错了?
解决方案
推荐阅读
- amazon-ec2 - 尽管尝试了一切都无法连接到我的 EC2 实例
- xamarin.forms - 如何在 Xamarin Forms 中水平展开标签
- javascript - SQLITE DELETE FROM WHERE id IN (?) 仅删除第一个项目
- c# - .Net Core Web API 如何从 .Net 4x 读取分段上传?
- javascript - 如何根据 JSON 数据中的多个变量过滤 D3 中的数据?
- hpack - hpack 替换 cabal - 找不到项目根目录中的 Lib 目录
- android - 如何在循环中的动画之间放置延迟
- python - 完成步骤后更新轨迹字典
- node.js - 在 NodeJS Express 后端构建 Vue 的空白页面
- matlab - 立体图像的图像校正