昨日回顾:
   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)
       -在模板中用:
          <a href="/index/">点我跳到index页面</a>
          <a href="{% url 'index' 12 %}">点我跳到index页面</a>
          {#这个位置相当于放了"/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) 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 特点:
       -异步(异步和同步的区别:同步是请求发过去,要等着回应;异步:不需要等回应,可以进行其他操作)
       -局部刷新:如在一个注册页面当你填写好账号后,这个input框失去焦点后会提示你该账号已存在(同时页面不是重新加载而出现这个提示的)
    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':'','msg':'登录成功'}
# return HttpResponse('ok')
# 返回给前台json格式
return HttpResponse(json.dumps(dic))
# return JsonResponse(dic)

-重点:*****
    - 请求的编码方式:
     contentType:'application/json',
    -响应回来解析的方式
     dataType:'json',

day75的更多相关文章

  1. day75 form 组件(对form表单进行输入值校验的一种方式)

    我们的组件是什么呢 select distinct(id,title,price) from book ORM: model.py class Book(): title=model.CharFiel ...

  2. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  3. day75 bbs项目☞后台管理+修改头像

    目录 一.后台管理之添加文章 二.修改用户头像 bbs项目总结 一.后台管理之添加文章 添加文章有两个需要注意的问题: 文章的简介切取,应该想办法获取到当前文章的文本内容后再截取字符 XSS攻击,由于 ...

  4. day75:luffy:路飞学城项目后端环境搭建&Git相关知识点

    目录 1.Xadmin 1.Xadmin介绍 2.Xadmin安装 3.Xadmin的使用 2.项目环境搭建 1.外部依赖 2.依赖包安装 3.搭建项目 3.Git 4.日志配置 5.异常处理 6.创 ...

  5. c++windows内核编程笔记day12 硬盘逻辑分区管理、文件管理、内存管理

    windows系统磁盘文件存储: 分区格式:NTFS / FAT32 GetSystemDirectory();//获取系统路径 GetWindowsDirectory();//获取windows路径 ...

  6. 100 天从 Python 新手到大师

    Python应用领域和就业形势分析 简单的说,Python是一个“优雅”.“明确”.“简单”的编程语言. 学习曲线低,非专业人士也能上手 开源系统,拥有强大的生态圈 解释型语言,完美的平台可移植性 支 ...

  7. x学生管理系统(用中间件)-------基于FORM组件

    目的:实现学生,老师,课程的增删改查 models.py from django.db import models # Create your models here. class UserInfo( ...

  8. Django--cookie操作

    day74 会话跟踪技术 什么是会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...

  9. Python面向对象之字段

    类成员: 字段,方法,属性 属性是在一个函数方法前面加一个装饰器,伪造成为一个字段,调用的时候不需要加括号() 目的是把一个方法伪造成为一个字段,属性也是方法的一种,对这个方法进行改造就可以以 字段的 ...

随机推荐

  1. 微信公众号获取acess_token并存储(php)

    <?php define("appid", "你的appid"); define("appsecret", "你的appse ...

  2. OSGI企业应用开发(二)Eclipse中搭建Felix运行环境

    上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Fe ...

  3. KCF跟踪算法 入门详解

    一.算法介绍 KCF全称为Kernel Correlation Filter 核相关滤波算法.是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins ...

  4. [Android] Linux下JNI简单实现过程

    大概梳理了一下JNI的过程: start->先写好A.java文件,里面添加native方法B,调用库C.so->编译成.class文件->用javac生成.h文件,文件包含Java ...

  5. sklearn——数据集调用及应用

    忙了许久,总算是又想起这边还没写完呢. 那今天就写写sklearn库的一部分简单内容吧,包括数据集调用,聚类,轮廓系数等等.   自带数据集API 数据集函数 中文翻译 任务类型 数据规模 load_ ...

  6. Web Api通过文件流下载文件到本地实例

    最近项目里面需要和C++的客户端互动,其中一个接口就是需要提供文件下载的接口,保证C++项目调用这个接口的时候能够正常下载文件到本地.参考了一下网上的代码,其原理就是读取服务器上指定路径的文件流,并将 ...

  7. linux下搭建hexo环境

    最近对搭建个人博客比较感兴趣,但是刚搭建好next主题基本博客,电脑就坏了,借了一台电脑继续搞,不想在他电脑中弄太多环境,所以我准备在自己电脑的服务器上搭建hexo环境 服务器环境: (1)cento ...

  8. Python实例---爬取下载喜马拉雅音频文件

    PyCharm下python爬虫准备 打开pycharm 点击设置 点击项目解释器,再点击右边+号 搜索相关库并添加,例如:requests 喜马拉雅全网递归下载 打开谷歌/火狐浏览器,按F12打开开 ...

  9. tidb导入大量数据报错:statement count 5001 exceeds the transaction limitation, autocommit = false

    这是Tidb数据库事务提交数量达到上限的一种报错:因为tidb是分布式的数据库,tikv使用了底层的强一致性协议.这是分布式数据库必然遇到的一个问题,我们可以调整这个值:在tidb的配置文件里面“st ...

  10. vue+axios自己踩过的坑

    axios的介绍就不用了吧,api有具体的介绍axios或者是axios中文: 主要讲的就是我自己在第一次使用axios中遇到的问题,及二次封装 先来说说二次封装,之前自己也是网上找了很多同学的封装, ...