#1.Django是走大而全的方向,它最出名的是其全自動化的管理後臺:只須要使用起ORM,作簡單的對象定義,它就能自動生成數據庫結構、以及全功能的管理後臺。 #2.Django內置的ORM跟框架內的其餘模塊耦合程度高。 #應用程序必須使用Django內置的ORM,不然就不能享受到框架內提供的種種基於其ORM的便利; #理論上能夠切換掉其ORM模塊,但這就至關於要把裝修完畢的房子拆除從新裝修,倒不如一開始就去毛胚房作全新的裝修。 #3.Django的賣點是超高的開發效率,其性能擴展有限;採用Django的項目,在流量達到必定規模後,都須要對其進行重構,才能知足性能的要求。 #4.Django適用的是中小型的網站,或者是做爲大型網站快速實現產品雛形的工具。 #5.Django模板的設計哲學是完全的將代碼、樣式分離; Django從根本上杜絕在模板中進行編碼、處理數據的可能。
#1.Django走的是大而全的方向,開發效率高。它的MTV框架,自帶的ORM,admin後臺管理,自帶的sqlite數據庫和開發測試用的服務器 #給開發者提升了超高的開發效率 #2.Flask是輕量級的框架,自由,靈活,可擴展性很強,核心基於Werkzeug WSGI工具和jinja2模板引擎 #3.Tornado走的是少而精的方向,性能優越。它最出名的是異步非阻塞的設計方式 #Tornado的兩大核心模塊: # 1.iostraem:對非阻塞式的socket進行簡單的封裝 # 2.ioloop:對I/O多路複用的封裝,它實現了一個單例
#WSGI: # web服務器網關接口,是一套協議。用於接收用戶請求並將請求進行初次封裝,而後將請求交給web框架 # 實現wsgi協議的模塊: # 1.wsgiref,本質上就是編寫一個socket服務端,用於接收用戶請求(django) # 2.werkzeug,本質上就是編寫一個socket服務端,用於接收用戶請求(flask) #uwsgi: # 與WSGI同樣是一種通訊協議,它是uWSGI服務器的獨佔協議,用於定義傳輸信息的類型 #uWSGI: # 是一個web服務器,實現了WSGI協議,uWSGI協議,http協議,
#1.wsgi,請求封裝後交給web框架 (Flask、Django) #2.中間件,對請求進行校驗或在請求對象中添加其餘相關數據,例如:csrf、request.session - #3.路由匹配 根據瀏覽器發送的不一樣url去匹配不一樣的視圖函數 #4.視圖函數,在視圖函數中進行業務邏輯的處理,可能涉及到:orm、templates => 渲染 - #5.中間件,對響應的數據進行處理。 #6.wsgi,將響應的內容發送給瀏覽器。
#FBV和CBV本質是同樣的 #基於函數的視圖叫作FBV,基於類的視圖叫作CBV #在python中使用CBV的優勢: #1.提升了代碼的複用性,可使用面嚮對象的技術,好比Mixin(多繼承) #2.能夠用不一樣的函數針對不一樣的HTTP方法處理,而不是經過不少if判斷,提升代碼可讀性
#引入method_decorator模塊 #1.直接在類上加裝飾器 #@method_decorator(test,name='dispatch') #class Loginview(View): # pass #2.直接在處理的函數前加裝飾器 #@method_decorator(test) # def post(self,request,*args,**kwargs):pass
#MVC軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller) #Model:負責業務對象與數據庫的映射(ORM) #View:負責與用戶的交互 #Control:接受用戶的輸入調用模型和視圖完成用戶的請求 #Django框架的MTV設計模式借鑑了MVC框架的思想,三部分爲:Model、Template和View #Model(模型):負責業務對象與數據庫的對象(ORM) #Template(模版):負責如何把頁面展現給用戶 #View(視圖):負責業務邏輯,並在適當的時候調用Model和Template #此外,Django還有一個urls分發器, #它將一個個URL的頁面請求分發給不一樣的view處理,view再調用相應的Model和Template
#用於反向解析路由,至關於給url取個別名,只要這個名字不變,即便對應的url改變 #經過該名字也能找到該條url
#1.Admin是對model中對應的數據表進行增刪改查提供的組件 #2.model組件:負責操做數據庫 #3.form組件:1.生成HTML代碼2.數據有效性校驗3校驗信息返回並展現 #4.ModelForm組件即用於數據庫操做,也可用於用戶請求的驗證
#中間件是介於request與response處理之間的一道處理過程,用於在全局範圍內改變Django的輸入和輸出。 #簡單的來講中間件是幫助咱們在視圖函數執行以前和執行以後均可以作一些額外的操做 #例如: #1.Django項目中默認啓用了csrf保護,每次請求時經過CSRF中間件檢查請求中是否有正確#token值 #2.當用戶在頁面上發送請求時,經過自定義的認證中間件,判斷用戶是否已經登錄,未登錄就去登錄。 #3.當有用戶請求過來時,判斷用戶是否在白名單或者在黑名單裏
#1.process_request : 請求進來時,權限認證 #2.process_view : 路由匹配以後,可以獲得視圖函數 #3.process_exception : 異常時執行 #4.process_template_responseprocess : 模板渲染時執行 #5.process_response : 請求有響應時執行
#class WSGIHandler(base.BaseHandler): # request = self.request_class(environ) #請求走到WSGIHandler類的時候,執行__cell__方法,將environ封裝成了request
#1.使用HttpResponseRedirect #from django.http import HttpResponseRedirect #2.使用redirect和reverse #狀態碼:301和302 #301和302的區別: #相同點:都表示重定向,瀏覽器在拿到服務器返回的這個狀態碼後會自動跳轉到一個新的URL地址 #不一樣點: #301比較經常使用的場景是使用域名跳轉。好比,咱們訪問 http://www.baidu.com 會跳轉到 https://www.baidu.com #表示舊地址A的資源已經被永久地移除了 #302用來作臨時跳轉,好比未登錄的用戶訪問用戶中心重定向到登陸頁面。表示舊地址A的資源還在(仍然能夠訪問),這個重定向只是臨時地從舊地址A跳轉到地址B
#-- XSS攻擊是向網頁中注入惡意腳本,用在用戶瀏覽網頁時,在用戶瀏覽器中執行惡意腳本的攻擊。 # -- XSS分類,反射型xss ,存儲型xss # -- 反射型xss又稱爲非持久型xss,攻擊者經過電子郵件等方式將包含注入腳本的連接發送給受害者, # 受害者經過點擊連接,執行注入腳本,達到攻擊目的。 # -- 持久型xss跟反射型的最大不一樣是攻擊腳本將被永久的存放在目標服務器的數據庫和文件中,多見於論壇 # 攻擊腳本連同正常信息一同注入到帖子內容當中,當瀏覽這個被注入惡意腳本的帖子的時候,惡意腳本會被執行 # -- 防範措施 1 輸入過濾 2 輸出編碼 3 cookie防盜 # 1,輸入過濾 用戶輸入進行檢測 不容許帶有js代碼 # 2,輸出編碼 就是把咱們的腳本代碼變成字符串形式輸出出來 # 3,cookie加密 #向頁面注入惡意的代碼,這些代碼被瀏覽器執行 #XSS攻擊能作些什麼: # 1.竊取cookies # 2.讀取用戶未公開的資料,若是:郵件列表或者內容、系統的客戶資料,聯繫人列表 #解決方法: # 1.客戶度端:表單提交以前或者url傳遞以前,對須要的參數進行過濾 # 2.服務器端:檢查用戶輸入的內容是否有非法內容
#第一步:django第一次響應來自某個客戶端的請求時,後端隨機產生一個token值,把這個token保存在SESSION狀態中;同時,後端把這個token放到cookie中交給前端頁面; #第二步:下次前端須要發起請求(好比發帖)的時候把這個token值加入到請求數據或者頭信息中,一塊兒傳給後端;Cookies:{csrftoken:xxxxx} #第三步:後端校驗前端請求帶過來的token和SESSION裏的token是否一致;
#1.後端將csrftoken傳到前端,發送post請求時攜帶這個值發送 data: { csrfmiddlewaretoken: '{{ csrf_token }}' }, #2.獲取form中隱藏標籤的csrftoken值,加入到請求數據中傳給後端 data: { csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val() }, #3.cookie中存在csrftoken,將csrftoken值放到請求頭中 headers:{ "X-CSRFtoken":$.cookie("csrftoken")},
#1.runserver方法是調試 Django 時常常用到的運行方式,它使用Django自帶的 #WSGI Server 運行,主要在測試和開發中使用,而且 runserver 開啓的方式也是單進程 。 #2.uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http 等協議。注意uwsgi是一種通訊協議,而uWSGI是實現uwsgi協議和WSGI協議的 Web 服務器。 #uWSGI具備超快的性能、低內存佔用和多app管理等優勢,而且搭配着Nginx就是一個生產環境了,可以將用戶訪問請求與應用 app 隔離開,實現真正的部署 。 #相比來說,支持的併發量更高,方便管理多進程,發揮多核的優點,提高性能。
#1.cookie: # cookie是保存在瀏覽器端的鍵值對,能夠用來作用戶認證 #2.session: # 將用戶的會話信息保存在服務端,key值是隨機產生的自符串,value值時session的內容 # 依賴於cookie將每一個用戶的隨機字符串保存到用戶瀏覽器上 #Django中session默認保存在數據庫中:django_session表 #flask,session默認將加密的數據寫在用戶的cookie中
#<1> all(): 查詢全部結果 #<2> filter(**kwargs): 它包含了與所給篩選條件相匹配的對象。獲取不到返回None #<3> get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個。獲取不到會抱胸 #若是符合篩選條件的對象超過一個或者沒有都會拋出錯誤。 #<4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象 #<5> order_by(*field): 對查詢結果排序 #<6> reverse(): 對查詢結果反向排序 #<8> count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。 #<9> first(): 返回第一條記錄 #<10> last(): 返回最後一條記錄 #<11> exists(): 若是QuerySet包含數據,就返回True,不然返回False #<12> values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行後獲得的並非一系 model的實例化對象,而是一個可迭代的字典序列 #<13> values_list(*field): 它與values()很是類似,它返回的是一個元組序列,values返回的是一個字典序列 #<14> distinct(): 從返回結果中剔除重複紀錄
#only:從數據庫中只取指定字段的內容 #defer:指定字段的內容不被檢索
#有外鍵存在時,能夠很好的減小數據庫請求的次數,提升性能 #select_related經過多表join關聯查詢,一次性得到全部數據,只執行一次SQL查詢 #prefetch_related分別查詢每一個表,而後根據它們之間的關係進行處理,執行兩次查詢
``css
# 23. F和Q的做用?
# 24. values和values_list的區別?
# 25. 如何使用django orm批量建立數據?
# 26. django的Form和ModeForm的做用?
# 27. django的Form組件中,若是字段中包含choices參數,請使用兩種方式實現數據源實時更新。
def def init(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")html
# 28. django的Model中的ForeignKey字段中的on_delete參數有什麼做用?
# 29. django如何實現websocket?
# 30. django orm 中如何設置讀寫分離?
## 31. django中如何實現orm表中添加數據時建立一條日誌記錄。 # 32. django內置的緩存機制?
MIDDLEWARE_CLASSES = (
‘django.middleware.cache.UpdateCacheMiddleware’, #第一
'django.middleware.common.CommonMiddleware',
‘django.middleware.cache.FetchFromCacheMiddleware’, #最後
)前端
from django.views.decorators.cache import cache_page
import timepython
@cache_page(15) #超時時間爲15秒
def index(request):
t=time.time() #獲取當前時間
return render(request,"index.html",locals())ios
{% load cache %}
web
{% cache 2 'name' %} # 存的key
ajax
# 33. django的緩存能使用redis嗎?若是能夠的話,如何配置?
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密碼", } } }, #另添加緩存 "JERD": { }
from django_redis import get_redis_connection conn = get_redis_connection("default")
# 34. django的模板中filter和simple_tag的區別?
# 35. django-debug-toolbar的做用?
## 36. django中如何實現單元測試? # 37. 解釋orm中 db first 和 code first的含義?
# 38. django中如何根據數據庫表生成model中的類?
# 39. 使用orm和原生sql的優缺點?
# 40. django的contenttype組件的做用?
# 41. 談談你對restful規範的認識?
ret = { code: 1000, data:{ id:1, name:'小強', depart_id:http://www.luffycity.com/api/v1/depart/8/ } }
# 42. 接口的冪等性是什麼意思?
# 43. 什麼是RPC?
# 44. 爲何要使用API
# 45. 爲何要使用django rest framework框架?
# 46. django rest framework框架中都有那些組件?
# 47. django rest framework框架中的視圖均可以繼承哪些類?
# 48. 簡述 django rest framework框架的認證流程
# 49. django rest framework如何實現的用戶訪問頻率控制
# 50. rest_framework序列化組件的做用,以及一些外鍵關係的鉤子方法
# 51. 給用戶提供一個接口以前須要提早作什麼
# 52. PV和UV
# 53. 什麼是跨域以及解決方法:
# 54. 如何實現用戶的登錄認證
# 55. 如何將dict轉換成url的格式:
```redis