ajxa

choices参数

# 一般用在字段存储数据的情况可能被列举完全的情况
eg:性别 学历 来源
# 针对以上这些可能被列举完的情况,我们一般步存中文字符,男 女 未知,
利用到了choices参数

gender_choices = (
	(1, '男'),
    (2, '女'),
)
gender= models.IntegFiled(choices=gender_choices)

edu_choices=(
	('xiaoxue', 小学),
    ('chuzhogn',初中)
)

'''以后我们在数据库中添加数据的时候,就存对应的数字'''

# 取值
user_obj.gender -------> 1, 2
user_obj.get_字段_display()  ------》如果查出来的数字在范围中,就会映射对应的关系,如果超出了范围,就原样输出

MTV和MVC

# 这两个其实就是一个,本质都是MVC模式,他就是web应用的一种开发模式,说白了就是分层

M V C
# django自称是MTV模式
M T V

# 普遍情况下,都是分三层,当一些项目比较复杂的时候,还可能在加一层,S层,services层,逻辑层

多对多的创建方式

# 1. 全自动
authors = models.MantToManyField(to='被关联的表')
# 特点就是扩展性太差,可以正反向查询,还可以使用那4个方法,add  set remove  clear

# 2. 全手动
第三张表完全有我们自己创建,在第三张表种,自己创建外键关系
# 扩展性高,

# 3. 半自动的
第三张表也是我们自己创建,外键关系我们自己建立,
# 还需要在表中添加authors = models.MantToManyField(to='被关联的表')
'''放在book表中'''
authors = models.MantToManyField(to='被关联的表', through='指定第三张表',through_fields=('book', 'author'))

'''放在author表中'''
book = models.MantToManyField(to='被关联的表', through='指定第三张表',through_fields=('author', 'book'))

class Book2Author():
    book = 外键
    author = 外键
    

Ajax技术

# 特点:异步提交   局部刷新

例子:github的注册功能,实时验证邮箱的合法性,每次输完邮箱,就朝后盾发起一次请求

# 如何使用ajax
'''我们学习的是jQuery封装之后的版本,js原生的我们不在学了,js发送ajax需要4步'''

# 要想使用ajax,必须导入jQuery文件!!!!!!!
# 能发起ajax请求的不但只是jQuery可以,其他的也可以,axios,vue

# ajax的书写结构
$.ajax({
    url:'',
    type:'post',
    data:{'a':1, 'b':1, c:2},
    dataType:'json'
    # 当后端成功返回数据的时候,回调的函数
    success:function(res) {
        # res--------->后盾返回的数据
    }
})

# 总结:
当后端用HttpResponse返回的时候,前端应该
1. 反序列化:JSON.parse(res)
2. 指定一个参数:dataType:'json'

# 后端直接用JsonResponse,前端什么都不用做,直接取值

今日内容概要

  • 前后端传输数据的编码格式(理论)

    • urlencoded
    • form-data
    • json
  • ajax提交json格式的数据

  • ajax也可以提交文件数据

  • ajax结合layer弹窗实现删除的二次确认

  • django自带的序列化组件(Serializers了解)--->drf中---->大量使用序列化组件

  • 批量插入数据----->在django中,一次性插入大量的数据

今日内容详细

前后端传输数据的编码格式(理论)Content-Type

# urlencoded  form-data  json
"""
	我们只研究post请求的编码格式,get请求不在研究
	url?username=a&password=b
"""

form表单它能够2种:urlencoded  form-data
json格式的数据form表单是没办法提交的

能够提交json格式的数据的方式:
1. ajax
2. 第三方的工具:postman

# 1. form表单提交数据的编码格式
	form表单默认提交的数据编码格式是urlencoded(application/x-www-form-urlencoded)
    # 对于urlencoded格式的数据,django后端都会给封装到request.POST中取、
 数据格式:username=dsdsa&password=dsdas


# urlencode也可以改成form-data(multipart/form-data),改完之后,它可以提交文件数据
multipart/form-data; boundary=----WebKitFormBoundaryAib88pAWSV5kUOJw

针对form-data格式的数据,django后端会把普通数据还是封装到rquest.POST中,对于文件数据封装到了request.FILES中了


# 研究ajax
默认的提交格式是:Content-Type: application/x-www-form-urlencoded
django后端也是把数据都封装到了request.POST中

ajax提交json格式的数据

ajax要想提交json格式的数据,必须满足两个条件:
	1. content-type必须是:json (因为默认是urlencoded)
    2. 传输的数据必须是json格式的
    
'''ajax提交的json格式数据,django后端没有把数据封装到request.POST中'''
# 如何获取ajax提交的json格式数据?
# 在Django后端使用request.body

'''针对ajax提交的json格式数据,django后端没有做任何的封装,纯原生数据,在request.body中,需要我们自己手动处理数据格式!!!!!!!!!'''

# 总结:
$.ajax({
            url: '',
            type: 'post',
           	# 2.  data: JSON.stringify({'a': 1, 'b': 2, c: 3}),
            // 更改contenttype
    
    		# 1. contentType:'application/json',
            success: function () {

            }
        })
	
    

ajax提交文件数据

// 获取数据
        var username = $("#username").val();
        var password = $("#password").val();
        var myfile = $("#myfile")[0].files[0];

        // ajax提交文件数据,需要借助于form-data
        var myFormDataObj = new FormData();
        myFormDataObj.append('username', username);
        {#myFormDataObj.append('username', $("#username").val());#}
        myFormDataObj.append('password', password);


        // 提交文件数据、
        myFormDataObj.append('myfile', myfile);

        $.ajax({
            url: '',
            type: 'post',
            data: myFormDataObj,
            // 更改contenttype
            // 需要加两个参数
            contentType: false, // 告诉浏览器不要给我修改任何的编码格式
            processData:false,// 告诉浏览器不要对我的数据进行任何的修改或者干扰
            success: function () {

            }
        })
            
            
##################################################################################
总结:
       1. var myFormDataObj = new FormData();
       2. 获取数据,然后添加到myFormDataObj
            myFormDataObj.append('password', password);
            // 提交文件数据、
            myFormDataObj.append('myfile', myfile);
       3. 修改参数:
            contentType: false, // 告诉浏览器不要给我修改任何的编码格式
            processData:false,// 告诉浏览器不要对我的数据进行任何的修改或者干扰
       4. 在django后端,普通数据还是在request.POST中,文件数据在
            request.FILES里面
##################################################################################            

ajax结合layer弹窗实现删除的二次确认

# 1. 学会如何使用第三方工具-------》去看人家写的文档,根据文档把工具学会使用就行
https://layuiweb.com/demo/layer.html

https://layuiweb.com/layer/index.htm

django自带的序列化组件(了解)

# 让你从数据库总查询几条数据,然后序序列化给到前端,列表套字段的形式[{},{},{}]
from django.core import serializers
def ab_ser(request):
    user_list = models.Book.objects.all()
    # print(user_list) # <QuerySet [<Book: Book object (2)>, <Book: Book object (3)>, <Book: Book object (4)>]>
    # book_list = []
    # for obj in user_list:
    #     tmp = {
    #         'pk':obj.pk,
    #         'username':obj.username,
    #     }
    #     book_list.append(tmp)
    book_list = serializers.serialize('json', user_list)  # 了解
    return JsonResponse(book_list,safe=False)

批量插入数据

# 让你往book表插入10000条数据

select * from app01 limit 1,500  # 第一页
select * from app01 limit 501,1000  # 第二页
select * from app01 limit 1001,1500  # 第三页


# select * from app01
select * from app01 limit 99501,100000 # 最后一页
    from app01 import models

    # for i in range(10000):
    #     models.Book.objects.create(username='%s' % i)

    book_list = []
    for i in range(100000):
        book_obj = models.Book(username='%s' % i)
        book_list.append(book_obj)
    # book_list     一次插入多条数据 insert into table (username) values(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin'),(1,'kevin')
    models.Book.objects.bulk_create(book_list)
    # 不管数据有多大,只要不去查库,效率都可以忽略,
    '''以后再实际项目中,能够一次操作数据库完成的动作,就要尽量使用一次性的,'''
posted @ 2023-05-04 19:42  xiaolisolove  阅读(21)  评论(0)    收藏  举报