国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制

這篇具有很好參考價(jià)值的文章主要介紹了Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、用戶認(rèn)證系統(tǒng)

  • Django內(nèi)置一個(gè)用戶認(rèn)證系統(tǒng),使用auth模塊實(shí)現(xiàn)。
  • auth模塊提供了登錄、注冊(cè)、效驗(yàn)、修改密碼、注銷、驗(yàn)證用戶是否登錄等功能。
    Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux
  • Django默認(rèn)創(chuàng)建的數(shù)據(jù)庫表。
表名 作用
auth_user 用戶表
auth_user_groups 用戶所屬組的表
auth_user_user_permissions 用戶權(quán)限表
auth_group 用戶組表
auth_group_permissions 用戶組權(quán)限表
auth_permission 存放全部權(quán)限的表,其他的表的權(quán)限都是從此表中外鍵連接過去的
django_session 保存HTTP狀態(tài)
django_migrations 數(shù)據(jù)庫遷移記錄

二、案例:登陸認(rèn)證

2.1 平臺(tái)登入

1.登陸成功,進(jìn)入平臺(tái)首頁;登陸失敗,返回錯(cuò)誤信息。

###################################################
1、定義url路由規(guī)則,ORM/urls.py文件。
from django.contrib import admin
from django.urls import path,include,re_path
from ORM import views
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^$',views.home),
    path('myapp/',include('myapp.urls')),
    path('login/',views.login)
]
###################################################
2、定義視圖,ORM/views.py文件。
from django.shortcuts import render,HttpResponse,redirect
from django.contrib import auth
def home(request):
    return render(request,'index.html')
def login(request):
    if request.method == "GET":
        return render(request, 'login.html')
    elif request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = auth.authenticate(username=username, password=password)
        if user:
            ##驗(yàn)證通過后,將session信息保存到數(shù)據(jù)庫中。
            auth.login(request, user)   
            return redirect("/")
        else:
            msg = "用戶名或密碼錯(cuò)誤!"
            return render(request,'login.html',{'msg':msg})
###################################################
3、定義html模板,templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>管理后臺(tái)頁面</title>
</head>
<body>
<ht>歡迎訪問管理后臺(tái)</ht>
<form action="" method="post">
    用戶名 : <input type="text" name="username"><br>
    密碼 : <input type="text" name="password"><br>
    <button type="submit">登錄</button>
    <span style="color: red">{{ msg }}</span>
</form>
</body>
</html>
###################################################
4、平臺(tái)首頁渲染模板templates/index.html,新增”退出登錄“按鈕。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>平臺(tái)首頁</title>
</head>
<body>
<h1>網(wǎng)站首頁</h1>
<a href="/logout"><button>退出登錄</button></a>
</body>
</html>

2.進(jìn)入django管理后臺(tái),新增一個(gè)測(cè)試用戶xiaoming,添加auth權(quán)限。
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux
3.測(cè)試效果。
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

2.2 平臺(tái)登出

  • 就是清空django_session表中記錄的用戶登錄狀態(tài)信息,若數(shù)據(jù)存在該表中,則認(rèn)定處于登陸狀態(tài);刪除數(shù)據(jù),則認(rèn)定登出。

1.退出登錄,返回到登陸頁面。

###################################################
1、定義url路由規(guī)則,ORM/urls.py文件。
from django.contrib import admin
from django.urls import path,include,re_path
from ORM import views
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^$',views.home),
    path('myapp/',include('myapp.urls')),
    path('login/',views.login),
    path('logout/',views.logout),   ##新增url
]
###################################################
2、新增視圖,ORM/views.py文件。
def logout(request):
    # 清除當(dāng)前用戶的session信息
    auth.logout(request)
    return redirect('/login')

2.3 login_required裝飾器

  • login_required裝飾器:判斷用戶是否登錄,如果沒有登錄引導(dǎo)至登錄頁面,登錄成功后跳轉(zhuǎn)到目的頁面。

1.在settings.py文件設(shè)置沒有登錄默認(rèn)跳轉(zhuǎn)頁面。

##文件末尾添加。
LOGIN_URL = '/login/'

2.在需要登錄后才能訪問頁面的視圖添加裝飾器。

from django.contrib.auth.decorators import login_required

@login_required()    ##語法糖引用裝飾器。
def user_add(request):
      ......
      ......

3.效果驗(yàn)證。
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

三、Django Session管理

Session與Cookie是什么?

  • 網(wǎng)站采用是HTTP協(xié)議,它本身就是一個(gè)無狀態(tài)的,記不住我們上次來瀏覽器上做了什么事。
  • 這時(shí),服務(wù)器給每個(gè)用戶貼了一個(gè)小紙條,上面記錄了服務(wù)器給我們返回的一些信息。后面服務(wù)器看到這張小紙條就知道我們是誰了。
  • 這個(gè)小紙條就是Cookie。

Cookie工作原理:

  1. 瀏覽器第一次訪問服務(wù)器時(shí),服務(wù)器此時(shí)肯定不知道它的身份,所以創(chuàng)建一個(gè)獨(dú)特的身份標(biāo)識(shí)數(shù)據(jù),格式為key=value,放入到Set-Cookie字段里,隨著響應(yīng)報(bào)文發(fā)給瀏覽器。
  2. 瀏覽器看到有Set-Cookie字段以后就知道這是服務(wù)器給的身份標(biāo)識(shí),于是就保存起來,下次請(qǐng)求時(shí)會(huì)自動(dòng)將此key=value值放入到Cookie字段中發(fā)給服務(wù)器。
  3. 服務(wù)器收到請(qǐng)求報(bào)文后,發(fā)現(xiàn)Cookie字段中有值,就能根據(jù)此值識(shí)別用戶的身份然后提供個(gè)性化的服務(wù)。
    Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

Session的作用:

  • 試想一下,如果將用戶賬戶的一些信息都存入Cookie中的話,一旦信息被攔截,那么所有的賬戶信息都會(huì)可能被泄露丟,這是不安全的。
  • 所以就出現(xiàn)了Session,在一次會(huì)話中將重要信息保存在Session中,瀏覽器只記錄SessionId,一個(gè)SessionId對(duì)應(yīng)一次會(huì)話請(qǐng)求。
    Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

3.1 Django使用Session

3.1.1 Cookie用法

  • 在settings.py配置文件中設(shè)置客戶端Cookie。
參數(shù) 描述
SESSION_COOKIE_NAME = “sessionid” Session的cookie保存在瀏覽器上時(shí)的key
即:sessionid=隨機(jī)字符串(默認(rèn))
SESSION_COOKIE_PATH = “/” Session的cookie保存的路徑(默認(rèn))
SESSION_COOKIE_DOMAIN = None Session的cookie保存的域名(默認(rèn))
SESSION_COOKIE_SECURE = False 是否Https傳輸cookie(默認(rèn))
SESSION_COOKIE_HTTPONLY = True 是否Session的cookie只支持http傳輸(默認(rèn))
SESSION_COOKIE_AGE = 1209600 Session的cookie失效日期(2周)(默認(rèn))
SESSION_EXPIRE_AT_BROWSER_CLOSE = False 是否關(guān)閉瀏覽器使得Session過期(默認(rèn))
SESSION_SAVE_EVERY_REQUEST = False 是否每次請(qǐng)求都保存Session,默認(rèn)修改之后才保存(默認(rèn))

1.設(shè)置Cookie過期時(shí)間,單位s。

##ORM/settings.py文件末尾添加此行。
SESSION_COOKIE_AGE = 30*60

Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

2.設(shè)置關(guān)閉瀏覽器使得Session過期。

##ORM/settings.py文件末尾添加此行。
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

3.1.2 Session用法

  • 在視圖中操作Session。
參數(shù) 描述
request.session[‘key’] = value 向Session寫入鍵值
request.session.get(‘key’,None) 獲取Session中鍵的值
request.session.flush() 清除Session數(shù)據(jù)
request.session.set_expiry(value) Session過期時(shí)間

1.自定義向Session寫入鍵值,前端可以拿到該value值。
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

3.2 案例:用戶登錄認(rèn)證

1.自己實(shí)現(xiàn)登陸驗(yàn)證功能。

############################################################################
##根據(jù)上文內(nèi)容,將login接口試圖修改成如下內(nèi)容。
def login(request):
    if request.method == "GET":
        return render(request, 'login.html')
    elif request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username =="qingjun" and password == "citms@123":
            #登錄成功,is_login設(shè)置為True
            request.session['is_login'] = True  
            request.session[ 'username'] = username   #保存用戶名到數(shù)據(jù)庫。
            return redirect("/")
        else:
            msg ="用戶名或密碼錯(cuò)誤 !"
            return render(request,'login.html',{'msg': msg})

############################################################################
1、定義裝飾器,可以給其他視圖引用,新增文件ORM/main.py。
from django.shortcuts import render,HttpResponse,redirect
def self_login_required(func):
    def inner(request):
        is_login = request.session.get('is_login', False)
        if is_login:
            return func(request)
        else:
            return redirect("/login")
    return inner
############################################################################
2、引用裝飾器。
from ORM.main import self_login_required
@self_login_required
def home(request):
    return render(request, 'index.html')

2.查看效果。
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux

四、Django CSRF安全防護(hù)機(jī)制

概念:

  • CSRF(Cross Site Request Forgery):跨站請(qǐng)求偽造,實(shí)現(xiàn)的原理是CSRF攻擊者在用戶已經(jīng)登錄目標(biāo)網(wǎng)站之后,誘使用戶訪問一個(gè)攻擊頁面,利用目標(biāo)網(wǎng)站對(duì)用戶的信任,以用戶身份在攻擊頁面對(duì)目標(biāo)網(wǎng)站發(fā)起偽造用戶操作的請(qǐng)求,達(dá)到攻擊目的。

Django怎么驗(yàn)證一個(gè)請(qǐng)求是不是CSRF?

  • Django處理客戶端請(qǐng)求時(shí),會(huì)生成一個(gè)隨機(jī)Token,放到Cookie里一起返回,然后需要前端每次POST請(qǐng)求時(shí)帶上這個(gè)Token,可以放到POST數(shù)據(jù)里鍵為csrfmiddlewaretoken,或者放到請(qǐng)求頭鍵為X-CSRFToken,Django從這兩個(gè)位置取,每次處理都會(huì)攔截驗(yàn)證,通過比對(duì)兩者是否一致來判斷這個(gè)請(qǐng)求是不是非法,非法就返回403狀態(tài)碼。

可以攜帶CSRF Token發(fā)送給服務(wù)端的方法:

  1. from表單添加{% csrf_token %}標(biāo)簽,表單會(huì)攜帶一同提交。
  2. 如果你是Ajax請(qǐng)求,需要把csrf token字符串(也是通過拿{% csrf_token %}標(biāo)簽產(chǎn)生的值)放到data里一起提交,并且鍵名為csrfmiddlewaretoken或者放到請(qǐng)求頭傳遞服務(wù)端。
  3. 指定取消某函數(shù)視圖CSRF防護(hù)。

1.Django默認(rèn)啟用CSRF保護(hù)機(jī)制,當(dāng)有post請(qǐng)求時(shí),就會(huì)被攔截。
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux
2.此時(shí)可以給html模板中添加csrf標(biāo)簽,瀏覽器可以其值與表單一起提交給服務(wù)端。
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux
Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制,python開發(fā),django,csrf,安全,python,linux
3.還有其他兩種方式。文章來源地址http://www.zghlxwxcb.cn/news/detail-681257.html

##########################################################
方式2,不建議使用,建議在html模板中添加標(biāo)簽方式返回。
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def index(request):
return render(request, 'index.html')
##########################################################
var csrf_token = $("[name='csrfmiddlewaretoken']").val();
var data = {'id': '123', 'csrfmiddlewaretoken': csrf_token};
$.ajax({
	type: "POST",
	url: "/api",
	data: data,
	dataType: 'json'
})

到了這里,關(guān)于Django基礎(chǔ)7——用戶認(rèn)證系統(tǒng)、Session管理、CSRF安全防護(hù)機(jī)制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python 框架學(xué)習(xí) Django篇 (五) Session與Token認(rèn)證

    Python 框架學(xué)習(xí) Django篇 (五) Session與Token認(rèn)證

    我們前面經(jīng)過數(shù)據(jù)庫的學(xué)習(xí)已經(jīng)基本了解了怎么接受前端發(fā)過來的請(qǐng)求,并處理后返回?cái)?shù)據(jù)實(shí)現(xiàn)了一個(gè)基本的登錄登出效果,但是存在一個(gè)問題,我們是將所有的請(qǐng)求都直接處理了,并沒有去檢查是否為已經(jīng)登錄的管理員發(fā)送的,如果是這樣的話客戶端可以不選擇登錄直接去

    2024年02月07日
    瀏覽(14)
  • 【用戶認(rèn)證】密碼加密,用戶狀態(tài)保存,cookie,session,token

    【用戶認(rèn)證】密碼加密,用戶狀態(tài)保存,cookie,session,token

    認(rèn)證(authentication )是驗(yàn)證你的身份的過程,而授權(quán)(authorization)是驗(yàn)證你有權(quán)訪問的過程 獲取用戶提交的用戶名和密碼 根據(jù)用戶名,查詢數(shù)據(jù)庫,獲得完整的用戶信息,包括真正的密碼 比較提交的密碼和查詢到的密碼 如果二者相等,則用戶認(rèn)證成功;否則用戶認(rèn)證失敗

    2024年02月12日
    瀏覽(25)
  • 【Django學(xué)習(xí)】(十六)session_token認(rèn)證過程與區(qū)別_響應(yīng)定制

    【Django學(xué)習(xí)】(十六)session_token認(rèn)證過程與區(qū)別_響應(yīng)定制

    這里就直接引用別人的文章,不做過多說明 網(wǎng)絡(luò)應(yīng)用中session和token本質(zhì)是一樣的嗎,有什么區(qū)別? - 知乎 在全局配置表中配置 rest_framework_jwt/views.py中 ? ?查看ObtainJSONWebToken類: 發(fā)現(xiàn)里面引用了JSONWebTokenSerializer序列化器類 ??users應(yīng)用的url.py 引用obtain_jwt_token ?發(fā)現(xiàn)rest_fra

    2024年02月15日
    瀏覽(17)
  • Django基礎(chǔ)入門:后臺(tái)管理 超級(jí)用戶 數(shù)據(jù)表注冊(cè)操作③

    Django基礎(chǔ)入門:后臺(tái)管理 超級(jí)用戶 數(shù)據(jù)表注冊(cè)操作③

    ??????個(gè)人簡(jiǎn)介:以山河作禮。 ??????: Python領(lǐng)域新星創(chuàng)作者,CSDN實(shí)力新星認(rèn)證,阿里云社區(qū)專家博主 ????:Web全棧開發(fā)專欄:《Web全棧開發(fā)》免費(fèi)專欄,歡迎閱讀! ????: 文章末尾掃描二維碼可以加入粉絲交流群,不定期免費(fèi)送書。 Django 的后臺(tái)管理系統(tǒng)是非常出

    2024年02月11日
    瀏覽(89)
  • 萬字講解9種Web應(yīng)用攻擊與防護(hù)安全。XSS、CSRF、SQL注入等是如何實(shí)現(xiàn)的

    萬字講解9種Web應(yīng)用攻擊與防護(hù)安全。XSS、CSRF、SQL注入等是如何實(shí)現(xiàn)的

    OWASP(開放Web軟體安全項(xiàng)目- Open Web Application Security Project) 是一個(gè)開源的、非盈利的全球性安全組織,致力于應(yīng)用軟件的安全研究。使命 是使應(yīng)用軟件更加安全,使企業(yè)和組織能夠?qū)?yīng)用安全風(fēng)險(xiǎn)做出更清晰的決策。 http://www.owasp.org.cn/ OWASP在業(yè)界影響力: OWASP被視為web應(yīng)用

    2023年04月15日
    瀏覽(20)
  • 【Django用戶認(rèn)證】通過阿里云如何實(shí)現(xiàn)實(shí)名認(rèn)證

    【Django用戶認(rèn)證】通過阿里云如何實(shí)現(xiàn)實(shí)名認(rèn)證

    我最近在我的項(xiàng)目上有實(shí)名認(rèn)證的需求,主要實(shí)現(xiàn)人名和身份證號(hào)碼的驗(yàn)證,針對(duì)這一塊具體怎么做的文章比較少,我解決問題之后,覺得還是把這些坑都寫清楚,方便初學(xué)者。 網(wǎng)絡(luò)并非法外之地。然而,卻存在部分網(wǎng)絡(luò)用戶利用虛擬的網(wǎng)絡(luò)空間,實(shí)施網(wǎng)絡(luò)暴力、造謠誹謗、

    2024年02月06日
    瀏覽(23)
  • Django用戶認(rèn)證: 利用Django Auth模塊實(shí)現(xiàn)用戶注冊(cè)、登錄與登出

    用戶登錄注冊(cè)屬于用戶認(rèn)證的一部分,Django內(nèi)置了一套用戶認(rèn)證體系,使用起來比較方便,而且支持用戶定制和拓展,足以滿足任何復(fù)雜的業(yè)務(wù)需求。 Django框架中,用戶權(quán)限管理被劃分為三個(gè)層次: 用戶 :系統(tǒng)使用者,擁有自己的權(quán)限??杀灰粋€(gè)或多個(gè)用戶組包含。 用戶組

    2023年04月20日
    瀏覽(26)
  • django authenticate--用戶身份認(rèn)證

    authenticate Django的contrib.auth模塊中的authenticate()函數(shù)用于對(duì)用戶的憑據(jù)進(jìn)行身份驗(yàn)證,與已配置的身份驗(yàn)證后端進(jìn)行比較。 當(dāng)用戶嘗試登錄時(shí),authenticate()函數(shù)將使用用戶的憑據(jù)(即用戶名和密碼)作為參數(shù)進(jìn)行調(diào)用,該函數(shù)然后檢查可用的身份驗(yàn)證后端以驗(yàn)證憑據(jù),這些后端在

    2024年02月05日
    瀏覽(23)
  • 最強(qiáng)的單點(diǎn)登錄認(rèn)證系統(tǒng),基于RBAC統(tǒng)一權(quán)限控制,實(shí)現(xiàn)用戶生命周期管理,開源、安全

    最強(qiáng)的單點(diǎn)登錄認(rèn)證系統(tǒng),基于RBAC統(tǒng)一權(quán)限控制,實(shí)現(xiàn)用戶生命周期管理,開源、安全

    MaxKey 單點(diǎn)登錄認(rèn)證系統(tǒng),諧音馬克思的鑰匙寓意是最大鑰匙,是 業(yè)界領(lǐng)先的IAM-IDaas身份管理和認(rèn)證產(chǎn)品 ,支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等標(biāo)準(zhǔn)協(xié)議,提供 安全、標(biāo)準(zhǔn)和開放 的用戶身份管理(IDM)、身份認(rèn)證(AM)、單點(diǎn)登錄(SSO)、RBAC權(quán)限管理和資源管理等。 MaxKey注

    2024年02月03日
    瀏覽(20)
  • 3-1. SpringBoot項(xiàng)目集成【用戶身份認(rèn)證】實(shí)戰(zhàn) 【技術(shù)選型篇】基于Session、Token、JWT怎么選?

    3-1. SpringBoot項(xiàng)目集成【用戶身份認(rèn)證】實(shí)戰(zhàn) 【技術(shù)選型篇】基于Session、Token、JWT怎么選?

    通過第二章2-2. SpringBoot API開發(fā)詳解 --SpringMVC注解+封裝結(jié)果+支持跨域+打包,我們實(shí)現(xiàn)了基于SpringBoot項(xiàng)目的 API接口開發(fā) ,并實(shí)現(xiàn) API結(jié)果統(tǒng)一封裝、支持跨域請(qǐng)求 等等功能,接下來開始第三章,主要做用戶身份認(rèn)證,主要實(shí)現(xiàn)一套 統(tǒng)一鑒權(quán)的用戶身份認(rèn)證的機(jī)制 。 我已經(jīng)提

    2024年01月22日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包