Django 系列博客(十四)
Posted zuanzuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 系列博客(十四)相关的知识,希望对你有一定的参考价值。
Django 系列博客(十四)
前言
本篇博客介绍在 html 中使用 ajax 与后台进行数据交互。
什么是 ajax
ajax(Asynchronous javascript And XML)翻译成中文就是‘’异步 JavaScript 和 XML‘’。即使用 JavaScript 语言与服务器进行异步交互,传输的数据为 XML(现在更多地使用 json)。
- 同步交互:客户端发出一个请求后,需要等待服务器响应结束,才能发出第二个请求;
- 异步交互:客户端发出一个请求后,无需等待服务器响应结束,也能发出第二个请求。
ajax 除了异步的特点外,还有一个就是:浏览器页面局部刷新。在页面没有进行刷新的情况下进行数据交互。
优点:
- ajax 使用JavaScript 技术向服务器发送异步请求;
- ajax 无需刷新整个页面。
基于 jQuery 的 ajax 实现
前端代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="/static/jquery-3.3.1.js"></script>
<title>regist</title>
{# <link rel="stylesheet" href="/static/jquery-3.3.1.js">#}
</head>
<body>
<p>用户:<input type="text" id="name"></p>
<p>密码:<input type="password" id="pwd"></p>
<p>确认密码:<input type="password" id="tpwd"></p>
<input type="button" id="submit" value="提交"><span id="error"></span>
</body>
<script>
$(‘#submit‘).click(function () {
console.log($(‘#submit‘));
{#$.ajax({#}
{# url:‘/regist/‘,#}
{# type:‘post‘,#}
{# data:{name:$("#name").val(), pwd:$("#pwd").val(), tpwd:$("#tpwd")},#}
{# success:function (data) {#}
{# console.log(data)#}
{# }#}
$.ajax({
url:‘/regist/‘,
type:‘post‘,
data:{name:$("#name").val(), pwd:$("#pwd").val(), tpwd:$("#tpwd").val()},
success:function (data) {
console.log(data)
}
})
})
</script>
</html>
后端代码
from django.http import JsonResponse
from django.shortcuts import render, redirect
from app01.models import *
# Create your views here.
def wrapper(func):
def inner(*args, **kwargs):
if args[0].method == ‘GET‘:
return func(*args, **kwargs)
elif kwargs[‘contentType‘] == ‘application/json‘:
import json
args[0].POST = json.loads(args[0].body)
return func(*args, **kwargs)
else:
return func(*args, **kwargs)
return inner
import json
# json.loads()
def regist(request):
dic = {‘status‘: 200, ‘msg‘: None}
print(request.body)
if request.method == ‘GET‘:
return render(request, ‘regist.html‘)
else:
print(‘/////‘)
print(request.POST, ‘dddd‘)
name = request.POST.get(‘name‘)
pwd = request.POST.get(‘pwd‘)
tpwd = request.POST.get(‘tpwd‘)
user = UserInfo.objects.filter(name=name).first()
if user:
dic[‘status‘] = 100
dic[‘msg‘] = ‘用户已存在‘
return JsonResponse(dic)
else:
if name and pwd and tpwd:
if pwd == tpwd:
UserInfo.objects.create(name=name, pwd=pwd)
dic[‘msg‘] = ‘注册成功‘
return JsonResponse(dic)
else:
dic[‘status‘] = 101
dic[‘msg‘] = ‘两次密码不一样‘
return JsonResponse(dic)
else:
dic[‘status‘] = 101
dic[‘msg‘] = ‘密码不正确‘
return JsonResponse(dic)
@wrapper
def login(request):
dic = {‘status‘: 200, ‘msg‘: None}
if request.method == ‘GET‘:
return render(request, ‘login.html‘)
else:
name = request.POST.get(‘name‘)
pwd = request.POST.get(‘pwd‘)
user = UserInfo.objects.filter(name=name).first()
if not user:
dic[‘status‘] = 100
dic[‘msg‘] = ‘用户不存在,请注册‘
return JsonResponse(dic)
else:
if pwd == user.pwd:
dic[‘msg‘] = ‘登陆成功‘
return JsonResponse(dic)
else:
dic[‘status‘] = 101
dic[‘msg‘] = ‘密码错误‘
return JsonResponse(dic)
js代码
$("#submit3").click(function () {
$.ajax({
url: ‘/auth/‘,
type: ‘post‘,
data: {
‘user‘: $("#id_name").val(),
‘password‘: $(‘#id_password‘).val()
},
success: function (data) {
{#console.log(data)#}
var data=JSON.parse(data)
if (data.user){
location.href=‘https://www.baidu.com‘
}else {
$(".error").html(data.message).css({‘color‘:‘red‘,‘margin-left‘:‘20px‘})
}
}
})
}
)
文件上传
请求头
- application/x-www-form-urlencoded
这是最常见的 POST 提交数据的方式了。浏览器的原生
以上是关于Django 系列博客(十四)的主要内容,如果未能解决你的问题,请参考以下文章