Django模板层3和ajax初始

  • 图书管理的图书增删改查
  • choices参数(数据库字段设计常见)
  • MTV与MVC模型
  • 多对多关系的三种创建方式
  • Ajax操作(重点)
  • 前后端传输数据编码格式
  • ajax发送json格式数据
  • ajax发送文件
  • django自带的序列化功能(了解,后面将路飞会将更加牛逼的序列化drf)
  • ajax结合sweetalert实现删除按钮的二次确认操作

图书管理的图书增删改查

添加:
book_obj.authors.add(*authors_list)

redirect括号内可以写url,reverse,也可以直接写别名
别名需要额外给参数的话,那么就必须使用reverse解析了

choices参数(数据库字段设计常见)

相当于枚举:其中的情况
保证字段类型跟列举出来的元祖第一个数据类型一致即可
    gender_choices = (
        (1,‘男‘),
        (2,‘女‘),
        (3,‘其他‘),
    )
    gender = models.IntegerField(choices=gender_choices)
    
    score_choices = (
        (‘A‘,‘优秀‘),
        (‘B‘,‘良好‘),
        (‘C‘,‘及格‘),
        (‘D‘,‘不合格‘),
    )

    score = models.CharField(choices=score_choices,null=True)
    
      

    # models.User.objects.create(username=‘jason‘,age=18,gender=1)
    # models.User.objects.create(username=‘egon‘,age=85,gender=2)
    # models.User.objects.create(username=‘tank‘,age=40,gender=3)
    # models.User.objects.create(username=‘tony‘,age=45,gender=4)
    存的时候 没有列举出来的数字也能存(范围还是按照字段类型决定)
    只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display()
    如果没有对应关系 那么字段是什么还是展示什么
    # 取
    user_obj = models.User.objects.filter(pk=1).first()
    print(user_obj.get_gender_display())
    user_obj = models.User.objects.filter(pk=4).first()
    print(user_obj.get_gender_display())  # 4

MTV与MVC模型

# MTV:Django号称是MTV模型
M:models
T:templates
V:views
# MVC:其实django本质也是MVC
M:models
V:views
C:controller
  
# vue框架:MVVM模型

多对多三种创建方式

# 全自动:利用orm自动帮我们创建第三张关系表
	优点:代码不需要你写 非常的方便 还支持orm提供操作第三张关系表的方法...
	不足之处:第三张关系表的扩展性极差(没有办法额外添加字段...)

# 纯手动
	class Book(models.Model):
    name = models.CharField(max_length=32)
    
	class Author(models.Model):
    name = models.CharField(max_length=32)
  
  class Book2Author(models.Model):
    book_id = models.ForeignKey(to=‘Book‘)
    author_id = models.ForeignKey(to=‘Author‘)

  优点:第三张表完全取决于你自己进行额外的扩展
  不足之处:需要写的代码较多,不能够再使用orm提供的简单的方法
  不建议你用该方式


# 半自动
class Book(models.Model):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to=‘Author‘,
                                     through=‘Book2Author‘,
                                     through_fields=(‘book‘,‘author‘)
                                     )
class Author(models.Model):
    name = models.CharField(max_length=32)
    
class Book2Author(models.Model):
    book = models.ForeignKey(to=‘Book‘)
    author = models.ForeignKey(to=‘Author‘)


through_fields字段先后顺序:主动表,被动表 
半自动:可以使用orm的正反向查询 但是没法使用add,set,remove,clear这四个方法

一般我们都会采用半自动(写代码要给自己留一条后路)

Ajax

异步提交
局部刷新

朝发送请求的方式
	1.浏览器地址栏直接输入url回车						   GET请求
	2.a标签href属性										GET请求
	3.form表单										GET请求/POST请求
	4.ajax											GET请求/POST请求	
	
AJAX 不是新的编程语言,而是一种使用现有标准的新方法(比较装饰器)


AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
不断进行 用户名是否存在的校验。

Ajax我们只学习jQuery封装之后的版本
所以我们在前端页面使用ajax的时候需要确保导入了jQuery
ps:并不只有jQuery能够实现ajax,其他的框架也可以 但是换汤不换药 原理是一样的

小例子

$(‘#btn‘).click(function () {
        $.ajax({
            // 1.指定朝哪个后端发送ajax请求 不写就是朝当前地址提交
            url:‘‘,
            // 2.请求方式 不指定默认就是get 都是小写
            type:‘post‘,
            // 3.数据
            data:{‘i1‘:$(‘#d1‘).val(),‘i2‘:$(‘#d2‘).val()},
            // 4.回调函数:当后端给你返回结果的时候会自动触发 args接受后端的返回结果
            success:function (args) {
                $(‘#d3‘).val(args)
            }
        })
    })
              
              
"""
针对后端如果是用HttpResponse返回的数据 回调函数不会自动帮你反序列化
如果后端直接用的是JsonResponse返回的数据 回调函数会自动帮你反序列化

HttpResponse解决方式
	1.自己在前端利用JSON.parse()
	2.在ajax里面配置一个参数
	  ajax里加dataType:‘json‘
"""

相关推荐