ORM 一对一 以及csrf 的简单用法
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自動幫我創建第三張表
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 的简单用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派3风扇安装方法
- 下一篇: 第三章傅里叶变换