計算機基礎知識65

cookie和session的使用

# 概念:cookie客戶端瀏覽器上的鍵值對

# 目的:為了做會話保持
# 來源:服務端寫入的,服務端再返回的響應頭中寫入,瀏覽器會自動取出來

????????????????存起來是以key value 形式,有過期時間、path、http only等等


# 使用:只要瀏覽器中有cookie,再次向當前域發送請求,都會自動攜帶在請求頭中
? ? ? ? cookie:"name=lqz;age=19"
# 不安全問題---》cookie中發了敏感數據---》客戶能看到

obj.set_cookie()   # cookie設置
request.COOKIES.get()   # cookie取值 ?
request.COOKIES.clear()    # 清空 ? ? ? ?

# 我們需要讓cookie變的安全---》敏感數據不在cookie中方法,而放在session中
?? ?-session服務端的鍵值對
? ? -session跟cookie有什么關系呢?把key,以cookie的形式,存到瀏覽器中
? ? ?? ?{111:{name:lqz,age:19,password:123},222:{name:zs,age:19,password:666}}
? ??????sessionid:111
# 當前瀏覽器以后再發請就會攜帶過來
? ? -我們根據帶過來的cookie 111----》 從 session中取出對應的數據
# session的使用:?

????????必須要先遷移表, session存在服務端的, 默認情況下存在, django-session表中
配置文件:

SESSION_ENGINE = 'django.contrib.sessions.backends.db'
# django項目有兩套配置文件:內置一套,項目自己一套

# django-session表的字段:
????????session_key: ? ? ?sessionid:隨機字符串
????????session_data:? 真正的數據(加密了)
????????expire_date: ? ? 過期時間

request.session.get()  # 取值
request.session['name']='lqz'   # 賦值

# session的本質執行原理:
1 咱么寫了request.session['name']='lqz',本質就是向session 對象中放入了name=lqz
2 當前視圖函數結束---->經過 【中間件】------>返回給了前端
? ? ? ?django 內置了一個session中間件
? ? ? ?判斷:request.session 有沒有變化,如果有變化
# 情況一:django-session表中沒有數據
在表中創建出一條數據,隨機生成一個字符串[隨機字符串session_key],把數據存入django-session表
? ? ? ? ? ?session_key:adsfasd
? ? ? ? ? ?session_data: name=lqz ?加密后存到里面
? ? ? ? ? ??sessionid:adsfasd? ?把隨機字符串寫入到cookie中
# 情況二:django-session表中有數據
把session中所有的值加密后, 更新到django-session表的session_data中,其他不變? ? ? ?
3 下次 再發請求進入任意視圖函數---》又會經過【中間件】---》視圖函數
? ? ? ? 視圖函數中取session:request.session.get('age')
? ? ? ? 瀏覽器發請求(攜帶cookie過來)---》到了中間件---》根據sessionid取出隨機字符串
? ? ? ? 拿著隨機字符串去django-session中查【session_key】---》 能查到就把 session_data的數據解密---》放到request.session中

????????無則添加,有則更新,請求來,取出隨機字符串對比,正確則解密
? ? ? ? 后續視圖函數中,才能取出值

session的中間件把上述內容完成了:

procee_request ? process_response
django.contrib.sessions.middleware.SessionMiddleware

# 配置session 存放路徑(未完成,需要你完成)

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH='c://xxx/x'
SESSION_COOKIE_NAME = 'xxx'
from django.conf import settings
from django.contrib.sessions.backends import?

中間件

# 概念:中間件是介于request與response處理之間的一道處理過程,能在全局上改變django的輸入與輸出。因為改變的是全局,所以需要謹慎實用,用不好會影響到性能
# 作用:
?? ?1 全局的請求攔截---》如果它沒有登錄---》就不允許訪問
? ? 2 攔截所有請求,獲取請求的ip地址
? ? 3 記錄所有用戶的訪問日志
? ? 4 統一在響應頭中加數據? ??
# 代碼上:就是一個類,類中有幾個方法

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',# session相關的中間件'django.contrib.sessions.middleware.SessionMiddleware',# 公共中間件---》訪問不帶 / 路徑,如果有 帶 / 的路徑,他會讓你重定向到這個地址'django.middleware.common.CommonMiddleware',# csrf認證 ? ?xss ?cors'django.middleware.csrf.CsrfViewMiddleware',# 認證:request.user--->這個中間件做的'django.contrib.auth.middleware.AuthenticationMiddleware',# django的消息框架---》flask--》閃現'django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 自定義中間件來使用,記錄用戶的請求地址和user-agent

class SaveRemoteAddr(MiddlewareMixin):def process_request(self, request):# request 是WSGIRequest 的對象# print(request.session) # 一定要保證,session的中間件要在上面# 這個request 就是當次請求的request# 取出ipip = request.META.get('REMOTE_ADDR')user_agent = request.META.get('HTTP_USER_AGENT')print(ip)print(user_agent)# return HttpResponse('不讓你看了') # 不會再走視圖函數了

#? 能返回的情況:
?????????1 None,表示執行完這個代碼,經過中間件,繼續執行,最后進視圖函數
?????????2 四件套,后續不走了,中間件的process_response---》直接返回給瀏覽器了
# 中間件,在響應頭加入訪問時間:

import datetime
class AddHeaderMiddleWare(MiddlewareMixin):def process_response(self, request, response):# request中有沒有session? 有# request 如果在視圖函數中,往request中放了值,在這里,就可以取出來 request.xxx# print(request.xxx)# 所有cookie中都帶# response.set_cookie('xxxxx', 'asdfds')# 寫入到響應頭,訪問服務端的時間response['ttt'] = datetime.datetime.now()return response ?# 一定要返回response對象

csrf認證相關

# 概念:csrf是跨站請求偽造
# 攻擊原理:
?? ?-在同一個瀏覽器中,如果登錄了A網站,沒有退出,在B網站中,向A網站發送請求,瀏覽器會自動攜帶A網站的cookie,對于A網站后端來講, 它就分辨不清到底是用戶真實發的請求,還是黑客網站發的請求【都會攜帶用戶真實的cookie】
# 如何防范:
? ?django解決了這個問題,只要發送post請求,必須攜帶一個csrf_token 隨機字符串(后端給的)
# 這個隨機字符串可以帶的位置:
? ? ?? ?1 請求體中(urlencoded,form-data):{csrfmiddlewaretoken:asdfasdf}
? ? ? ? 2 放在請求頭中:'X-CSRFToken':asdfasdfasd
? ? ? ? 3 ajax提交數據:默認是urlencoded,放在請求體中沒有任何問題

? ? ? ? ?$.ajax({method: 'post',data: {username, password, csrfmiddlewaretoken},success: function (res) {console.log(res)}})

????????? 4 ajax提交,使用json格式---》就不能放在請求體中,只能放在請求頭中:

 $.ajax({method: 'post',headers:{'X-CSRFToken':csrfmiddlewaretoken},contentType: 'application/json',data: JSON.stringify({username, password}),success: function (res) {console.log(res)}})

# post 提交的數據,都是從request.POST中取,前提是:必須是urlencoded和form-data格式
# 如果使用ajax發送請求:?
?? ?????????????????redirect ?render就用不了了
? ? ????????????????盡量使用JsonResponse

Auth的使用

# 概念:Auth就是django 的一個app,做用戶管理
# 作用:Auth模塊是Django自帶的用戶認證模塊
????????我們在開發一個網站的時候,無可避免的需要設計實現網站的用戶系統。此時需要實現包括用戶注冊、用戶登錄、用戶認證、注銷、修改密碼等功能,這還真是個麻煩的事情呢。

Django作為一個完美主義者的終極框架,當然也會想到用戶的這些痛點。它內置了強大的用戶認證系統–auth,它默認使用 auth_user 表來存儲用戶數據

# 默認的用戶表示auth_user創建一個用戶:可以用代碼,可以用命令
# 模塊常用方法:
authenticate():一般需要username 、password兩個關鍵字參數

????????提供了用戶認證功能,即驗證用戶名以及密碼是否正確,如果認證成功(用戶名和密碼正確有效),便會返回一個 User 對象, authenticate()會在該 User 對象上設置一個屬性來標識后端已經認證了該用戶,且該信息在后續的登錄過程中是需要的。

user = authenticate(username='usernamer',password='password')

login(HttpRequest, user):

????????登錄認證通過,調用一下這個方法,以后從request.user中才能取出當前登錄用戶

logout(request): 退出,一定要調用

is_authenticated():

????????判斷當前用戶是否登錄--不能使用request.user 是否有值來判斷,因為他一直有值

request.user.is_authenticated()

orm的鏈接方式

django的orm的 __ 鏈表,使用什么鏈接方式?

????????在Django ORM中,雙下劃線連接語法本身并不直接對應特定的SQL連接類型。當使用雙下劃線時,Django ORM會根據模型之間的關系和查詢的具體情況自動選擇適當的SQL連接方式,包括INNER JOIN、LEFT OUTER JOIN等。
????????在實際使用中,我們通常涉及到 INNER JOIN(內連接)和 LEFT OUTER JOIN(左連接),因為這兩者是最常見的連接方式。INNER JOIN 用于匹配兩個表中符合條件的行,而 LEFT OUTER JOIN會返回左表中的所有行,以及右表中與左表匹配的行。

中間件+logru案例

記錄用戶訪問所用接口用的時間---》記錄到日志中---》logru---》打印出來即可

????????- ip ?user-agent ?total_time

pip install loguru  # 安裝loguru模塊
middle_key.py
from django.utils.deprecation import MiddlewareMixin
from app01 import models
from loguru import logger
import datetimeclass MyMiddlew(MiddlewareMixin):def process_request(self, request):addr = request.META.get('REMOTE_ADDR')llq = request.META.get('HTTP_USER_AGENT')request.time = datetime.datetime.now()models.ShuJu.objects.create(ShuJu_REMOTE_ADDR=addr, user_agent=llq)logger.add('runtime_{time}.log', retention=10)   # 文件名,創十個logger.info('進入時間為:{}', request.time)def process_response(self, request, response):to_time = datetime.datetime.now()time = to_time - request.timeprint(time)logger.warning('結束時間{}', time)return response

auth模塊案例

如果用戶登錄了,打印用戶的用戶名
log.info('')

# 遷移auth表格
python manage.py createsuperuser
from django.contrib import auth
from loguru import logger
def demo01(request):if request.method == 'GET':return render(request, 'caojiyh.html')else:username = request.POST.get('username')password = request.POST.get('password')print(password)user = auth.authenticate(request, username=username, password=password)print(user)if user:auth.login(request, user)user=request.userlogger.info('用戶名是{}', user)print(request.user)return redirect('/home/')else:return render(request, 'caojiyh.html', {'error': '用戶名或密碼錯誤'})

IP訪問頻率限制案例

基礎版:總共能訪問5次(數據庫,session)

高級版:做IP訪問頻率限制,一分鐘只能訪問5次

今日思維導圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208904.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208904.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208904.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32單片機項目實例:基于TouchGFX的智能手表設計(3)嵌入式程序任務調度的設計

STM32單片機項目實例:基于TouchGFX的智能手表設計(3)嵌入式程序任務調度的設計 目錄 一、嵌入式程序設計 1.1輪詢 1.2 前后臺(中斷輪詢) 1.3 事件驅動與消息 1.3.1 事件驅動的概念 1.4 定時器觸發事件驅動型的任…

golang游戲服務器 - tgf系列課程02

環境準備和服務創建 課程介紹了TGF框架的前期的準備工作,啟動一個websocket網關服務,和大廳邏輯節點。 文章最后附有項目案例地址和視頻教程地址,下期預告等信息安裝第三方軟件 tgf框架的服務發現依賴于Consul,所以我們需要先安裝并啟動Consul官網安裝 :訪問官網下載對應的包…

點云從入門到精通技術詳解100篇-針對三維點云分類神經網絡模型的不可感知對抗攻擊

目錄 前言 國內外研究現狀 三維點云分類神經網絡 三維點云傳統攻擊方法

C/C++ 實現動態資源文件釋放

當我們開發Windows應用程序時,通常會涉及到使用資源(Resource)的情況。資源可以包括圖標、位圖、字符串等,它們以二進制形式嵌入到可執行文件中。在某些情況下,我們可能需要從可執行文件中提取自定義資源并保存為獨立的…

vivado時序方法檢查7

TIMING-25 &#xff1a; 千兆位收發器 (GT) 上的時鐘波形無效 收發器輸出管腳 <pin_name> 上或連接到該管腳的信號線上定義的時鐘 <clock_name> 的波形與收發器設置不一 致&#xff0c; 或者缺少參考時鐘定義。自動衍生時鐘的周期為 <PERIOD> &#xf…

物聯網后端個人第十四周總結

物聯網方面進度 1.登陸超時是因為后端運行的端口和前端監聽的接口不一樣&#xff0c;所以后端也沒有報錯&#xff0c;將二者修改一致即可 2.登錄之后會進行平臺的初始化&#xff0c;但是初始化的時候會卡住,此時只需要將路徑的IP端口后邊的內容去掉即可 3.閱讀并完成了jetlinks…

通過誤差改變控制的兩種策略

如果反饋誤差越來越大&#xff0c;需要改變調節方向以減小誤差并實現更好的控制。以下是兩種常見的調節方向改變的方法&#xff1a; PID控制器中的積分限制&#xff1a;在PID控制中&#xff0c;積分項可以用來減小穩態誤差。然而&#xff0c;當反饋誤差持續增大時&#xff0c;積…

浪潮信息:數字化轉型的策略與實踐

在數字化浪潮的推動下&#xff0c;浪潮信息正致力于將計算創新推向新的高度。作為科技發展的排頭兵&#xff0c;浪潮信息深知算力的重要性&#xff0c;因此不斷探索前所未有的解決方案。在這個過程中&#xff0c;浪潮信息的研發人員和科技工作者如同探險家&#xff0c;勇敢地迎…

RocketMQ安裝和使用

RocketMQ快速入門 下載RocketMQ 下載地址 環境要求 Linux64位系統 JDK1.8(64位) 安裝RocketMQ 解壓 unzip rocketmq-all-4.4.0-bin-release.zip啟動RocketMQ 啟動NameServer # 1.啟動NameServer nohup sh bin/mqnamesrv & # 2.查看啟動日志 tail -f ~/logs/rocke…

學會用bash在linux寫腳本 (二)

接著上一章繼續 數值的對比 判斷語句 循環語句 22.5 比較、對比、判斷 在寫腳本時&#xff0c;有時需要做一些比較&#xff0c;例如&#xff0c;兩個數字誰大誰小&#xff0c;兩個字符串是否相同等。 做對比的表達式有[]、[[]]、test&#xff0c;其中[]和 test這兩種表達式的…

如何通過3000個傳感器幫助大型大學附屬醫院實現遠程環境監測?

得益于ELPRO提供的可擴展、可信賴和可靠的環境監測解決方案&#xff0c;一家領先的大學研究醫院系統在COVID-19新冠肺炎大流行初始迅速為員工遠程工作做好了準備。 在本案例研究中&#xff0c;您將了解大城市的一家大型大學附屬醫院如何做到&#xff1a; 建立了遠程溫度控制數…

身份統一管理創新與優化 ——華為云OneAccess應用身份管理服務的2023年

2023年&#xff0c;隨著云計算、物聯網、人工智能等技術的快速發展&#xff0c;企業面臨著數字化轉型的巨大挑戰與機遇。身份統一管理是企業數字化轉型的基礎&#xff0c;也是業務發展的關鍵。如何高效、安全、靈活地實現身份統一管理&#xff0c;成為企業亟待解決的首要課題。…

解決MySQL字段名與關鍵字沖突

如果字段名與MySQL內部關鍵字相同&#xff0c;可能會導致語法錯誤、數據訪問問題甚至系統崩潰。 1、避免使用MySQL關鍵字作為字段名。 2、使用反引號&#xff08;backticks&#xff09;&#xff1a; 如果使用一個與MySQL關鍵字相同的字段名&#xff0c;可以使用反引號將其括起…

boost-字符串處理-判斷-查找-裁剪-刪除-替換-分割-合并

文章目錄 1.判斷1.1.equals1.2.all1.3.starts_with1.4.ends_with1.5.contains 2.大小寫轉換3.字符串刪除4.字符串替換5.字符串查找6.字符串修剪7.字符串分割8.字符串合并9.總結 1.判斷 判別式函數和分類函數大多數都是以is_開頭&#xff0c;這些函數如下&#xff1a; 判別式函…

ElasticSearch之線程池

ElasticSearch節點可用的CPU核的數量&#xff0c;通常可以交給ElasticSearch來自行檢測和判定&#xff0c;另外可以在elasticsearch.yml中顯式指定。樣例如下&#xff1a; node.processors: 2如下表格中的processors即CPU核的數量。 線程池的列表 線程池名稱類型線程數量隊列…

屏蔽百度首頁推薦和熱搜的實戰方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…

電視節目中活動滅燈系統是如何實現的

活動滅燈系統主要用于各種需要亮燈或滅燈的活動節目&#xff0c;如招聘滅燈、相親滅燈等。有多種燈光顏色供選擇&#xff0c;本設備通過按鈕燈軟件組合實現&#xff0c;用戶可以自己設置亮燈或滅燈規則。 軟件功能&#xff1a; 1、后臺統一控制亮燈&#xff0c;重新開始下輪…

華為交換機基本配置

一、配置時間 sys ntp-service unicast-server 192.168.1.1 ntp-service unicast-server 192.168.1.2 clock timezone UTC add 8 clock timezone CST add 08:00:00 undo ntp-service disable q手動設置一個時間 clock datetime 13:43:00 2023-10-10save ysys保存&#xff01;保…

某60內網滲透之域管權限維持[金票利用]

內網滲透 文章目錄 內網滲透域管權限維持【金票利用】實驗目的實驗環境實驗工具實驗原理實驗內容域管權限維持【金票利用】實驗步驟攻擊域管權限維持【金票利用】 實驗目的 讓學員通過該系統的練習主要掌握:利用金票來維持域管理員的權限。 實驗環境 操作機 Windows 7,域…

微信小程序 - 格式化操作 moment.js格式化常用使用方法總結大全

格式化操作使用 1. 首先&#xff0c;下載一個第三方庫 moment npm i moment --save 注&#xff1a;在微信小程序中無法直接npm 下載 導入 的&#xff08;安裝一個就需要構建一次&#xff09; 解決&#xff1a;菜單欄 --> 工具 --> 構建 npm 點擊即可&#xff08;會…