ORM 一对一

1. 什么时候用一对一?

当 一张表的某一些字段查询的比较频繁,另外一些字段查询的不是特别频繁
把不怎么常用的字段 单独拿出来做成一张表 然后用过一对一关联起来

2. 优势
既保证数据都完整的保存下来,又能保证大部分的检索更快

3. ORM中的用法

class Author(models.Model):    name = models.CharField(max_length=16, unique=True)    books = models.ManyToManyField(to='Book')    a_info = models.OneToOneField(to='Author_info')

class Author_Info(models.Model):    hobby = models.CharField(max_length=30)    addr = models.CharField(max_length=128)

ORM 多对多的三种方式

多对多的方式:
1. ORM自动帮我创建第三张表
 

class Book(models.Model):    title = models.CharField(max_length=30, unique=True)    salary = models.IntegerField(default=50)    publisher = models.ForeignKey(to='Publisher')    kucun = models.IntegerField(default=1000)    maichu = models.IntegerField(default=500)

class Author(models.Model):    name = models.CharField(max_length=16, unique=True)    books = models.ManyToManyField(to='Book')

2. 自己创建第三张表, 利用外键分别关联作者和书
关联查询比较麻烦,因为没办法使用ORM提供的便利方法

    class Author2Book(models.Model):

      author = models.ForeignKey(to="Author")

      book = models.ForeignKey(to='Book")

      class Meta:

        unique_together = ("author", "book")

    

3. 自己创建第三张表,使用ORM 的ManyToManyFiled()
使用此种方式创建多对多表的时候,没有 add() remove() 等方法

  class Author(models.Model):

    name = models.CharField(max_length=32)

    age = models.IntegerField()

    phone = models.IntegerField()

    # 通过through,through_fields来指定使用我创建的第三张表来构建多对多的关系

    books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book",))

    # 第一个字段: 多对多设置在哪一张表里, 第三张表通过什么字段找到这张表 就把这个字段写在前面

    detail = models.OneToOneField(to="AuthorDetail")

  

我们应该用哪种?
看情况:
1. 如果你第三张表没有额外的字段,就用第一种
2. 如果你第三张表有额外的字段,就用第三种或第一种
例子:

相亲网站:
Boy
girls = ManyToManyField(to=“Girl")

Girl

约会记录:多对多
id boy_id girl_id date

csrf简单用法

什么是CSRF ?

跨站请求伪造,

问题:

1. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的?)

钓鱼网站的页面是由 钓鱼网站的服务端给你返回的

正经网站的网页是由 正经网站的服务端给你返回的

2. Django中内置了一个专门处理csrf问题的中间件

django.middleware.csrf.CsrfViewMiddleware



这个中间件做的事情:

1. 在render返回页面的时候,在页面中塞了一个隐藏的input标签

用法:
我们在页面上 form表单 里面 写上 {% csrf_token %}

<input type="hidden" name="csrfmiddlewaretoken" value="8gthvLKulM7pqulNl2q3u46v1oEbKG7BSwg6qsHBv4zf0zj0UcbQmpbAdijqyhfE">

2. 当你提交POST数据的时候,它帮你做校验,

多表查询

  块一张表查询

ret = models.Book.objects.filter(title__contains='红楼梦').values_list('author__name')

跨多张表查询

ret = models.Author.objects.filter(name='匿名').values('books__publisher__name')

 

转载于:https://www.cnblogs.com/xuerh/p/9038509.html

ORM 一对一 以及csrf 的简单用法相关推荐

  1. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  2. QCustomPlot的简单用法总结

    QCustomPlot的简单用法总结 第一部分:QCustomPlot的下载与安装 第二部分:QCustomPlot在VS2013+QT下的使用 QCustomPlot的简单用法总结    写在前面, ...

  3. python matplotlib 简单用法

    python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...

  4. Windump网络命令的简单用法

    Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...

  5. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

  6. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

  7. Shellz中awk的简单用法

    其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...

  8. python装饰器实例-Python装饰器原理与简单用法实例分析

    本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此 ...

  9. python装饰器实例-Python装饰器简单用法实例小结

    本文总结分析了Python装饰器简单用法.分享给大家供大家参考,具体如下: 装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能. 比如,运行 ...

最新文章

  1. 第二次 图书助手冲刺第一天
  2. springMVC的@RequestParam是必须滴
  3. c语言如何用fscanf将字符串读取,在c语言中如何将文本内容 赋给一个 字符串
  4. 网络进阶:用了HTTPS就安全了吗?HTTPS 会被抓包吗?
  5. .NET Standard 2.1 公布
  6. 今天是 OSChina 上线 6 周年!
  7. MangoTrainingCourse课程hands-on lab-1
  8. Blazor编辑表单状态控件
  9. 如何检查手机上的 App 是不是正版?
  10. Hadoop3.0.3-SYNTH运行
  11. 安装IIS服务(Internet信息服务(Internet Information Services,简写IIS,互联网信息服务)
  12. 520表白小程序设计Python代码详解(PyQt5界面,B站动漫风)
  13. chrome浏览器去除蓝色边框和黄色背景色
  14. text-decoration下划线 删除线 上划线属性样式
  15. 钗黛双收:若你也同Vim难割舍,却又看Emacs情切切
  16. 问卷答题模板:包括单选,多选,以及图片模式
  17. java实现数字转中文大写数字
  18. 如何看linux是arm还是amd_享受还是想瘦?看游泳如何让你“享瘦”
  19. W: GPG error: http://dl.google.com/linux/chrome/deb stable Release: The following signatures couldn'
  20. css min-height 和 max-height

热门文章

  1. chrome插件下载
  2. ajax-典型应用-验证用户名
  3. php socket
  4. 【转】奴性哲学十句话,洗脑常用词!!!
  5. javascript严格模式
  6. linux中录屏工具byzanz
  7. NSURLConnection和NSRunLoop
  8. Nodejs的express使用教程
  9. VS2010静态编译生成.exe可执行文件
  10. 父亲节感恩回馈PSD海报