51.使用Django中modelfilter條件過濾方法,把下邊sql語句轉化成python 代碼
select * from company where title like "%abc%" or mecount>999 order by createtime desc;
52.從輸入http://www.baidu.com/到頁面返回,中間都是發生了什么?
1、域名解析:
瀏覽器向DNS獲取web服務器 www.baidu.com這個域名的 的ip地址
2、建立TCP連接
瀏覽器與對應ip地址的服務器進行TCP鏈接,端口為80
3、瀏覽器執行HTTP協議,發送GET請求,讀取對應文件
4、服務器接收到請求后,返回網頁信息
5.客戶端瀏覽器將這些信息組織成用戶可以查看的網頁形式
53.django 請求的生命周期?
. 當用戶在瀏覽器中輸入url時,瀏覽器會生成請求頭和請求體發給服務端
請求頭和請求體中會包含瀏覽器的動作(action),這個動作通常為get或者post,體現在url之中.
. url經過Django中的wsgi,再經過Django的中間件,最后url到過路由映射表,在路由中一條一條進行匹配,
一旦其中一條匹配成功就執行對應的視圖函數,后面的路由就不再繼續匹配了.
. 視圖函數根據客戶端的請求查詢相應的數據.返回給Django,然后Django把客戶端想要的數據做為一個字符串返回給客戶端.
. 客戶端瀏覽器接收到返回的數據,經過渲染后顯示給用戶.
54.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):
logger.debug("{},{}".format(sender, **kwargs))
55、django的request對象是在什么時候創建的?
`class WSGIHandler(base.BaseHandler):`
`-------request = self.request_class(environ)`
請求走到WSGIHandler類的時候,執行**cell**方法,將environ封裝成了request