zoukankan      html  css  js  c++  java
  • 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'
    """
    
     
     
  • 相关阅读:
    mysql索引
    mysql中的事务
    mysql的各种join连接
    java集合-LinkedList源码分析
    java集合(二)-ArrayList源码分析
    java集合(一)-集合概述
    java并发(五)-重排序、 happens-before
    vue引入百度地图 --BMap is not defined ,eslint BMap报错
    红星美凯龙前端面试内容总结
    vue父子组件钩子函数的执行顺序
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/13034289.html
Copyright © 2011-2022 走看看