<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            刻苦銘心的公開課作文200字

            時間:2025-10-30 22:56:28 200字 我要投稿

            刻苦銘心的公開課作文200字

              一、抽象繼承:

            刻苦銘心的公開課作文200字

              順便復習OOP思想,繼承是面向對象的大前提╮(╯▽╰)╭,抽象類,之所以被創建是用來被繼承的;一個類如果包含任何一種抽象方法,那么它就是抽象類;抽象方法一定要在子類中被復寫;在繼承關系中,抽象類永遠在樹枝節點上……扯遠了,而且對于Python來說,已經沒有這么多約束了。

              回到Django的Model,也一樣,當我們需要某些公共方法字段時,就需要一個父類為其他子類服務,這個父類沒有manager,Django也不為這個類創建表,這種繼承的定義方法如下:

              class Animal(models.Model):

              name = models.CharField(max_length=50)

              age = models.PositiveIntegerField()

              # 下面這句決定了Animal是一個抽象類/Model

              class Meta:

              abstract = True

              class Human(Animal):

              kind_hearted = models.BooleanField()

              sex = models.CharField('sex', choices=(('m','male'), ('f', 'female')), max_length=1)

              #...

              上例中,我們的Human子model中,自然包含了name和age的字段,但是Animal不能作為正常model使用,由于沒有manager,所以也不能實例化、保存。在子類中,不可以建立與這個抽象父類中的相同的字段,Django表示對報錯負責。

              二、正常的繼承,多重繼承,Joined映射

              和抽象繼承的主要區別是父類這時也可以擁有數據庫表了,并且不在身為存儲公共信息的抽象類了,父類也可以進行實例化,查詢等操作了。

              class Country(models.Model):

              name = models.CharField(max_length=10)

              #...

              class Province(Country):

              return = models.BooleanField()

              #...

              三、代理

              即在子類中只能增加方法,而不能增加屬性,在不影響父類數據存儲的前提下,使子類繼承父類,此時子類稱為父類的“代理”。例如:

              from django.contrib.auth.models import User

              class Person(User):

              # this makes a class proxy

              proxy = True

              def can_dance(self):

              return True

              # both Yellow and Black can_dance :)

              class Yellow(Person):

              hometown = models.CharField(max_length=30)

              class Black(Person)

              tribe_name = models.CharField(max_length=100)

              我們為Person類增加了一個方法,可以跳舞,并且保持了User的數據字段的不變。

              Django的Queryset是什么,objects是什么,objects在哪里可以定義。

              query + set,已經能猜出大概,它對應著數據庫中的若干條記錄。

              例如有一個叫做Order的模型,在project的根目錄下進入shell進行操作:

              $python manage.py shell

              >>>from app.order.models import Order

              >>>type(Order.objects)

              >>>

              >>>order = Order.objects.all()

              >>>type(order)

              上述方法很常用,看繼承關系去理解Queryset和objets。objects是每個Model默認的manager類,通過manager的方法(也可通過QuerySet的方法得到,當然QuerySet也來自于manager),得到相應的Queryset,用以對數據庫模型字段進行更多的操作。

              objects(manager)方法可以自定義添加,也可以直接賦值覆蓋掉默認的管理方法。

              試著添加一個新的管理器的步驟是這樣,首先定義一個manager類繼承自models.Manager,并在其中對self進行操作,如下:

              # new manager

              class OrderManager(models.Manager):

              def title_count(self, keyword):

              return self.filter(title__icontains=keyword).count()

              class Order(models.Models):

              title = models.CharField(max_length=100)

              # ...

              #objects = models.Manager()

              objects = OrderManager()

              def __unicode__(self):

              return self.title

              上述例子中我們把OrderManager賦值給了objects,替換了默認的管理器。

              tips:如果增加了新的管理器,且沒有替換掉默認管理器,那么默認管理器需要顯式的聲明出來才可以使用。

              Django中查詢queryset時什么情況下用Q?

              在進行相對復雜的查詢時,使用django.db.models.Q對象。

              例如需要進行復合條件的查詢的SQL語句如下:

              SELECT * FROM order WHERE id BETWEEN 20 ADN 100 AND(num <= '20' or num >= '30');

              使用Q就可以寫成:

              from django.db.models import Q

              from login.models import Order

              #...

              Order.objects.get(

              Q(id >= 20) & (id <= 100),

              Q(num <= 20) | (num >= 30)

              )

              Django中想驗證表單提交是否格式正確需要用到Form中的哪個函數?

              is_valid()函數方法,用于檢查表單提交是否正確。

              Django取消級聯刪除

              這個文檔寫的比較清楚:

              user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)

              并且SET_NULL只有在null為True的時候,才可以使用。

              Django中如何在Model保存前做一定的固定操作,比如寫一句日志?

              關鍵詞: 信號

              利用Django的Model的Signal Dispatcher, 通過django.db.models.signals.pre_save()方法,在事件發生前,發射觸發信號,這一切都被調度中的receiver方法深藏功與名的保存了。

              信號的處理一般都寫在Model中,舉個例子:

              import logging

              from django.db import models

              from django.db.models.signals import pre_save

              from django.dispatch import receiver

              class Order(models.Model):

              # ...

              logger = logging.getLogger(__name__)

              @receiver(pre_save, sender=Order)

              def pre_save_handler(sender, **kwargs):

              # 我們可以在Order這個Model保存之前盡情調戲了:)

              logger.debug("{},{}".format(sender, **kwargs))

              print 'fuck universe'

              這樣應該就實現了題中的要求,類似的方法還有比如pre_init是在Model實例之前會觸發,post_init在實例之后觸發,同理就是pre_save和post_save了。

            【刻苦銘心的公開課作文200字】相關文章:

            勤奮刻苦的作文12-03

            刻苦勤奮的作文08-13

            刻苦勤奮的作文09-02

            刻苦的軍訓05-05

            刻苦勤奮的作文【通用】01-29

            刻苦勤奮的作文(精)12-14

            (集合)勤奮刻苦的作文06-15

            【熱門】刻苦勤奮的作文04-12

            刻苦勤奮的作文(合集)07-09

            刻苦勤奮的作文(集合)11-24

            • 相關推薦
            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看