中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站官網(wǎng)認(rèn)證怎么做的管理培訓(xùn)班

網(wǎng)站官網(wǎng)認(rèn)證怎么做的,管理培訓(xùn)班,公眾號登錄超時,順義深圳網(wǎng)站建設(shè)公司一. django中間件 1. 什么是django中間件 # django中間件是django的門戶1. 請求來的時候需要先經(jīng)過中間件才能到達(dá)真正的django后端2. 響應(yīng)走的時候最后也需要經(jīng)過中間件才能發(fā)送出去 2. django中間件的個數(shù) django自帶七個中間件, 分別是SecurityMiddleware, SessionMiddle…

一. django中間件

1. 什么是django中間件

# django中間件是django的門戶1. 請求來的時候需要先經(jīng)過中間件才能到達(dá)真正的django后端2. 響應(yīng)走的時候最后也需要經(jīng)過中間件才能發(fā)送出去

2. django中間件的個數(shù)

django自帶七個中間件, 分別是SecurityMiddleware, SessionMiddleware,CommonMiddleware, CsrfViewMiddleware, AuthenticationMiddleware,MessageMiddleware, XFrameOptionMiddleware

3. django請求生命周期流程圖

?

4. 研究django中間件代碼規(guī)律

# settings.py配置文件中
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]class SessionMiddleware(MiddlewareMixin):def process_request(self, request):...def process_response(self, request, response):...class CsrfViewMiddleware(MiddlewareMixin):def process_request(self, request):...def process_view(self, request, callback, callback_args, callback_kwargs):...def process_response(self, request, response):...class AuthenticationMiddleware(MiddlewareMixin):def process_request(self, request):...   

5. 自定義中間件

# django支持程序員自定義中間件, 并且暴露給程序員五個可以自定義的方法# 掌握process_requestprocess_response# 了解process_viewprocess_template_responseprocess_exception

5-1. 自定義中間件流程
1. 在項目名或者應(yīng)用名下創(chuàng)建一個任意名稱的文件夾
2. 在該文件夾內(nèi)創(chuàng)建一個任意名稱的py文件
3. 在該py文件內(nèi)需要書寫類(注意: 這個類必須繼承MiddlewareMixin)然后在這個類里面就可以自定義五個方法了提示: 這五個方法并不是全部都需要書寫,用幾個寫幾個
4. 需要將類的路徑以字符串的形式注冊到settings.py配置文件中的MIDDLEWARE下才能生效
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',# 注冊自己的中間件(在應(yīng)用下創(chuàng)建路徑有提示,但是如果在項目下創(chuàng)建就沒有提示了 你就需要自己比對著書寫)'你自己寫的中間件的路徑1','你自己寫的中間件的路徑2','你自己寫的中間件的路徑3',
]

5-2. 二種掌握自定義: process_request, process_response
'''
process_request1. 請求來的時候會依此走 MIDDLEWARE 中定義的該方法. 如果沒有定義就跳過.執(zhí)行順序:  MIDDLEWARE 中從上到下2. 如果返回 HttpResponse 對象, 請求將不會繼續(xù)往后執(zhí)行, 而是原路返回目的: 用來做全局相關(guān)的所有限制功能應(yīng)用: 校驗失敗不允許訪問process_response1. 響應(yīng)走的時候會依此走 MIDDLEWARE 中定義的該方法. 如果沒有定義就跳過.執(zhí)行順序:  MIDDLEWARE 中從下到上2. 該方法必須返回  HttpResponse 對象2.1 默認(rèn)返回形參response2.2 返回自定義的拓展: 綜合2者: 如果 process_request 方法指定返回 HttpResponse對象.1. 后續(xù) process_request 方法不執(zhí)行.2. 從同級別 process_response 方法開始按照 MIDDLEWARE 從下到上依此返回.3. 如果 process_response 方法沒有指定自定義返回結(jié)果, 默認(rèn)返回的就是 process_request 中返回的結(jié)果. 否則返回 process_response 方法的結(jié)果拓展: flask框架也有一個中間件但是它的規(guī)律只要返回數(shù)據(jù)了就必須經(jīng)過所有中間件里面的類似process_reponse方法     
'''
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponseclass FirstMiddleware(MiddlewareMixin):def process_request(self, request):"""1. 請求來的時候需要經(jīng)過每一個中間件里面的process_request方法結(jié)果的順序是按照配置文件中注冊的中間件從上往下的順序依次執(zhí)行2. 如果中間件里面沒有定義該方法,那么直接跳過執(zhí)行下一個中間件3 .如果該方法返回了HttpResponse對象,那么請求將不再繼續(xù)往后執(zhí)行而是直接原路返回(校驗失敗不允許訪問...)process_request方法就是用來做全局相關(guān)的所有限制功能"""print('我是 FirstMiddleware 類中的定義的 process_request 方法')def process_response(self, request, response):"""1.響應(yīng)走的時候需要結(jié)果每一個中間件里面的process_response方法該方法有兩個額外的參數(shù)request,response2. 該方法必須返回一個HttpResponse對象. 不返回拋出異常: 'NoneType' object has no attribute 'get'2-1. 默認(rèn)返回的就是形參response2-2. 你也可以自己返回自己的3. 順序是按照配置文件中注冊了的中間件從下往上依次經(jīng)過如果你沒有定義的話 直接跳過執(zhí)行下一個:param response: 就是django后端返回給瀏覽器的內(nèi)容"""print('我是 FirstMiddleware 類中的定義的 process_response 方法')return responseclass SecondMiddleware(MiddlewareMixin):def process_request(self, request):print('我是 SecondMiddleware 類中的定義的 process_request 方法')# return HttpResponse(#     '研究2: 如果 process_request 方法返回了 HttpResponse 對象,那么請求將不再繼續(xù)往后執(zhí)行而是直接原路返回. 響應(yīng)走的時候是經(jīng)過同級別的 process_response 返回')def process_response(self, request, response):print('我是 SecondMiddleware 類中的定義的 process_response 方法')# return HttpResponse('研究1: 如果 process_response 方法返回了 HttpResponse 對象,那么響應(yīng)按照自己的返回結(jié)果作為標(biāo)準(zhǔn)返回.')return response

5-3. 三種了解自定義: process_view, process_template_response, process_exception
'''
process_view路由匹配之前 或者 執(zhí)行視圖函數(shù)之前 時觸發(fā)執(zhí)行順序: MIDDLEWARE 中從上到下
process_template_response視圖函數(shù)返回結(jié)果中含有render屬性是觸發(fā)執(zhí)行順序: MIDDLEWARE 中從下到上
process_exception視圖函數(shù)出現(xiàn)異常時觸發(fā)執(zhí)行順序: MIDDLEWARE 中從下到上
'''
from django.utils.deprecation import MiddlewareMixinclass FirstMiddleware(MiddlewareMixin):def process_view(self, request, view_name, *args, **kwargs):"""路由匹配成功之后執(zhí)行視圖函數(shù)之前,會自動執(zhí)行中間件里面的該放法順序是按照配置文件中注冊的中間件從上往下的順序依次執(zhí)行"""print(view_name, args, kwargs)    # <function my_index at 0x000002345C28BEA0> ((), {}) {}print('我是第一個自定義中間件里面的 process_view')def process_template_response(self, request, response):"""返回的HttpResponse對象有render屬性的時候才會觸發(fā)順序是按照配置文件中注冊了的中間件從下往上依次經(jīng)過def index(request):print('我是視圖函數(shù)index')obj = HttpResponse('index')def render():print('內(nèi)部的render')return HttpResponse("O98K")obj.render = renderreturn obj"""print('我是第一個自定義中間件里面的 process_template_response')return responsedef process_exception(self, request, exception):"""當(dāng)視圖函數(shù)中出現(xiàn)異常的情況下觸發(fā)順序是按照配置文件中注冊了的中間件從下往上依次經(jīng)過"""print('我是第一個中間件里面的 process_exception')print(exception)class SecondMiddleware(MiddlewareMixin):def process_view(self, request, view_name, *args, **kwargs):print(view_name, args, kwargs)print('我是第二個自定義中間件里面的 process_view')def process_template_response(self, request, response):print('我是第二個自定義中間件里面的 process_template_response')return responsedef process_exception(self, request, exception):print('我是第二個中間件里面的process_exception')print(exception)

二. csrf跨站請求偽造

1. csrf介紹

# csrf 全稱 cross site request forgery 跨站請求偽造# 舉一個實例來描述什么是csrf:我搭建一個跟正規(guī)網(wǎng)站一模一樣的界面(中國銀行)用戶不小心進(jìn)入到了我們的網(wǎng)站,用戶給某個人打錢打錢的操作確確實實是提交給了中國銀行的系統(tǒng),用戶的錢也確確實實減少了但是唯一不同的時候打錢的賬戶不適用戶想要打的賬戶變成了一個莫名其妙的賬戶# 內(nèi)部本質(zhì)我們在釣魚網(wǎng)站的頁面 針對對方賬戶 只給用戶提供一個沒有name屬性的普通input框然后我們在內(nèi)部隱藏一個已經(jīng)寫好name和value的input框# 如何規(guī)避上述問題: csrf跨站請求偽造校驗網(wǎng)站在給用戶返回一個具有提交數(shù)據(jù)功能頁面的時候會給這個頁面加一個唯一標(biāo)識, 斌且這個唯一標(biāo)識永遠(yuǎn)不一樣當(dāng)這個頁面朝后端發(fā)送post請求的時候 我的后端會先校驗唯一標(biāo)識,如果唯一標(biāo)識不對直接拒絕(403 forbbiden)如果成功則正常執(zhí)行

2. CSRF跨站請求偽造及解決思路流程圖

?

3. 針對form與ajax的符合校驗設(shè)置來解決CSRF問題

# form表單符合校驗: 只需要指定一個 {% load csrf_token %} 即可<head>{% load static %} {# 方式三 #}<script src="{% static 'js/pass_csrf.js' %}"></script></head><body><h3>我是正規(guī)網(wǎng)站</h3><form action="" method="post">{% csrf_token %}<p>轉(zhuǎn)賬賬戶: <input type="text" name="user"></p><p>目標(biāo)賬戶: <input type="text" name="target_user"></p><p>轉(zhuǎn)賬金額: <input type="text" name="money"></p><input type="submit" value="form表單提交"></form><br># ajax符合校驗設(shè)置
'''
方式一: 利用標(biāo)簽查找獲取頁面上的隨機(jī)字符串'csrfmiddlewaretoken': $("[name='csrfmiddlewaretoken']").val()
方式二:  利用模版語法提供的快捷書寫'csrfmiddlewaretoken': '{{ csrf_token }}'注意: 這里是 '{{ csrf_token }}' 而不是 {% csrf_token %}
方式三: 通用直接拷貝js代碼并應(yīng)用到自己的html頁面上即可{% load static %}<script src="{% static 'js/pass_csrf.js' %}"></script>
'''
<button id="d1">ajax方式提交</button>
<script>$('#d1').on('click', function () {$.ajax({url: '',type: 'post',data: {'user': 'jason',{#'user': $("[name='user']").val(),#}{#'target_user': $("[name='target_user']").val(),#}'target_user': 'egon',{#'money': $("[name='money']").val(),#}'money': '100000',{#'csrfmiddlewaretoken': $("[name='csrfmiddlewaretoken']").val(),#}      // 方式一{#'csrfmiddlewaretoken': '{{ csrf_token }}',#}  // 方式二},success: function () {},})})
</script>

ajax符合校驗設(shè)置第三種方法的js代碼拷貝
function getCookie(name) {var cookieValue = null;if (document.cookie && document.cookie !== '') {var cookies = document.cookie.split(';');for (var i = 0; i < cookies.length; i++) {var cookie = jQuery.trim(cookies[i]);// Does this cookie string begin with the name we want?if (cookie.substring(0, name.length + 1) === (name + '=')) {cookieValue = decodeURIComponent(cookie.substring(name.length + 1));break;}}}return cookieValue;
}
var csrftoken = getCookie('csrftoken');function csrfSafeMethod(method) {// these HTTP methods do not require CSRF protectionreturn (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}$.ajaxSetup({beforeSend: function (xhr, settings) {if (!csrfSafeMethod(settings.type) && !this.crossDomain) {xhr.setRequestHeader("X-CSRFToken", csrftoken);}}
});

4. {% csrf_token%} 與 {{ csrf_token }}的表現(xiàn)形式及兩者之間的關(guān)系

# {% csrf_token%}<input type="hidden" name="csrfmiddlewaretoken" value="Fuih8hBFfSw7usOBVz1FF8yWYlBVeqmJ59O0HGGZp9Rko4Ovm9F5QnS2Zm0dKV5K"># {{ csrf_token }}# 對應(yīng)的就是{% csrf_token %}input標(biāo)簽中的value值BTYOUHdtrTRzOKnSFn1yzu4hnbs2J88h1yuxt6iNBacMImnM6XFYKJonocRkfDRi

三. csrf相關(guān)裝飾器

# 需求
'''
1. 網(wǎng)站整體都不校驗csrf,就單單幾個視圖函數(shù)需要校驗
2. 網(wǎng)站整體都校驗csrf,就單單幾個視圖函數(shù)不校驗
'''

1. 針對FBV

from django.views.decorators.csrf import csrf_protect, csrf_exempt# @csrf_exempt
# @csrf_protect
def my_transfer(request):if request.method == "POST":user = request.POST.get('user')target_user = request.POST.get('target_user')money = request.POST.get('money')print(f'{user}給{target_user}轉(zhuǎn)了{(lán)money}元')return render(request, 'my_transfer.html')

2. 爭對CBV

"""
csrf_protect  需要校驗針對csrf_protect符合裝飾器的三種玩法
csrf_exempt   忽視校驗針對csrf_exempt只能給dispatch方法加才有效
"""
from django.views.decorators.csrf import csrf_protect, csrf_exempt
from django.utils.decorators import method_decorators# @method_decorator(csrf_protect, name='post')
class MySelfCsrfToken(View):# @method_decorator(csrf_protect)def dispatch(self, request, *args, **kwargs):return super(MySelfCsrfToken, self).dispatch(request, *args, **kwargs)def get(self, request):return HttpResponse('get 請求')# @method_decorator(csrf_protect)def post(self, request):return HttpResponse('post 請求')# @method_decorator(csrf_exempt, name='post')
class MySelfCsrfToken(View):@method_decorator(csrf_exempt)def dispatch(self, request, *args, **kwargs):return super(MySelfCsrfToken, self).dispatch(request, *args, **kwargs)def get(self, request):return HttpResponse('get 請求')# @method_decorator(csrf_exempt)def post(self, request):return HttpResponse('post 請求')

四. 總結(jié)

# django中間件# 什么是django中間件: 它是django的大門請求來的時候要先過中間件才能到達(dá)真正的django后端響應(yīng)走的時候也需要經(jīng)過中間件才能發(fā)送出去# django中間件個數(shù): 自帶七個SecurityMiddlewareSessionMiddlewareCommonMiddlewareCsrfViewMiddlewareAuthenticationMiddlewareMessageMiddlewareXFrameOptionMiddleware# django提供了5種自定義中間件方法process_requestprocess_responseprocess_viewprocess_template_responseprocess_exception# 自定義中間件流程1. 應(yīng)用 或 項目 下創(chuàng)建任意文件夾2. 在創(chuàng)建的任意文件夾下創(chuàng)建任意的.py文件3. 在創(chuàng)建的任意的.py文件中書寫類. 該類要繼承MiddlewareMixin4. 到settings.py配置文件中找到MIDDLEWARE注冊# 二種掌握自定義: process_request, process_response# process_request1. 請求來的時候會從上到下依此執(zhí)行注冊了中間件類中的方法. 沒有定義就跳過2. 如果返回了HttpResponse對象, 請求將不會往下執(zhí)行, 而是原路返回功能: 用來做全局相關(guān)的所有限制功能應(yīng)用: 效驗用戶權(quán)限功能# process_response1. 響應(yīng)走的時候會從下到上依此執(zhí)行注冊了中間件類中的方法. 沒有定義就跳過2. 該方法必須返回HttpResponse對象2-1. 返回參數(shù)response2-2. 返回自定義HttpResponse對象# 二者綜合:如果process_request方法返回的是HttpResponse對象. 請求將不會往下繼續(xù)執(zhí)行,開始按照同級別定義的process_response方法, 按照注冊了中間件類中的順序從下到上依此返回.如果在返回的途中的process_response方法沒有使用自定義的HttpResponse對象的形式返回, 那么最終返回的結(jié)果就按照process_request方法返回的HttpResponse對象為準(zhǔn)如果在返回的途中的process_response方法自定義的自己的HttpResponse對象,那么將會按照當(dāng)前HttpResponse返回的結(jié)果作為標(biāo)準(zhǔn). 同時如果上一層也定義了,就按照上一層的結(jié)果返回.# 基本使用from django.utils.deprecation import MiddlewareMixinclass MyMiddleware(MiddlewareMixin):def process_request(self, request)...def process_response(self, request, response):...return response# 三種了解自定義: process_view, process_template_response, process_exception# process_view在路由匹配之前視圖函數(shù)執(zhí)行之前觸發(fā)執(zhí)行順序: 在注冊了的中間件類中從上到下# process_template_response在視圖函數(shù)返回的HttpResponse對象含有render屬性時觸發(fā)執(zhí)行順序: 在注冊了的中間件類中從下到上# process_exception在視圖函數(shù)執(zhí)行過程中拋出異常時觸發(fā)執(zhí)行順序: 在注冊了的中間件類中從下到上# csrf跨站請求偽造# csrf 全稱 cross site request forgery  跨站請求偽造# 什么是CSRF就是基于不同的服務(wù)端發(fā)送出相同的展示頁面, 假的頁面與真的頁面展示給用戶看時候一模一樣,在用戶輸入敏感信息的時候, 提交的不是用戶想提交的內(nèi)容, 而是隱藏在標(biāo)簽中的內(nèi)容,雖然都是提交到同一個正規(guī)服務(wù)器, 但是提交的數(shù)據(jù)內(nèi)容不是用戶指定的了. 而是隱藏的內(nèi)容.# 本質(zhì):釣魚網(wǎng)站不提供用戶輸入的name屬性值, 而是提供自己指定的隱藏的寫好的name以及對應(yīng)的value# 規(guī)避:在給用戶返回一個具有提交數(shù)據(jù)的功能頁面的時候附加一個唯一標(biāo)識,在用戶提交請求過來的時候, 服務(wù)端效驗這個請求中是否含有對應(yīng)的唯一標(biāo)識,如果有則正常執(zhí)行 如果沒有則拒絕并返回403 forbbiden# 爭對form與ajax的符合校驗設(shè)置來解決CSRF問題# 爭對form在返回的頁面書寫 {% csrf_token %}# 爭對ajax: 在data參數(shù)中指定方式一: data: {'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken].val()')}方式二: {'csrfmiddlewaretoken': `{{ csrf_token }}`}方式三: 自定義js文件copy代碼. 再配置靜態(tài)文件導(dǎo)入.# csrf相關(guān)裝飾器from django.utils.decorators.csrf import csrf_protect, csrf_exempt# 爭對FBV@csrf_protect# @csrf_exemptdef index(request):if request.method == 'POST':return HttpResponse('index')return render(request, 'index.html')# 爭對CBVcsrf_protect三種方式都可以csrf_exempt只爭對dispatch方法有效

http://www.risenshineclean.com/news/62049.html

相關(guān)文章:

  • 網(wǎng)站實例營銷策劃咨詢機(jī)構(gòu)
  • 電子商務(wù)網(wǎng)站開發(fā)的流程圖廈門關(guān)鍵詞排名優(yōu)化
  • 蘇州建設(shè)局官方網(wǎng)站百度提交網(wǎng)址入口
  • wordpress title description東莞整站優(yōu)化
  • 機(jī)械網(wǎng)站 英文百度手機(jī)快速排名點擊軟件
  • 阿里巴巴運營技巧武漢seo論壇
  • 怎樣做百度網(wǎng)站推廣青島seo關(guān)鍵詞優(yōu)化公司
  • 網(wǎng)站建設(shè)管理中se是什么意思數(shù)據(jù)分析培訓(xùn)
  • vue做視頻網(wǎng)站怎樣做推廣更有效
  • 有個網(wǎng)站發(fā)任務(wù) 用手機(jī)可以做百度快照什么意思
  • 黑客網(wǎng)站裝b武漢大學(xué)人民醫(yī)院精神科
  • 蔬菜水果網(wǎng)站建設(shè)軟文網(wǎng)站推廣
  • 中國建設(shè)工程招標(biāo)網(wǎng)官方網(wǎng)站自建網(wǎng)站平臺
  • 網(wǎng)站設(shè)計不同的原因中國足球世界排名
  • 推推蛙網(wǎng)站建設(shè)合肥網(wǎng)站seo費用
  • 昆明網(wǎng)站建設(shè)價目表網(wǎng)絡(luò)營銷課程ppt
  • 徐州seo關(guān)鍵詞排名優(yōu)化價格
  • 網(wǎng)站建設(shè)項目風(fēng)險管理的主要內(nèi)容成品短視頻app源碼的優(yōu)點
  • 做風(fēng)險投資網(wǎng)站程序員培訓(xùn)
  • 手機(jī)網(wǎng)站用單獨做嗎列舉常見的網(wǎng)絡(luò)營銷工具
  • 西安微信平臺網(wǎng)站建設(shè)沈陽沈河seo網(wǎng)站排名優(yōu)化
  • 自己怎樣免費建設(shè)網(wǎng)站分發(fā)平臺
  • 專門做離異相親的網(wǎng)站惠州seo報價
  • 專業(yè)網(wǎng)站建設(shè)品牌策劃方案惠州網(wǎng)站排名提升
  • 蘇州做網(wǎng)站套路騙寧波網(wǎng)絡(luò)推廣平臺
  • 大型網(wǎng)站建設(shè)制作平臺seo推廣的公司
  • 章瑩穎被賣做性奴網(wǎng)站深圳百度seo整站
  • 濰坊大型做網(wǎng)站建設(shè)的公司網(wǎng)站收錄提交入口
  • 保定網(wǎng)站設(shè)計網(wǎng)站app開發(fā)軟件
  • 為什么不建議去代賬公司廣州網(wǎng)站優(yōu)化系統(tǒng)