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的基本使用的更多相关文章

  1. jQuery之ajax实现篇

    jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...

  2. Ajax及跨域

    概念 Ajax Ajax,Asynchronous JavaScript and XML,字面意思:异步的 JavaScript 和 XML,是指一种创建交互式网页应用的网页开发技术. 用于异步地去获 ...

  3. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  4. ABP文档 - Javascript Api - AJAX

    本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...

  5. ajax异步请求

    做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...

  6. 调用AJAX做登陆和注册

    先建立一个页面来检测一下我们建立的用户名能不能用,看一下有没有已经存在的用户名吗 可以通过ajax提示一下 $("#uid").blur(function(){ //取用户名 va ...

  7. Ajax 概念 分析 举例

    Ajax是结合了访问数据库,数据访问,Jquery 可以做页面局部刷新或者说是页面不刷新,我可以让页面不刷新,仅仅是数据的刷新,没有频繁的刷页面,是现在比较常用的一种方式做页面那么它是怎么实现页面无刷 ...

  8. ajax

    常见的HTTP状态码状态码:200 请求成功.一般用于GET和POST方法 OK301 资源移动.所请求资源移动到新的URL,浏览器自动跳转到新的URL Moved Permanently304 未修 ...

  9. 学习笔记之MVC级联及Ajax操作

    由于刚转型到MVC,MVC的架构模式很多不是很清楚,比如今天就想做个级联的操作,因为之前的ASP.NET的方式是通过:控件-->添加事件-->后台编写级联事件进行触发,但是这个MVC就不同 ...

随机推荐

  1. 全志Tina_dolphin播放音视频裸流(h264,pcm)验证

    最近在验证tina对裸流音视频的支持,主要指h264视频裸流及pcm音频裸流. 在原始sdk中有针对很多video和audio类型的parser,但就是没有找到pcm和h264的parser,所以需要 ...

  2. fatal error: sqlite3.h: No such file or directory

    编译带有sqlite3的数据库c语言程序时,出现fatal error: sqlite3.h: No such file or directory,找不到头文件的问题.应该是是系统没有安装函数库. 在 ...

  3. 【java设计模式】(10)---模版方法模式(案例解析)

    一.概念 1.概念 模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式. 它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的 ...

  4. redis的一般使用和常规配置

    https://www.cnblogs.com/HTLucky/p/12027889.html Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANS ...

  5. springcloud优雅停止上下线与熔断

    SpringCloud 服务优雅上下线 Spring Boot 框架使用"约定大于配置"的特性,优雅流畅的开发过程,应用部署启动方式也很优雅.但是我们通常使用的停止应用的方式是 k ...

  6. k8s入坑之路(8)kube-proxy详解

    kube-proxy 每台机器上都运行一个 kube-proxy 服务,它监听 API server 中 service 和 endpoint 的变化情况,并通过 iptables 等来为服务配置负载 ...

  7. 行星万象表白墙微信小程序、社交微信小程序,后台完整,支持多区域运营,扫码体验。

    简介 中国目前大概有5000个表白墙,累计用户近3000万,是一个庞大的群体,但现在大都以微信朋友圈为基础进行信息中转,但是这种模式经营者和用户都不友好,尤其是经营者无法变现,用户无法公开评论,这些种 ...

  8. Linux 软连接与硬连接 区别

    先说结论 软连接相当于快捷方式,访问软连接会被替换为其指向的绝对路径,如果其指向的文件被删除,则无法访问. 硬连接相当于指针,与它指向的文件都指向相同的inode,当其指向的文件被删除,inode由于 ...

  9. [bzoj2432]兔农

    将每一个重置为0的点作为一段,那么它会导致后面为以x x为开头的斐波拿起数列的东西,那么设这一段是以x为开头,要快速转移到下一段,就可以解决这道题目为了转移,我们要处理出下面的东西:1.求出x关于模k ...

  10. linux新增定时脚本

    crontab -e 然后新增: 0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh 控制台回显"crontab:inst ...