django利用中介軟體及session優化登入

2021-09-26 09:04:32 字數 2689 閱讀 9464

建立目錄及.py檔案命名如圖

.py檔案中**如下

from django.utils.deprecation import middlewaremixin

from django.shortcuts import redirect

# 白名單

# /: 表示訪問**的首頁

white_list = ['/seller/login/', '/seller/register/', '/']

class authmd(middlewaremixin):

def process_request(self, request):

# 1. 獲取url路徑部分

path_info = request.path_info

print(path_info)

# 2. 進行判斷

# 如果路徑在白名單中就放行

if path_info in white_list:

return

# 如果是買家訪問,全部放行

if path_info.find('/buyer/') != -1:

print('放行...。。。。')

return

# 3. 判斷是否登入了,如果登入了,則放行

username = request.session.get('username')

if username:

return

# 4. 如果不在白名單和沒有登入則重定向到 登入頁面。

return redirect('/seller/login/')

在setting中註冊中介軟體,如圖

優化登入登出views

# 登入

class loginform(forms.form):

username = forms.charfield(

label='使用者名稱',

required=true,

min_length=3,

widget=widgets.textinput(attrs=)

)password = forms.charfield(

label='密碼',

required=true,

min_length=6,

widget=widgets.passwordinput(attrs=)

)# 登入驗證

def login(request):

loginform = loginform()

if request.method == 'post':

loginform = loginform(request.post)

if loginform.is_valid():

# 1. 獲取表單提交過來的內容

data = loginform.cleaned_data

username = data.get('username')

password = data.get('password')

# 2. 先加密

password = pwd_jm(password)

# 3. 驗證

ret = models.seller.objects.filter(name=username, password=password)

# print(ret)

if ret:

# 登入成功後將使用者名稱儲存到session中,用於首頁的顯示和後期的操作

request.session['username'] = username

request.session['seller_id'] = ret[0].id

# 如果成功,跳轉到首頁

return redirect('/seller/index/')

# 如果不成功,重新跳轉到登入頁面

return render(request, 'seller/login.html', )

# 首頁

def index(request):

# 獲取登入時間

times = datetime.datetime.now()

# 獲取頭像

seller_id = request.session.get('seller_id')

seller_obj = models.seller.objects.get(id=seller_id)

return render(request, 'seller/index.html', locals())

# 登出

# @login_decorator

def logout(request):

# 1. 清除session

request.session.clear()

# 2.重定向到登入介面

return redirect('/seller/login/')

一開始我還用了裝飾器優化

Django 中介軟體

django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...

Django中介軟體

給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...

Django中介軟體

什麼是中介軟體?django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了django框架的健壯性。我們可以使用中介軟體,在django處理檢視的不同階段對輸入或輸出進行...