日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORM 一对一 以及csrf 的简单用法

發(fā)布時間:2025/6/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORM 一对一 以及csrf 的简单用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ORM 一對一

1. 什么時候用一對一?

當(dāng) 一張表的某一些字段查詢的比較頻繁,另外一些字段查詢的不是特別頻繁
把不怎么常用的字段 單獨拿出來做成一張表 然后用過一對一關(guān)聯(lián)起來

2. 優(yōu)勢
既保證數(shù)據(jù)都完整的保存下來,又能保證大部分的檢索更快

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自動幫我創(chuàng)建第三張表
 

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. 自己創(chuàng)建第三張表, 利用外鍵分別關(guān)聯(lián)作者和書
關(guān)聯(lián)查詢比較麻煩,因為沒辦法使用ORM提供的便利方法

    class Author2Book(models.Model):

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

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

      class Meta:

        unique_together = ("author", "book")

    


3. 自己創(chuàng)建第三張表,使用ORM 的ManyToManyFiled()
使用此種方式創(chuàng)建多對多表的時候,沒有 add() remove() 等方法

  class Author(models.Model):

    name = models.CharField(max_length=32)

    age = models.IntegerField()

    phone = models.IntegerField()

    # 通過through,through_fields來指定使用我創(chuàng)建的第三張表來構(gòu)建多對多的關(guān)系

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

    # 第一個字段: 多對多設(shè)置在哪一張表里, 第三張表通過什么字段找到這張表 就把這個字段寫在前面

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

  

?

我們應(yīng)該用哪種?
看情況:
1. 如果你第三張表沒有額外的字段,就用第一種
2. 如果你第三張表有額外的字段,就用第三種或第一種
例子:

相親網(wǎng)站:
Boy
girls = ManyToManyField(to=“Girl")

Girl

約會記錄:多對多
id boy_id girl_id date

csrf簡單用法


什么是CSRF ?

跨站請求偽造,

問題:

1. 釣魚網(wǎng)站的頁面和正經(jīng)網(wǎng)站的頁面對瀏覽器來說有什么區(qū)別? (頁面是怎么來的?)

釣魚網(wǎng)站的頁面是由 釣魚網(wǎng)站的服務(wù)端給你返回的

正經(jīng)網(wǎng)站的網(wǎng)頁是由 正經(jīng)網(wǎng)站的服務(wù)端給你返回的

?

2. Django中內(nèi)置了一個專門處理csrf問題的中間件

django.middleware.csrf.CsrfViewMiddleware



這個中間件做的事情:

?

1. 在render返回頁面的時候,在頁面中塞了一個隱藏的input標簽

用法:
我們在頁面上 form表單 里面 寫上 {% csrf_token %}

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

2. 當(dāng)你提交POST數(shù)據(jù)的時候,它幫你做校驗,

多表查詢

  塊一張表查詢

ret = models.Book.objects.filter(title__contains='紅樓夢').values_list('author__name')


跨多張表查詢


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

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/xuerh/p/9038509.html

總結(jié)

以上是生活随笔為你收集整理的ORM 一对一 以及csrf 的简单用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。