Django開發常用方法及面試題

来源:https://www.cnblogs.com/nangec/archive/2019/12/02/11973627.html
-Advertisement-
Play Games

[TOC] 1. 對Django的認識? 2. Django 、Flask、Tornado的對比 3. 什麼是wsgi,uwsgi,uWSGI? 4. django請求的生命周期? 5. 簡述什麼是FBV和CBV? 6. 如何給CBV的程式添加裝飾器? 7. 簡述MVC和MTV 8. django路 ...


目錄

1. 對Django的認識?

#1.Django是走大而全的方向,它最出名的是其全自動化的管理後臺:只需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理後臺。
#2.Django內置的ORM跟框架內的其他模塊耦合程度高。
#應用程式必須使用Django內置的ORM,否則就不能享受到框架內提供的種種基於其ORM的便利;
#理論上可以切換掉其ORM模塊,但這就相當於要把裝修完畢的房子拆除重新裝修,倒不如一開始就去毛胚房做全新的裝修。
#3.Django的賣點是超高的開發效率,其性能擴展有限;採用Django的項目,在流量達到一定規模後,都需要對其進行重構,才能滿足性能的要求。
#4.Django適用的是中小型的網站,或者是作為大型網站快速實現產品雛形的工具。
#5.Django模板的設計哲學是徹底的將代碼、樣式分離; Django從根本上杜絕在模板中進行編碼、處理數據的可能。

2. Django 、Flask、Tornado的對比

#1.Django走的是大而全的方向,開發效率高。它的MTV框架,自帶的ORM,admin後臺管理,自帶的sqlite資料庫和開發測試用的伺服器
#給開發者提高了超高的開發效率
#2.Flask是輕量級的框架,自由,靈活,可擴展性很強,核心基於Werkzeug WSGI工具和jinja2模板引擎
#3.Tornado走的是少而精的方向,性能優越。它最出名的是非同步非阻塞的設計方式
#Tornado的兩大核心模塊:
#    1.iostraem:對非阻塞式的socket進行簡單的封裝
#    2.ioloop:對I/O多路復用的封裝,它實現了一個單例

3. 什麼是wsgi,uwsgi,uWSGI?

#WSGI:
#    web伺服器網關介面,是一套協議。用於接收用戶請求並將請求進行初次封裝,然後將請求交給web框架
#    實現wsgi協議的模塊:
#        1.wsgiref,本質上就是編寫一個socket服務端,用於接收用戶請求(django)
#        2.werkzeug,本質上就是編寫一個socket服務端,用於接收用戶請求(flask)
#uwsgi:
#    與WSGI一樣是一種通信協議,它是uWSGI伺服器的獨占協議,用於定義傳輸信息的類型
#uWSGI:
#    是一個web伺服器,實現了WSGI協議,uWSGI協議,http協議,

4. django請求的生命周期?

#1.wsgi,請求封裝後交給web框架 (Flask、Django)     
#2.中間件,對請求進行校驗或在請求對象中添加其他相關數據,例如:csrf、request.session     - 
#3.路由匹配 根據瀏覽器發送的不同url去匹配不同的視圖函數    
#4.視圖函數,在視圖函數中進行業務邏輯的處理,可能涉及到:orm、templates => 渲染     - 
#5.中間件,對響應的數據進行處理。 
#6.wsgi,將響應的內容發送給瀏覽器。

5. 簡述什麼是FBV和CBV?

#FBV和CBV本質是一樣的
#基於函數的視圖叫做FBV,基於類的視圖叫做CBV
#在python中使用CBV的優點:
#1.提高了代碼的復用性,可以使用面向對象的技術,比如Mixin(多繼承)
#2.可以用不同的函數針對不同的HTTP方法處理,而不是通過很多if判斷,提高代碼可讀性

6. 如何給CBV的程式添加裝飾器?

#引入method_decorator模塊
#1.直接在類上加裝飾器
#@method_decorator(test,name='dispatch')
#class Loginview(View):
#    pass
#2.直接在處理的函數前加裝飾器
#@method_decorator(test)
#    def post(self,request,*args,**kwargs):pass

7. 簡述MVC和MTV

#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

8. django路由系統中name的作用?

#用於反向解析路由,相當於給url取個別名,只要這個名字不變,即使對應的url改變
#通過該名字也能找到該條url

9. 列舉django的內置組件?

#1.Admin是對model中對應的數據表進行增刪改查提供的組件
#2.model組件:負責操作資料庫
#3.form組件:1.生成HTML代碼2.數據有效性校驗3校驗信息返回並展示
#4.ModelForm組件即用於資料庫操作,也可用於用戶請求的驗證

10. 說一下Django,MIDDLEWARES中間件的作用和應用場景?

#中間件是介於request與response處理之間的一道處理過程,用於在全局範圍內改變Django的輸入和輸出。
#簡單的來說中間件是幫助我們在視圖函數執行之前和執行之後都可以做一些額外的操作
#例如:
#1.Django項目中預設啟用了csrf保護,每次請求時通過CSRF中間件檢查請求中是否有正確#token值
#2.當用戶在頁面上發送請求時,通過自定義的認證中間件,判斷用戶是否已經登陸,未登陸就去登陸。
#3.當有用戶請求過來時,判斷用戶是否在白名單或者在黑名單里

11. 列舉django中間件的5個方法?

#1.process_request : 請求進來時,許可權認證
#2.process_view : 路由匹配之後,能夠得到視圖函數
#3.process_exception : 異常時執行
#4.process_template_responseprocess : 模板渲染時執行
#5.process_response : 請求有響應時執行

12. django的request對象是在什麼時候創建的?

#class WSGIHandler(base.BaseHandler):
#    request = self.request_class(environ)
#請求走到WSGIHandler類的時候,執行__cell__方法,將environ封裝成了request

13. Django重定向是如何實現的?用的什麼狀態碼?

#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

14. xxss攻擊

#-- XSS攻擊是向網頁中註入惡意腳本,用在用戶瀏覽網頁時,在用戶瀏覽器中執行惡意腳本的攻擊。
#    -- XSS分類,反射型xss ,存儲型xss
#    -- 反射型xss又稱為非持久型xss,攻擊者通過電子郵件等方式將包含註入腳本的鏈接發送給受害者,
#        受害者通過點擊鏈接,執行註入腳本,達到攻擊目的。
#    -- 持久型xss跟反射型的最大不同是攻擊腳本將被永久的存放在目標伺服器的資料庫和文件中,多見於論壇
#        攻擊腳本連同正常信息一同註入到帖子內容當中,當瀏覽這個被註入惡意腳本的帖子的時候,惡意腳本會被執行
#    -- 防範措施 1 輸入過濾  2 輸出編碼  3 cookie防盜
#        1,輸入過濾 用戶輸入進行檢測 不允許帶有js代碼
#        2,輸出編碼 就是把我們的腳本代碼變成字元串形式輸出出來
#        3,cookie加密
        
        
        
#向頁面註入惡意的代碼,這些代碼被瀏覽器執行
#XSS攻擊能做些什麼:
#    1.竊取cookies
#    2.讀取用戶未公開的資料,如果:郵件列表或者內容、系統的客戶資料,聯繫人列表
#解決方法:
#    1.客戶度端:表單提交之前或者url傳遞之前,對需要的參數進行過濾
#    2.伺服器端:檢查用戶輸入的內容是否有非法內容

15. django中csrf的實現機制

#第一步:django第一次響應來自某個客戶端的請求時,後端隨機產生一個token值,把這個token保存在SESSION狀態中;同時,後端把這個token放到cookie中交給前端頁面;
#第二步:下次前端需要發起請求(比如發帖)的時候把這個token值加入到請求數據或者頭信息中,一起傳給後端;Cookies:{csrftoken:xxxxx}
#第三步:後端校驗前端請求帶過來的token和SESSION里的token是否一致;

16. 基於django使用ajax發送post請求時,都可以使用哪種方法攜帶csrf 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")}, 

17. Django本身提供了runserver,為什麼不能用來部署?(runserver與uWSGI的區別)

#1.runserver方法是調試 Django 時經常用到的運行方式,它使用Django自帶的
#WSGI Server 運行,主要在測試和開發中使用,並且 runserver 開啟的方式也是單進程 。
#2.uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http 等協議。註意uwsgi是一種通信協議,而uWSGI是實現uwsgi協議和WSGI協議的 Web 伺服器。
#uWSGI具有超快的性能、低記憶體占用和多app管理等優點,並且搭配著Nginx就是一個生產環境了,能夠將用戶訪問請求與應用 app 隔離開,實現真正的部署 。
#相比來講,支持的併發量更高,方便管理多進程,發揮多核的優勢,提升性能。

18. cookie和session的區別:

#1.cookie:
#    cookie是保存在瀏覽器端的鍵值對,可以用來做用戶認證
#2.session:
#   將用戶的會話信息保存在服務端,key值是隨機產生的自符串,value值時session的內容
#    依賴於cookie將每個用戶的隨機字元串保存到用戶瀏覽器上
#Django中session預設保存在資料庫中:django_session表
#flask,session預設將加密的數據寫在用戶的cookie中

19. 列舉django orm 中所有的方法(QuerySet對象的所有方法)

#<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():            從返回結果中剔除重覆紀錄

20. only和defer的區別?

#only:從資料庫中只取指定欄位的內容
#defer:指定欄位的內容不被檢索

21. select_related和prefetch_related的區別?

#有外鍵存在時,可以很好的減少資料庫請求的次數,提高性能
#select_related通過多表join關聯查詢,一次性獲得所有數據,只執行一次SQL查詢
#prefetch_related分別查詢每個表,然後根據它們之間的關係進行處理,執行兩次查詢

22. filter和exclude的區別?

#取到的值都是QuerySet對象,filter選擇滿足條件的,exclude:排除滿足條件的.

23. F和Q的作用?

#F:對數據本身的不同欄位進行操作 如:比較和更新
#Q:用於構造複雜的查詢條件 如:& |操作

24. values和values_list的區別?

#values : 取字典的queryset
#values_list : 取元組的queryset

25. 如何使用django orm批量創建數據?

#bulk_create()
#objs=[models.Book(title="圖書{}".format(i+15)) for i in range(100)]
#models.Book.objects.bulk_create(objs)

26. django的Form和ModeForm的作用?

#Form作用:

#    1.在前端生成HTML代碼
#    2.對數據作有效性校驗
#    3.返回校驗信息並展示
#ModeForm:根據模型類生成From組件,並且可以操作資料庫

27. django的Form組件中,如果欄位中包含choices參數,請使用兩種方式實現數據源實時更新。

#1.重寫構造函數
def def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")
#2.利用ModelChoiceField欄位,參數為queryset對象

28. django的Model中的ForeignKey欄位中的on_delete參數有什麼作用?

#刪除關聯表中的數據時,當前表與其關聯的field的操作
#django2.0之後,表與表之間關聯的時候,必須要寫on_delete參數,否則會報異常

29. 列舉django orm中三種能寫sql語句的方法。

#1.使用execute執行自定義的SQL
#2.使用extra方法 
#3.使用raw方法
#    1.執行原始sql並返回模型
#    2.依賴model多用於查詢

30. django orm 中如何設置讀寫分離?

#1.手動讀寫分離:通過.using(db_name)來指定要使用的資料庫
#2.自動讀寫分離:
#    1.定義類:如Router
#    2.配置Router
#        settings.py中指定DATABASE_ROUTERS
#        DATABASE_ROUTERS = ['myrouter.Router',] 
#提高讀的性能:多配置幾個資料庫,併在讀取時,隨機選取。寫的時候寫到主庫
#實現app之間的資料庫分離:分庫分表

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 time
  
@cache_page(15)          #超時時間為15秒
def index(request):
 t=time.time()      #獲取當前時間
 return render(request,"index.html",locals())
 
# 模板緩存
{% load cache %}
 <h3 style="color: green">不緩存:-----{{ t }}</h3>
  
{% cache 2 'name' %} # 存的key
 <h3>緩存:-----:{{ t }}</h3>
{% endcache %}

33. django的緩存能使用redis嗎?如果可以的話,如何配置?

#1.安裝 pip install django-redis
#2.在stting中配置CACHES,可以設置多個緩存,根據名字使用
        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": { }
#3.根據名字去連接池中獲取連接
        from django_redis import get_redis_connection
        conn = get_redis_connection("default")

34. django的模板中filter和simple_tag的區別?

# 自定義filter:{{ 參數1|filter函數名:參數2 }}
#    1.可以與if標簽來連用
#    2.自定義時需要寫兩個形參
# simple_tag:{% simple_tag函數名 參數1 參數2 %}
#    1.可以傳多個參數,沒有限制
#    2.不能與if標簽來連用

35. django-debug-toolbar的作用?

#1.是django的第三方工具包,給django擴展了調試功能
#包括查看sql語句,db查詢次數,request,headers等

36. django中如何實現單元測試?

37. 解釋orm中 db first 和 code first的含義?

#數據持久化的方式:
#db first基於已存在的資料庫,生成模型
#code first基於已存在的模型,生成資料庫庫

38. django中如何根據資料庫表生成model中的類?

#1.在settings中設置要連接的資料庫
#2.生成model模型文件
#python manage.py inspectdb
#3.模型文件導入到models中
#    python manage.py inspectdb > app/models.py

39. 使用orm和原生sql的優缺點?

#1.orm的開發速度快,操作簡單。使開發更加對象化
#執行速度慢。處理多表聯查等複雜操作時,ORM的語法會變得複雜
#2.sql開發速度慢,執行速度快。性能強

40. django的contenttype組件的作用?

#這個組件保存了項目中所有app和model的對應關係,每當我們創建了新的model並執行資料庫遷移後,ContentType表中就會自動新增一條記錄
#當一張表和多個表FK關聯,並且多個FK中只能選擇其中一個或其中n個時,可以利用contenttypes

41. 談談你對restful規範的認識?

#首先restful是一種軟體架構風格或者說是一種設計風格,並不是標準,它只是提供了一組設計#原則和約束條件,主要用於客戶端和伺服器交互類的軟體。     
#就像設計模式一樣,並不是一定要遵循這些原則,而是基於這個風格設計的軟體可以更簡潔,更#有層次,我們可以根據開發的實際情況,做相應的改變。
#它裡面提到了一些規範,例如:
#1.restful 提倡面向資源編程,在url介面中儘量要使用名詞,不要使用動詞             
#2、在url介面中推薦使用Https協議,讓網路介面更加安全
#https://www.bootcss.com/v1/mycss?page=3
#(Https是Http的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,
#因此加密的詳細內容就需要SSL(安全套接層協議))                          
#3、在url中可以體現版本號
#https://v1.bootcss.com/mycss
#不同的版本可以有不同的介面,使其更加簡潔,清晰             
#4、url中可以體現是否是API介面 
#https://www.bootcss.com/api/mycss            
#5、url中可以添加條件去篩選匹配
#https://www.bootcss.com/v1/mycss?page=3             
#6、可以根據Http不同的method,進行不同的資源操作
#(5種方法:GET / POST / PUT / DELETE / PATCH)             
#7、響應式應該設置狀態碼
#8、有返回值,而且格式為統一的json格式             
#9、返回錯誤信息
#返回值攜帶錯誤信息             
#10、返回結果中要提供幫助鏈接,即API最好做到Hypermedia
#如果遇到需要跳轉的情況 攜帶調轉介面的URL
      ret = {
            code: 1000,
            data:{
            id:1,
            name:'小強',
            depart_id:http://www.luffycity.com/api/v1/depart/8/
            }
    }

42. 介面的冪等性是什麼意思?

#1.是系統的介面對外一種承諾(而不是實現)
#2.承諾只要調用介面成功,外部多次調用對系統的影響都是一致的,不會對資源重覆操作

43. 什麼是RPC?

#遠程過程調用 (RPC) 是一種協議,程式可使用這種協議向網路中的另一臺電腦上的程式請求服務
#1.RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。
#2.首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然後等待應答信息。
#2.在伺服器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,伺服器獲得進程參數,計算結果,發送答覆信息,然後等待下一個調用信息,
#3.最後,客戶端調用進程接收答覆信息,獲得進程結果,然後調用執行繼續進行。

44. 為什麼要使用API

#系統之間為了調用數據。
#數據傳輸格式:
#    1.json
#     2.xml 

45. 為什麼要使用django rest framework框架?

#能自動生成符合 RESTful 規範的 API
#1.在開發REST API的視圖中,雖然每個視圖具體操作的數據不同,
#但增、刪、改、查的實現流程基本一樣,這部分的代碼可以簡寫
#2.在序列化與反序列化時,雖然操作的數據不同,但是執行的過程卻相似,這部分的代碼也可以簡寫
#REST framework可以幫助簡化上述兩部分的代碼編寫,大大提高REST API的開發速度

46. django rest framework框架中都有那些組件?

#1.序列化組件:serializers  對queryset序列化以及對請求數據格式校驗
#2.路由組件routers 進行路由分發
#3.視圖組件ModelViewSet  幫助開發者提供了一些類,併在類中提供了多個方法
#4.認證組件 寫一個類並註冊到認證類(authentication_classes),在類的的authticate方法中編寫認證邏
#5.許可權組件 寫一個類並註冊到許可權類(permission_classes),在類的的has_permission方法中編寫認證邏輯。 
#6.頻率限制 寫一個類並註冊到頻率類(throttle_classes),在類的的allow_request/wait 方法中編寫認證邏輯
#7.解析器  選擇對數據解析的類,在解析器類中註冊(parser_classes)
#8.渲染器 定義數據如何渲染到到頁面上,在渲染器類中註冊(renderer_classes)
#9.分頁  對獲取到的數據進行分頁處理, pagination_class
#10.版本  版本控制用來在不同的客戶端使用不同的行為
#在url中設置version參數,用戶請求時候傳入參數。在request.version中獲取版本,根據版本不同 做不同處理 

47. django rest framework框架中的視圖都可以繼承哪些類?

#class View(object):
#class APIView(View): 封裝了view,並且重新封裝了request,初始化了各種組件
#class GenericAPIView(views.APIView):
#1.增加了一些屬性和方法,如get_queryset,get_serializer
#class GenericViewSet(ViewSetMixin, generics.GenericAPIView)
#父類ViewSetMixin 重寫了as_view,返回return csrf_exempt(view)
#並重新設置請求方式與執行函數的關係
#class ModelViewSet(mixins.CreateModelMixin,
#                   mixins.RetrieveModelMixin,
#                   mixins.UpdateModelMixin,
#                   mixins.DestroyModelMixin,
#                   mixins.ListModelMixin,
#                   GenericViewSet):pass
#繼承了mixins下的一些類,封裝了list,create,update等方法
#和GenericViewSet

48. 簡述 django rest framework框架的認證流程

#1.用戶請求走進來後,走APIView,初始化了預設的認證方法
#2.走到APIView的dispatch方法,initial方法調用了request.user
#3.如果我們配置了認證類,走我們自己認證類中的authentication方法

49. django rest framework如何實現的用戶訪問頻率控制

#使用IP/用戶賬號作為鍵,每次的訪問時間戳作為值,構造一個字典形式的數據,存起來,每次訪問時對時間戳列表的元素進行判斷,
#把超時的刪掉,再計算列表剩餘的元素數就能做到頻率限制了 
#匿名用戶:使用IP控制,但是無法完全控制,因為用戶可以換代理IP登錄用戶:使用賬號控制,但是如果有很多賬號,也無法限制

50. rest_framework序列化組件的作用,以及一些外鍵關係的鉤子方法

#作用:幫助我們序列化數據
#1.choices  get_欄位名_display
#2.ForeignKey source=orm 操作
#3.ManyToManyFiled  SerializerMethodField()
#                    def get_欄位名():
#                    return 自定義

51. 給用戶提供一個介面之前需要提前做什麼

#1.跟前端進行和交互,確定前端要什麼
#2.把需求寫個文檔保存

52. PV和UV

#1.pv:頁面訪問量,沒打開一次頁面PV計算+1,頁面刷新也是
#2.UV:獨立訪問數,一臺電腦終端為一個訪客

53. 什麼是跨域以及解決方法:

#跨域:
# 瀏覽器從一個功能變數名稱的網頁去請求另一個功能變數名稱的資源時,瀏覽器處於安全的考慮,不允許不同源的請求
#同源策略:
#  協議相同
#  功能變數名稱相同
#  埠相同
#處理方法:
# 1.通過JSONP跨域
# JSON是一種數據交換格式
# JSONP是一種非官方的跨域數據交互協議
# jsonp是包含在函數調用中的json
# script標簽不受同源策略的影響,手動創建一個script標簽,傳遞URL,同時傳入一個回調函數的名字
# 伺服器得到名字後,返回數據時會用這個函數名來包裹住數據,客戶端獲取到數據之後,立即把script標簽刪掉
# 2.cors:跨域資源共用
# 使用自定義的HTTP頭部允許瀏覽器和伺服器相互通信
# 1.如果是簡單請求,直接設置允許訪問的功能變數名稱:
#   允許你的功能變數名稱來獲取我的數據                         
#   response['Access-Control-Allow-Origin'] = "*"
# 2.如果是複雜請求,首先會發送options請求做預檢,然後再發送真正的PUT/POST....請求
#   因此如果複雜請求是PUT等請求,則服務端需要設置允許某請求
#   如果複雜請求設置了請求頭,則服務端需要設置允許某請求頭
#簡單請求:
#    一次請求 
#非簡單請求:
#    兩次請求,在發送數據之前會先發一次請求用於做“預檢”,
#    只有“預檢”通過後才再發送一次請求用於數據傳輸。

#只要同時滿足以下兩大條件,就屬於簡單請求。                             
# (1) 請求方法是以下三種方法之一:HEAD  GET POST
# (2)HTTP的頭信息不超出以下幾種欄位:                                     
#   Accept                                     
#   Accept-Language                                     
#   Content-Language
#   Last-Event-ID
#  Content-Type:只限於三個值application/x-www-form-urlencoded、multipart/form-data、 text/plain 
#JSONP和CORS:
#   1.JSONP只能實現GET請求,而CORS支持所有類型的HTTP請求
#   2.jsonp需要client和server端的相互配合
#   3.cors在client端無需設置,server端需要針對不同的請求,來做head頭的處理

54. 如何實現用戶的登陸認證

#1.cookie session
#2.token 登陸成功後生成加密字元串
#3.JWT:json wed token縮寫 它將用戶信息加密到token中,伺服器不保存任何用戶信息
#伺服器通過使用保存的密鑰來驗證token的正確性

55. 如何將dict轉換成url的格式:

#使用urlencode
#from urllib.parse import urlencode
#post_data={"k1":"v1","k2":"v2"}
#ret=urlencode(post_data)
#print(ret,type(ret))  #k1=v1&k2=v2 <class 'str'>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 為何要適用線程池 首先我們知道線程對於操作系統來說是一種 珍貴的資源 ,像我們如果每次使用到的時候手動創建,線程執行完 方法後又自動關閉,下次用的時候還得手動創建,這樣無論對於操作系統還是我們來說都是一種 時間 和 資源 的浪費,所以我們可以選擇維護一些線程,這些線程在執行完任務之後繼續執行其他 ...
  • [TOC] ajax結合sweetalert使用 點擊下載 "Bootstrap sweetalert" 一通CV大法: 這裡有個問題,發現漢字被擋住了。。。 通過谷歌瀏覽器的檢查,查看html元素修改,加上樣式即可: 後端views.py bulk_create批量插入數據 在django向資料庫 ...
  • golang和swoole區別 開發效率 Go語言是本質上是靜態語言,開發效率稍差,但性能更強,更適合底層軟體的開發 Swoole使用PHP語言,動態腳本語言,開發效率最佳,更適合應用軟體的開發 IO模型 go語言使用單線程eventloop處理IO事件,多線程實現協程調度,執行用戶層代碼 swoo ...
  • 例如:[4,6,2,2,6,4,4,4]→[4,4,4,4,6,6,2,2] 一: 先統計每個元素出現次數,然後按照出現次數進行逆向排序。 二:通過比較元組(-元素頻率,元素index值) ...
  • 在 Swoole 官網的自我介紹是“面向生產環境的 PHP 非同步網路通信引擎”,首先 Swoole 它是一個網路應用的開發工具,它支持 Http、TCP、UDP、WebSocket。 Swoole 和我們傳統的 PHP 開發差別是有的,需要理解的概念也是有的。使用目前一些基於 Swoole 的框架開 ...
  • Swoole進程間通信的方式 管道pipe 管道用於進程之間的數據交互,Linux系統本身提供了pipe函數用於創建一個半雙工通信管道。半雙工的通信方式中數據只能單向流動(一端只讀一端只寫),只能在具有親緣關係(父子進程)的進程之間使用。 管道是進程間通信IPC中最基礎的方式,管道有兩種類型分別是命 ...
  • 網上體育商城的主要功能包括:前臺用戶登錄退出、註冊、線上購物、修改個人信息、後臺商品管理等等。本系統結構如下:(1)商品瀏覽模塊: 首頁瀏覽最新上市商品,按銷量排行顯示商品 實現根據商品名稱搜索商品信息 實現根據商品分類瀏覽商品(2)登錄、註冊: 購物前需要登錄,如果沒有賬號則可以先註冊(3)線上留 ...
  • 用於註解說明解釋程式的文字就是註釋。 提高代碼的閱讀性;調試程式的重要方法。 java中的註釋類型: 單行註釋 // 多行註釋 /* */ 文檔註釋 /** *文檔註釋 *輸出hello world *@author fang *@version 1.0.0 */ 註釋是一個程式員必須具備的良好編程 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...