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就不同 ...
随机推荐
- Python reload(sys) NameError: name 'reload' is not defined
转载:Python reload(sys) NameError: name 'reload' is not defined - vercont - 博客园 (cnblogs.com) 对于 Pytho ...
- 安装配置多个版本JDK
前言:JDK有多个版本,有时为了开发需要切换不同的版本,在一部电脑上安装多个JDK,只需要按以下配置,每次即可轻松使用.以下环境为Windows10 安装JDK 安装JDK8 配置环境变量 需要配置J ...
- DeWeb配置SSL的方法,未亲测,供参考
DeWeb配置SSL的方法1.购买域名的服务商申明免费的SSL证书,然后证书类型下载选择Nginx2.下载Nginx,http://nginx.org/download/nginx-1.20.0.zi ...
- 解决CentOS添加新网卡后找不到网卡配置文件,配置多网卡并设置静态路由
参考文章 https://blog.csdn.net/qq_36512792/article/details/79787649 使用VMware Workstation虚拟机安装好CentOS7虚拟机 ...
- 【Go语言细节】反射
什么是反射 维基百科上反射的定义: 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问.检测和修改它本身状态或行为的一种能力.用比喻来说,反射就是程序在运行的时候能够"观 ...
- 开发属于自己的包,并上传到npm上
1.DIY开发包 1.1符合标准的包结构 一个规范的包,它的组成结构,必须符合以下3点要求: 包必须以单独的目录而存在 包的顶级目录下,必须包含package.json这个包管理文件 package. ...
- Linux配置2个Tomcat同时运行
先说一下怎么遇到的这个问题,在练习linux中部署web项目时,linux系统安装了两个tomcat. 操作步骤: 1.配置profile#vi /etc/profile 输入以下内容: 这是两个to ...
- linux堡垒机下定位日志文件内容
查找关键词grep 命令: grep '关键字' 文件 --color 功能:搜素文件内容 语法: grep [-iv] 关键字 文件 -i 不区分大小写 -v 忽略指定字符串 -n 显示行号 -C ...
- Oracle四大语言DDL DML DCL TCL
DDL(数据定义语言) creater 创建数据表 ceater table 表名 (); alter 修改表结构 添加字段:alter table 表名 add 列名 数据类型 null 删除字段: ...
- 工具篇:apache-httpClient 和 jdk11-HttpClient的使用
关注公众号,一起交流,微信搜一搜: 潜行前行 HttpClient (apache) apache HttpClient 是 java项目里 较为常用的组件之一:对接外部服务时,各个商家提供的接口是各 ...