ajax的用法
字段参数之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)
user_obj = models.User.objects.filter(pk=1).first()
user_obj.gender # 1
user_obj.get_gender_display() # 男性
'''如果没有对应关系则返回数据本身'''
多对多三种表关系
# 第一种:全自动(系统自动创建第三张外键表)
"""
优点在于不需要我们编写第三张关系表代码
缺点在于第三张关系表字段固定死了无法扩展
"""
authors = 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')
author_id = models.ForeignKey(to='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 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
"""使用jQuery封装的ajax一定要记得先引入ajax资源"""
点击事件
<script>
let $btnEle = $('#1') # 根据id标签查找对象
$btnEle.on('click',function(){ # 点击事件
alert('你好啊')
})
</script>
或者:$btnEle.click.function(){
alter('123')
}
# 基本语法格式
# 发送ajax请求
$.ajax({
url:'', // 朝哪个后端地址发送请求(不写 后缀 全路径)
type:'post', // 指定请求的方式(get post)
data:{'username':'jason','pwd':123}, // 请求携带的数据
success:function (args) {
// 异步回调机制(后端返回数据之后自动触发的操作)}
})
====================================================================
简易代码
<script>
let $c1 = $('#d1');
$c1.on('click'.function(){
let c2 = $(#'d2').val();
let c3 = $(#'d3').val();
$ajax({
url:'';
type:'post';
data:{'d2':d2,'d3':d3};
success:function(args){
$('#d4').val(args)
}
})
})
</script>
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的数据格式还可以是application/json(json格式)
后端获取前端数据的几种格式数据
request.POST
request.GET
request.FILES
但都无法获取json格式数据
可以使用request.body获取原生数据格式(bytes类型)
ajax发送json格式数据
"""
python中序列化反序列化
import json
json.dumps()
json.loads()
Js中序列化反序列化
JSON.stringify()
JSON.parse()
"""
# 言行一致(data和contentType的数据格式要保持一致)
$.ajax({
url:'',
type:'post', // 不写该参数 默认也是get请求
data:JSON.stringify({'username':'jason','pwd':123}), # 将数据转成json格式
contentType:'application/json', # 数据格式json格式,默认是格式是urlencoded
success:function (args) {
alert(args)
}
})
'''
# js格式:序列化、反序列化
JSON.stringify() # 序列化
JSON.parse() # 反序列化
'''