day10 ajax的基本使用
day10 ajax的基本使用
今日内容
字段参数之choices(重要)
多对多的三种创建方式
MTV与MVC理论
ajax语法结构(固定的)
请求参数contentType
ajax如何传文件及json格式数据
字段参数之choices(重要)
用户表
性别字段
学历字段
在职状态
...
"""如果我们在设计表字段的时候 有一些字段能够完全列举出所有可能的情况"""
# 这个时候推荐使用choices参数
class User(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
gender_choices = (
(1, '男性'),
(2, '女性'),
(3, '其他')
) # 存入别的字符类型也可以
gender = models.IntegerField(choices=gender_choices) # choices必须等于对应关系
user_obj = models.User.objects.filter(pk=1).first()
user_obj.gender # 1
user_obj.get_gender_display() # 使用它可以取出1的对应项,没有对应项只能取出存的值
'''如果没有对应关系则返回数据本身'''
多对多的三种表关系
# 第一种方式:全自动(自动帮你创建第三张表)
"""
优点在于不需要我们编写第三张关系表代码
缺点在于第三张关系表字段固定死了无法扩展(比如新增字段)
"""
author = models.ManyToManyField(to='Author')
# 第二种方式:纯手动(自己创建第三张关系表) 不推荐使用
"""
优点在于第三张表可以无限制的扩展字段
缺点在于需要自己手动编写 并且涉及到ORM正反向查询的时候不方便
"""
class Book(models.Model):
pass
class Author(models,Model):
pass
class Book2Author(models,Model):
book_id = models.ForeignKey(to='Book')
author_id = models.ForeignKey(to='Author')
bond_time = models.DateField(auto_now=True)
# 第三种方式:半自动(根据需求使用)
'''
优点:正反向查询还可以继续使用,第三张表可以自己添加字段
缺点:代码写起来麻烦
'''
class Book(models.Model):
authors = models.ManyToManyField( # 创建多对多外键字段
to='Author',
through='Book2Author' # 告诉orm第三张关系表是谁不要自动创
through_fields=('book_id','author_id') # 通过哪两个字段
)
class Author(models.Model): # 演示下,下面可参考
# 多对多外键字段在orm中可以建在任意一张管理表中
books = models.ManyToManyField(
to='Book',
through='Book2Author' # 告诉orm第三张关系表是谁不要自动创
through_fields=('author_id','book_id') # 通过哪两个字段
)
class Book2Author(models.Model):
book_id = models.ForeignKey(to='Book') # 关联book表
author_id = models.ForeignKey(to='Author') # 关联author表
bond_time = models.DateField(auto_now=True) # 增加字段
MTV与MVC模型理论
MTV模型
M:models模型层
T:template模板层
V:views视图层
MVC模型
M:models模型层
V:views视图层
C:controllar控制层(urls.py...)
"""
django自称为MTV模型 其实本质也还是MVC模型
大部分的web框架都属于MVC
"""
ajax语法
# 特征:异步提交 局部刷新
"""
可以发送网络请求的标签
a标签 GET请求
form表单 GET请求 POST请求
ajax技术 GET请求 POST请求
"""
# ajax并不是一门新的技术 而是有js代码演变而来 相当于我们python基础所学的装饰器(名称空间 函数对象 闭包函数)
# 我们学习jQuery封装之后的ajax代码(格式固定 并且语法简单 好记)
# 以后我们可能还会遇到使用其他框架封装的ajax技术
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
"""使用jQuery封装的ajax一定要记得先引入ajax资源"""
# 基本语法格式
$.ajax({
url:'', // 向哪个后端发送请求(路径有3方式:不写,后缀,全路径)
type:'post', // 指定请求的方式(get post)
data:{'username':'jason','pwd':123}, // 请求携带的数据
success:function (args) {
// 异步回调机制(后端返回数据之后自动触发的操作)}
})
# 并且后端中小白三板斧中返回的都会被function (args)中args接收,不会在和前端浏览器交互
content-Type参数
content-Type相当于说明了数据的组织格式
后端通过该参数就可以提前明确数据格式之后采取对应的处理措施操作数据
ajax默认的数据格式为urlencoded
该格式数据:i1=123213&i2=12313
针对该类型的数据:django会自动处理到request.POST中
form表单默认的数据格式也是urlencoded
该格式数据:i1=123213&i2=12313
针对该类型的数据:django会自动处理到request.POST中
form表单还可以发送数据格式为formdata
该格式数据无法查看到
针对该类型的数据:普通的数据还是解析到request.POST中 文件类型的数据解析到request.FILES中
Ajax发送Json格式数据
"""
python中序列化反序列化
import json
json.dumps()
json.loads()
Js中序列化反序列化
JSON.stringify()
JSON.parse()
"""
# 言行一致
$.ajax({
url:'',
type:'post', // 不写该参数 默认也是get请求
data:JSON.stringify({'username':'jason','pwd':123}),
contentType:'application/json',
success:function (args) {
alert(args)
}
})
def ajax(request):
if request.method == 'POST':
# 用request.POST,GET,FILES,获取不到json类型的数据。
print(request.body) # b'{"name":"meng","age":18}'
json_bytes = request.body
json_dict = json.loads(json_bytes) # 解码
print(json_dict) # {'name': 'meng', 'age': 18}
return HttpResponse(123)
return render(request,'ajax.html')
使用Ajax计算小工具
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
# 使用ajax必须导入文件
<body>
<input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3">
<button id="d1">计算</button>
<script>
// 1.查找计算器按钮标签
let $btnEle = $('#d1'); // 根据id查找标签对象
// 2.给按钮标签绑定一个点击事件
$btnEle.on('click', function () {
// 3.获取两个输入框内的数据
// 3.1 先查找到输入框之后获取里面的value属性值即可
let i1Val = $('#i1').val(); // val()拿到输入框里面的值
let i2Val = $('#i2').val();
// 4.发送ajax的请求
$.ajax({
uri: '', // 向哪个后端发送请求(路径有3方式:不写,后缀,全路径)
type: 'post', // 规定发送什么请求方式(get post)
data: {'i1': i1Val,'i2':i2Val}, // 请求携带的数据
success:function (args) { // 异步回调机制(后端返回数据之后,自动触发的操作)
// 形参args就是后端返回过来的数据
$('#i3').val(args)
}
})
})
</script>
</body>
# 后端
from django.shortcuts import render,HttpResponse
import json
def ajax(request):
if request.method == 'POST':
print(request.POST)
i1 = request.POST.get('i1')
i2 = request.POST.get('i2')
res = int(i1) + int(i2)
return HttpResponse(res)
return render(request,'ajax.html')
day10 ajax的基本使用的更多相关文章
- jQuery之ajax实现篇
jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...
- Ajax及跨域
概念 Ajax Ajax,Asynchronous JavaScript and XML,字面意思:异步的 JavaScript 和 XML,是指一种创建交互式网页应用的网页开发技术. 用于异步地去获 ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- ABP文档 - Javascript Api - AJAX
本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...
- ajax异步请求
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...
- 调用AJAX做登陆和注册
先建立一个页面来检测一下我们建立的用户名能不能用,看一下有没有已经存在的用户名吗 可以通过ajax提示一下 $("#uid").blur(function(){ //取用户名 va ...
- Ajax 概念 分析 举例
Ajax是结合了访问数据库,数据访问,Jquery 可以做页面局部刷新或者说是页面不刷新,我可以让页面不刷新,仅仅是数据的刷新,没有频繁的刷页面,是现在比较常用的一种方式做页面那么它是怎么实现页面无刷 ...
- ajax
常见的HTTP状态码状态码:200 请求成功.一般用于GET和POST方法 OK301 资源移动.所请求资源移动到新的URL,浏览器自动跳转到新的URL Moved Permanently304 未修 ...
- 学习笔记之MVC级联及Ajax操作
由于刚转型到MVC,MVC的架构模式很多不是很清楚,比如今天就想做个级联的操作,因为之前的ASP.NET的方式是通过:控件-->添加事件-->后台编写级联事件进行触发,但是这个MVC就不同 ...
随机推荐
- Vivado Synth/Place Faild但是没有给出error信息
最近遇到一个现象,以前可以编译通过的工程,修改之后发现Synthesis编译报错,而且没有给出error信息,以前也出现过无故place 失败但是没有给出error信息的现象,查看错误日志输出文件,出 ...
- gitbook热更新时报错operation not permitted
在使用gitbook写东西的时候,当文档内容有更新的时候,会自动更新内容到页面上,方便预览.但是,存在一个bug,就是会神奇的崩溃掉,出现如下的错误提示: Restart after change i ...
- JVM-内存区域与OOM
本篇博客内容主要参考<深入理解Java虚拟机> 内存区域与内存溢出异常 运行时数据区 Java虚拟机运行时数据区: 程序计数器(Program Counter Register)是一块较小 ...
- Linux环境下安装、配置Redis
linux下安装redis 官网下载链接:https://redis.io/download 安装 下载redis压缩包 1.选择Stable(5.0)下的Download 5.0.0 链接进行下载 ...
- js--数组的 Array.of() 和 Array.from() 方法的使用总结
前言 JavaScript 中数组的本质是一个对象,它存在的 length 属性值随数组元素的长度变化,但是开发中经常会遇到拥有 length 属性和若干索引属性的对象,被称为类数组对象,类数组对象和 ...
- 『学了就忘』Linux基础命令 — 39、挂载U盘和挂载NTFS分区
目录 1.在Linux系统中挂载U盘 (1)插入U盘 (2)查询U盘设备文件名 (3)挂载U盘 (4)U盘中的中文乱码 (5)U盘卸载 2.在Linux系统中挂载NTFS分区 (1)Linux的驱动加 ...
- 菜鸡的Java笔记 第二十一 final 关键字
使用final定义类,属性,方法 final在一些书中被称为终结器,意思是:利用final定义的类不能够有子类,利用final定义的方法不能够被覆写,利用final定义的变量就成 ...
- 教你用SQL进行数据分析
摘要:采用 SQL 作为数据查询和分析的入口是一种数据全栈的思路. 本文分享自华为云社区<如何使用 SQL 对数据进行分析?>,作者:zuozewei . 前言 我们通过 OLTP(联机事 ...
- Windows操作系统安全加固基线检测脚本
一.背景信息 在我们的安全运维工作中经常需要进行安全基线配置和检查,所谓的安全基线配置就是系统的最基础的安全配置,安全基线检查涉及操作系统.中间件.数据库.甚至是交换机等网络基础设备的检查,面对如此繁 ...
- [loj6031]字符串
为了方便,用$N=10^{5}$来描述复杂度 (对原串建立SAM)注意到$\sum|w|=qk\le N$,考虑对$q$和$k$的大小关系分类讨论: 1.若$q\le k$,即询问次数较少,将其与原串 ...