复习第三天
1. Http協議?
?? ??? ?Http協議就是一個傳輸數據格式
?? ??? ?我原來學習django框架,從socket服務端開始學起。
?? ??? ?自己創造了一個socket服務器來充當:網站。
?? ??? ?瀏覽器當socket客戶端。
?? ??? ?更清楚的明白到底http協議是什么?
?? ??? ??? ?- 請求頭 請求體
?? ??? ??? ?- 響應頭 響應體
?? ??? ?一次請求響應后,斷開連接。
?? ?2. 常見請求頭
?? ??? ??- Content-Type ,? 媒體類型信息
?? ??? ?- User-Agent,? 用戶信息
?? ??? ?- referer,可以做圖片防盜鏈。
?? ??? ?- Host, 域名和端口號
?? ??? ?- cookies
?? ?3. 常見的請求體?
?? ??? ?Form表單提交:
?? ??? ??? ?POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\nusername=alex&password=123&...
?? ??? ?Ajax請求:
?? ??? ??? ?POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\nusername=alex&password=123&...
?? ??? ??? ?POST /index http1.1\r\nhost:www.luffycity.com...\r\n\r\n{“username”:"alex","password":123}
?? ??? ??? ?
?? ??? ?補充:django中獲取請求體
?? ??? ??? ?- request.POST
?? ??? ??? ?- request.body?? (為反序列化的數據)
?? ??? ??? ?
?? ?4. django請求生命周期
?? ??? ?- wsgi, 他就是socket服務端,用于接收用戶請求并將請求進行初次封裝,然后將請求交給web框架(Flask、Django)
?? ??? ?- 中間件,幫助我們對請求進行校驗或在請求對象中添加其他相關數據,例如:csrf、request.session
?? ??? ?- 路由匹配
?? ??? ?- 視圖函數,在視圖函數中進行業務邏輯的處理,可能涉及到:orm、templates => 渲染
?? ??? ?- 中間件,對響應的數據進行處理。
?? ??? ?- wsgi,將響應的內容發送給瀏覽器。
?? ??? ?
?? ?5. 中間件
?? ??? ?- 5個方法
?? ??? ?- 應用場景:
?? ??? ??? ?- 登錄認證,不再需要在每個函數中添加裝飾器
?? ??? ??? ?- 權限,當用戶登錄時候獲取當前用戶所有權限并放入session,然后再次訪問其他頁面,獲取當前url并在session中進行匹配。如果沒有匹配成功,則在中間件返回“無權訪問”
?? ??? ??? ?- 跨域,
?? ??? ??? ??? ??? ?- jsonp,動態創建一個script標簽。
?? ??? ??? ??? ??? ?- cors,設置響應頭
?? ??? ??? ??? ??? ?應用:本地開始前后端分離的時使用。
?? ??? ?
?? ?6. ORM操作
?? ??? ?- only
?? ??? ?- defer
?? ??? ?- seleted_related
?? ??? ?- prefetch_related
?? ?
?? ??? ?示例:
?? ??? ??? ?class Depart(models.Model): 5個部門
?? ??? ??? ??? ?title = models.CharField(...)
?? ??? ??? ?class User(models.Model):?? 10個用戶
?? ??? ??? ??? ?name = models.CharField(...)
?? ??? ??? ??? ?email = models.CharField(...)
?? ??? ??? ??? ?dp = models.FK(Depart)
?? ??? ??? ?1.以前的你:11次單表查詢
?? ??? ??? ??? ?result = User.objects.all()
?? ??? ??? ??? ?for item in result:
?? ??? ??? ??? ??? ?print(item.name,item.dp.title)
?? ??? ??? ?2. seleted_related,主動做連表查詢(1次鏈表)
?? ??? ??? ??? ?result = User.objects.all().seleted_related('dp')
?? ??? ??? ??? ?for item in result:
?? ??? ??? ??? ??? ?print(item.name,item.dp.title)
?? ??? ??? ??? ?問題:如果鏈表多,性能越來越差。
?? ??? ??? ?3. prefetch_related:2次單表查詢
?? ??? ??? ??? ?# select * from user ;
?? ??? ??? ??? ?# 通過python代碼獲取:dp_id = [1,2]
?? ??? ??? ??? ?# select * from depart where id in dp_id
?? ??? ??? ??? ?result = User.objects.all().prefetch_related('dp')
?? ??? ??? ??? ?for item in result:
?? ??? ??? ??? ??? ?print(item.name,item.dp.title)
?? ??? ?
?? ??? ?贈送:
?? ??? ??? ?數據量比較大,不會使用FK,允許出現數據冗余。
?? ??? ?
?? ?7. django rest framework的作用?
?? ??? ?快速搭建基于restful規范的接口。
?? ?
?? ?8. 你理解的 restful 規范?
?? ??? ?restful是一個規范,規定API如何編寫,通過他可以讓我們api更加簡潔可維護。
?? ??? ?如,最直觀的:
?? ??? ??? ?method:
?? ??? ??? ??? ?- get
?? ??? ??? ??? ?- post
?? ??? ??? ??? ?- put
?? ??? ??? ??? ?- delete
?? ??? ??? ?
?? ??? ??? ?原來都是url中設置的。
?? ??? ?除此之外:
?? ??? ??? ?- api
?? ??? ??? ?- 版本
?? ??? ??? ?- 名詞
?? ??? ??? ?- 條件
?? ??? ??? ?- 狀態碼
?? ??? ??? ?- 返回值
?? ??? ??? ?- 錯誤信息
?? ??? ??? ?- hypermedia link
?? ?
?? ?9. django rest framework組件:
?? ??? ?
?? ??? ?- 訪問頻率控制原理:
?? ??? ??? ?匿名:
?? ??? ??? ??? ?1.1.1.1:[時間,時間,時間,時間,]
?? ??? ??? ?登錄:
?? ??? ??? ??? ?user:[時間,時間,時間,時間,]
?? ??? ??? ?
?? ??? ??? ?默認將訪問記錄放在緩存中:redis/memcached
?? ??? ?- 序列化
?? ??? ??? ?from rest_framework.serializers import Serializer
?? ??? ??? ?class XX(Serializer):
?? ??? ??? ??? ?pass
?? ??? ??? ?ser =XX(queryset,many=True) # ListSerializer對象
?? ??? ??? ?ser =XX(obj, many=False)??? # XX對象
?? ??? ??? ??? ?
?? ??? ?- 列表生成式
?? ??? ?
?? ??? ?- 根據字符串的形式,自動導入模塊并使用反射找到模塊中的類【參考:s9day108】。
?
10.什么是面向過程面向函數和面向對象?
??????? 面向過程的程序設計的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什么時候處理什么東西。
面向對象的程序設計的核心是對象(上帝式思維), 將(具有相同特性的一類事物)的屬性和方法封裝到一個類中,然后實例化之后就是一個對象(具體的事物).,
面向對象的三大特性:
1、封裝 根據職責將屬性和方法封裝到一個抽象的類內?
2、繼承 主要是為了實現代碼的重用,相同的代碼不需要重復的編寫?
3、多態 不同的對象調用相同的方法,產生不同的執行結果,增加代碼的靈活度
11. Django使用原生SQL的方法:(三種)
一:extra:結果集修改器,一種提供額外查詢參數的機制 二:raw:執行原始sql并返回模型實例 三:直接執行自定義Sql 12. Django中ORM支持事物操作 from django.db import transaction try: with transaction.atomic(): sql語句 except Exception as e: return HttpResponse("出現錯誤....")?
轉載于:https://www.cnblogs.com/l-jie-n/p/9941786.html
總結
- 上一篇: ABB SocketReceive
- 下一篇: 重启adb命令