python学习Day62

Day 62

今日内容概要

  • 图书管理系统讲解
  • AJAX简介
    • 基础语法
    • 数据编码格式
    • ajax携带文件数据
    • 回调函数
  • Django内置的序列化serializers模块

今日内容详细

一.图书管理系统讲解

1.数据准备
2.首页搭建
3.书籍展示
4.书籍添加
5.书籍编辑
6.书籍删除
数据准备
1.新建django文件 注意新建一个app01应用
    (1)settings.py中检查INSTALLED_APPS中app01有没有注册
    (2)MIDDLEWARE中的csrf注释掉
    (3)TEMPLATES中'DIRS':[os.path.join(BASE_DIR,'templates')]
2.把django中的数据库改为mysql
    (1)cmd>mysql>create databas 库名 #创建一个数据库
    (2)settings.py中把DATABASES中的'sqlite3'改为'mysql'
        DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'day62',
            'USER':'root',
            'PASSWORD':'123',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'CHARSET':'utf8'}}
    (3)settings.py中最下方配置静态文件
        STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
        然后在day62下创建一个static文件夹
3.models.py中创建4张表格式
    class Book(models.Model):
        """图书表"""
        title=models.CharField(max_length=32)
        price=models.DecimalField(max_digits=8,decimal_places=2)
        publish_time=models.DateField(auto_now=True)
        publish=models.ForeignKey(to='Publish',on_delete=models.CASCADE)#一对多字段
        authors=models.ManyToManyField(to='Author',)#多对多字段
        def __str__(self):
            return f'书籍对象:{self.title}'
    class Publish(models.Model):
        """出版社表"""
        name=models.CharField(max_length=32)
        addr=models.CharField(max_length=64)
        def __str__(self):
            return f'出版社对象:{self.name}'
    class Author(models.Model):
        """作者表"""
        name=models.CharField(max_length=32)
        age=models.IntegerField()
        author_detail=models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)#一对一字段
        def __str__(self):
            return f'作者对象:{self.name}'
    class AuthorDetail(models.Model):
        """作者详情表"""
        phone=models.BigIntegerField()
        address=models.CharField(max_length=64)
        def __str__(self):
            return f'作者详情对象:{str(self.phone)}|{self.address}'
4.执行数据库迁移/同步命令
    Ctrl+Alt+R
    makemigrations
    migrate
5.连接数据库
    user、password、要连接的库、测试一下是否成功、应用后确定
6.给作者表、作者信息表、出版社表添加数据

二.AJAX简介

  ajax(Asynchronous Javascript And XML)翻译成中文就是"异步的Javascript和XML".即使用Javascript语言与服务器进行异步交互,传输的数据为XML
  ajax是js(Javascript)自带的功能,是jQuery封装之后版本

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

最大的优点:在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容
与form表单的区别:类似于注册账号时输入用户名,还没点提交 系统就显示出来是否被注册过

同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求

1.基础语法

$.ajax({
    url:'',                   #控制数据的提交地址(不写就是当前页面地址) 等价于form表单的action参数
    type:'',                  #控制请求方式(默认get请求 注:小写) 等价于form表单的method参数
    data:{},                  #组织提交的数据
    success:function(形参){   #后端接收到了请求,且给出了一定的反馈就会触发该函数。形参就是用于接收后端返回的数据
            异步回调函数
    }
})

2.数据编码格式

格式 数据格式 说明
urlencoded name=jason&pwd=123&hobby=read django后端统一处理到request.POST中
formdata 二进制 无法查阅 django后端自动将文件数据处理到request.FILES 普通数据到request.POST
application/json json格式 django后端不会处理 在request.body中存储(bytes类型),需自己做JSON字符串类型转换处理
第三种格式语法注意事项:
   data: JSON.stringify({'name':'jason','pwd':123}),
   contentType:'application/json',

3.ajax携带文件数据

$('#d3').click(function () {
    // 1.产生内置对象
    let formData = new FormData();
    // 2.添加普通数据
    formData.append('username',$('#d1').val())
    // 3.添加文件数据
    formData.append('file', $('#d2')[0].files[0])
    // 4.发送ajax请求
    $.ajax({
        url:'',
        type:'post',
        data:formData,
        contentType:false,  // 不使用任何编码#(只要携带文件就要加该参数)
        processData:false,  // 不处理数据对象#(只要携带文件就要加该参数)
        success:function (args) {   
        }
    })
})
    
#ajax不能接受后端数据传来的页面跳转,因为是局部改变

4.回调函数

后端跟ajax交互 不应该再返回页面 通常情况下都是返回json格式数据
前端针对HttpResponse和JsonResponse返回的json格式数据处理策略不同
    前者不会自动反序列化 而后者会自动反序列化
   	如果想让前者也自动反序列化可以添加一个固定的参数:dataType:'JSON'

三.Django内置的序列化serializers模块

前端想拿到由ORM得到的数据库里一个个用户对象,想从后端直接实例化出来的数据对象发送给客户端,就需要Django提供的序列化方式:

def ser(request):
    #拿到用户表里面的所有的用户对象
    user_list=models.User.objects.all()
    #导入内置序列化模块
    from django.core import serializers
    #调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据
    ret=serializers.serialize('json',user_list)
    return HttpResponse(ret)

'该方式对数据多的时候不适用'

作业

1.将删除按钮的二次确认改为ajax形式
2.优化删除二次确认 使用sweetalert
posted @ 2022-09-07 23:33  逢诱  阅读(43)  评论(0)    收藏  举报