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就不同 ...
随机推荐
- [转]DDR3基本概念5 - DDR仿真中出现的Memory overflow错误的处理
ERROR: Memory overflow. Write to Address 7000fe with data xxxxxxxxxxxxxxxx4634899aabe03499 will be l ...
- VIVADO 2017.4配置MIG IP注意事项
1.2GB的single rank SODIMMs配置pin还是和以前一样没有问题: 2.8GB SODIMMs配置pin需要注意4点: (1).所有的DDR3引脚都需要在连续的BANK上,例如Z71 ...
- 从零开始搭建你的nvim ide
前言概述 vim由于其丰富的扩展性.出色的跨平台性.高效率的操作性深受一大批粉丝的追捧,甚至就连vim和emacs之间孰优孰劣的话题都能被引起一场编辑器之间的圣战,足以见vim是多么的优秀. vim的 ...
- spring security之 默认登录页源码跟踪
spring security之 默认登录页源码跟踪 2021年的最后2个月,立个flag,要把Spring Security和Spring Security OAuth2的应用及主流程源码研究透 ...
- Linux&C ——信号以及信号处理
linux信号的简单介绍 信号的捕捉和处理 信号处理函数的返回 信号的发送 信号的屏蔽 一:linux信号的简单介绍. 信号提供给我们一种异步处理事件的方法,由于进程之间彼此的地址空间是独立的,所以进 ...
- 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...
- 用户登录成功后重新获取新的Session
HttpSession session = request.getSession(); // 用来存储原sessionde的值 ConcurrentHash ...
- LOTO示波器实测——光照强度传感器
loto最近推出了很多的周边传感器模块的实测案例,本文介绍和演示LOTO示波器实测光照强度传感器的使用. 下图就是主角感光模块,可以用来测量光照强度. 这个模块也很简单,只有3个引脚,一个电源,3.3 ...
- java-UDP协议接收和发送数据
UDP发送数据的步骤: A:创建发送端的Socket服务对象 B:创建数据,并把数据打包 C:通过Socket对象的发送功能发送数据包 D:释放资源 public class SendDemo { ...
- Unity Ioc 类型初始值设定项引发异常,The type name or alias SqlServer could not be resolved. Please check your configuration file and verify this type name.
先看一下unity的配置信息 <unity> <typeAliases> <typeAlias alias="IDatabase" type=&quo ...