博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax相关操作
阅读量:6689 次
发布时间:2019-06-25

本文共 6930 字,大约阅读时间需要 23 分钟。

 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页面                {
#这个位置相当于放了"/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',

 

转载于:https://www.cnblogs.com/zhouhao123/p/9985322.html

你可能感兴趣的文章
webpack笔记
查看>>
Android常用技能
查看>>
Spring Data JPA REST Query Criteria
查看>>
In FontFamilyFont, unable to find attribute android:font的报错处理
查看>>
网络编程-I/O基础
查看>>
Netty+SpringBoot+FastDFS+Html5实现聊天App详解(一)
查看>>
【跃迁之路】【721天】程序员高效学习方法论探索系列(实验阶段478-2019.2.11)...
查看>>
区块链之比特币的潜在激励
查看>>
Learning Python, 5th Edition 读书笔记 1
查看>>
【译】理解回调和Promise
查看>>
市场变冷,不要灰心。更应该延长你的黄金岁月
查看>>
又一轮子?Typescript+React+Redux,放弃saga,支持服务器渲染同构
查看>>
一起再看执行上下文/作用域链/原型链
查看>>
区块链是一种用一种不可变的形式存储数字信息
查看>>
【须弥SUMERU】宜信分布式安全服务编排实践
查看>>
docker笔记2-镜像与容器
查看>>
Node.js this指针指向module.exports、global、实例,指针显式、隐式传递与绑定与优先级...
查看>>
H5以及Node读取excel
查看>>
Nginx基础篇(1)- Nginx的快速搭建和基本参数
查看>>
opencv python K-Means聚类
查看>>