热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ajax相关操作

1inclusion_tag-干什么用的?生成html的片段(动态,传参数,传数据)-app下新建一个模块,templatetags-创建一个py文件(mytag.py)-from

 1 inclusion_tag

   -干什么用的?生成html的片段(动态,传参数,传数据)

   -app下新建一个模块,templatetags

   -创建一个py文件(mytag.py)

   -from django.template import Library

   -register=Library() ----->register名字一定不能变

   -写装饰器(标签,过滤器,inclusion_tag)

   -@inclusion_tag(‘模板路径‘,name=‘重命名‘)

   -def my_in(): 不写,写多个,不写不传,写多个,按空格来传参

      - 一堆逻辑处理,查数据库

   - ret=Book.object.all()

       return {‘‘books‘:ret}

   -在模板中:

     可以用books这个变量,渲染页面

   -应用: -在另一个模板中:

   -{%load mytag.py%}

   -{% my_in %}

  2 defer,only

   -defer---->除了指定字段之外

  -only---->只查询几个字段

   -比如:ret=Book.object.all().only(‘name‘)

   -id始终会查

   -结果是queryset对象,套book对象

   -问:如果取price,发生了什么?

   -它会再次查询数据库,对数据库造成压力

3 事务(原子性操作)

   from django.db import transition

  with transition.atomic():

     sql1

     sql2

4 choice

   -模型表中某个字段,可以指定choice,用在选择不经常变的情况,经常变,尽量用数据库                                              user_type=models.ForeignKey(to=‘Info‘, to_field=‘id‘,db_cOnstraint=False)

      #取出对应的汉字

     # author对象.user_type.name

         mychoice=((1,‘男‘),(2,‘女‘),(3,‘其他‘))

         # dd = models.ForeignKey(to=‘Info‘, to_field=‘id‘)

        #取出对应的汉字

   dd = models.ForeignKey(choices=mychoice)

5反向解析

-动态获取路径(根据名字)
            -路由:    url(r^inde/$, views.Test.as_view(),name=index),
                      url(r^inde/(\d+)$, views.Test.as_view(),name=index),
            -在视图层:
            def mytest(request):
                # 用在视图层
                url=reverse(index,args=(12,))
                return redirect(url)
            -在模板中用:
                "/index/">点我跳到index页面
                "{% url ‘index‘ 12 %}">点我跳到index页面
                {#这个位置相当于放了"/inde/"#}
6 多对多的关系,三种写法
-手动创建第三张表(不创建关联关系)
            class Book(models.Model):
                # 默认会创建id
                name = models.CharField(max_length=32)
            class Author(models.Model):
                name = models.CharField(max_length=32)
            class Book2Author(models.Model):
                id = models.AutoField(primary_key=True)
                book=models.ForeignKey(to=Book,to_field=id)
                author=models.ForeignKey(to=Author,to_field=id)
            -不管是插入和查询,删除,都很麻烦(一般不用)
        -自动创建第三张表
            -查询,插入,删除,都很方便
            -缺点:字段是固定的,第三张表如果要添加字段,实现不了
        -手动创建第三张表,建立关联关系
            class Book(models.Model):
                # 默认会创建id
                name = models.CharField(max_length=32)
                # 中介模型,手动指定第三张中间表是Book2Author
                authors=models.ManyToManyField(to=Author,through=Book2Author,through_fields=(book,author))
            class Author(models.Model):
                name = models.CharField(max_length=32)
                def __str__(self):
                    return self.name
            class Book2Author(models.Model):
                id = models.AutoField(primary_key=True)
                book=models.ForeignKey(to=Book,to_field=id)
                author=models.ForeignKey(to=Author,to_field=id)
                
            -through:来指定我的第三张表是哪个
            -through_fields:(book,author),第一个值是:从中间表找到设置关联字段的表,通过哪个字段,第一个位置就写它
            -终极总结:防止混了:关联字段就是表名小写,第一个值:就是当前表的表名小写
            -查询,新增,删除,都很方便
            -第三张表,可以添加别的字段


7、ajax

1 什么是ajax:异步的Javascript和xml,跟后台交互,都用json
        2 ajax干啥用的?前后端做数据交互:
        3 之前学的跟后台做交互的方式:
            -第一种:在浏览器窗口输入地址(get)
            -第二种:用form表单提交数据
        4 特点:
            -异步(异步和同步的区别:同步是请求发过去,要等着回应;异步:不需要等回应,可以进行其他操作)
            -局部刷新:
        5 $.ajax({
            url:/index/,
            type:post,
            //data:往后台提交的数据
            data:{name:lqz,age:18},
            //成功的时候回调这个函数
            success:function (data) {
                alert(data)
            }
        })
        6 上传文件
            模板层:
            $("#btn").click(function () {
                //上传文件,必须用FormData,生产一个formdata对象
                var formdata=new FormData();
                formdata.append(name,$("#name").val());
                //取出文件$("#myfile")[0].files拿到的是文件列表,取第0个把具体的文件取出来
                formdata.append(myfile,$("#myfile")[0].files[0]);

                $.ajax({
                    url:/files_ajax/,
                    type:post,
                    //不预处理数据,(name=lqz&age=18)
                    processData:false,
                    //指定往后台传数据的编码格式(urlencoded,formdata,json)
                    //现在用formdata对象处理了,就不需要指定编码格式了,不要给我编码了
                    contentType:false,
                    data:formdata,
                    success:function (data) {
                        alert(data)

                    }
                })

            视图层:(跟form表单上传文件完全一样)
            def files_ajax(request):
                # 提交文件从,request.FILES中取,提交的数据,从request.POST中取
                name=request.POST.get(name)
                print(name)
                dic_files = request.FILES
                myfile = dic_files.get(myfile)
                with open(myfile.name, wb) as f:
                    # 循环上传过来的文件
                    for line in myfile:
                        # 往空文件中写
                        f.write(line)
                return HttpResponse(ok)
            
        7 基于ajax提交json格式数据
            -模板层:
             $(#btn).click(function () {
                var post_data={name:$("#name").val(),pwd:$("#pwd").val()};
                console.log(typeof post_data);
                // 如何把post_data这个字典,转成json格式字符串
                //JSON.stringify相当于python中json.dumpus(post_data)
                //pos是个字符串,json格式字符串
                var pos=JSON.stringify(post_data);
                console.log(typeof pos);
                $.ajax({
                    url:/json/,
                    type:post,
                    data:pos,
                    contentType:application/json,
                    success:function (data) {
                        //如果data是json格式字符串,如何转成对象(字典)?
                        //data=JSON.parse(data)
                        console.log(typeof data)
                        console.log(data)
                        var ret=JSON.parse(data)
                        console.log(typeof ret)
                        console.log(ret.status)
                        //alert(data)

                    }
                })
            })
            -视图层:
                def add_json(request):
                    if request.method==GET:
                        return render(request,json.html)
                    print(request.POST)
                    print(request.GET)
                    print(request.body)
                    import json
                    # res是个字典
                    res=json.loads(request.body.decode(utf-8))
                    print(res)
                    print(type(res))
                    dic={status:100,msg:登录成功}
                    # return HttpResponse(‘ok‘)
                    # 返回给前台json格式
                    return HttpResponse(json.dumps(dic))
                    # return JsonResponse(dic)
                        
            -重点:*****
                - 请求的编码方式:
                    contentType:application/json,
                -响应回来解析的方式
                    dataType:json,

ajax相关操作


推荐阅读
  • PHP中元素的计量单位是什么? ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • React组件是构成用户界面的基本单元,每个组件都封装了特定的功能和逻辑,具备高度的独立性和可复用性。通过将不同大小和功能的组件组合在一起,可以构建出复杂且功能丰富的页面,类似于拼图游戏中的各个部分,最终形成一个完整的视觉效果。 ... [详细]
  • 本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
author-avatar
手机用户随便转转
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有