day01 管理員登入與資料統計

2021-10-09 19:37:08 字數 4613 閱讀 5357

《一》: 準備工作:

1:安裝djangorestframework-jwt拓展

pip install djangorestframework-jwt
rest_framework =

jwt_auth =

思路:新建乙個序列化器的包:serializers, 然後在裡面定義序列化器。 首先第乙個登入介面,我們需要序列化器對我們的username,和password 進行校驗。校驗流程: 先對username和password進行常規校驗,如果校驗成功,使用自定義登入後端對使用者名稱密碼進行校驗,這個時候就需要自定義校驗了,可以採用最終的校驗:validate(self,attr)這個函式進行校驗,如果校驗失敗,需要drf丟擲異常:validatederror , 如果校驗成功,則接下來需要給使用者辦法令牌。令牌的頒發需要使用:

from rest_framework_jwt.utils import jwt_payload_handler,jwt_encode_handler

from django.contrib.auth import authenticate

from rest_framework import serializers

# 目的定義乙個序列化器對username 和password進行校驗

# 這裡由於不設及模型類所以繼承serializers.serializer

from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler

class

loginserializer

(serializers.serializer)

:

username = serializers.charfield(required=

true),

password = serializers.charfield(required=

true),

# 接下來要使用登陸驗證後端來校驗使用者名稱和密碼,此時就需要自定義校驗---採用最終的校驗

defvalidate

(self, attrs)

:# 由於傳入的是使用者名稱和密碼的字典格式,所以可以直接拆包

user = authenticate(

**attrs)

if user is

none

:raise serializers.validationerror(

"使用者名稱或者密碼錯誤!!!"

)# 如果校驗成功,那麼就要給顧客辦法令牌

# 傳入使用者物件,得到荷載物件

payload = jwt_payload_handler(user)

# 傳入荷載物件,得到令牌物件

tocken = jwt_encode_handler(payload)

return

from rest_framework.response import response

from rest_framework.views import apiview

# 需要繼承哪個呢?---不需要對資料進行增刪改查,所以只需繼承apiview

class

loginview

(apiview)

:def

post

(self, request)

: serializer = loginserializer(data=request.data)

# 傳入raise_exception表示如果校驗失敗則丟擲異常

serializer.is_valid(raise_exception=

true

)return response(

)

from django.urls import re_path

# obtain_jwt_token為拓展外掛程式提供的用於驗證使用者名稱和密碼並簽發token的檢視

from rest_framework_jwt.views import obtain_jwt_token

from

.views.login_views import

*urlpatterns =

[# re_path(r'^authorizations/$', loginview.as_view()),

re_path(r'^authorizations/$'

, obtain_jwt_token)

,]

2:新建meiduo_mall/utils/jwt_response_handlers.py模組,自定義obtain_jwt_token檢視中用於構造響應的函式

def

jwt_response_payload_handler

(token, user=

none

, request=

none):

return

3:編輯dev.py:

jwt_auth =

《四》: 前端儲存tocken的方式:

1:前端儲存tocken的方式:

localstorage.token = response.data.token;

localstorage.username = response.data.username;

localstorage.user_id = response.data.user_id;

2:

rest_framework_jwt拓展的身份認證後端jsonwebtokenauthentication所約定的前端傳遞token的方式:

this.axios.get(cons.apis +

'/goods/brands/'

+this.edit_id+

'/',

, responsetype:

'json',}

).then(dat=

>

).catch(err=

>

);

4:後端驗證tocken:

rest_framework_jwt拓展外掛程式提供的jsonwebtokenauthentication認證後端自動認證

rest_framework =

核心**:

# todo:判斷是否為管理站點頁面登陸,如果是需要進一步校驗is_staff=true

# 如果是**頁面登陸,request是乙個請求物件

# 如果是管理站點頁面登陸,request是乙個none

if request is

none

andnot user.is_staff:

return

none

# 繼承django預設的傳統認證後端

class

usernamemobileauthbackend

(modelbackend)

:# 重寫authenticate方法

# 原因:預設的authenticate方法,只會根據username欄位去過濾查詢使用者

defauthenticate

(self, request, username=

none

, password=

none

,**kwargs)

:# 允許多賬號登陸的情況下,前端傳來的"username"有可能是使用者名稱也有可能是手機號

try:

# 1、先按使用者名稱查詢

user = user.objects.get(

# username=="18588269037" or mobile=="18588269037"

q(username=username)

| q(mobile=username)

| q(email=username)

)except user.doesnotexist as e:

return

none

# 使用者名稱找不到,返回none表示認證失敗

# todo:判斷是否為管理站點頁面登陸,如果是需要進一步校驗is_staff=true

# 如果是**頁面登陸,request是乙個請求物件

# 如果是管理站點頁面登陸,request是乙個none

if request is

none

andnot user.is_staff:

return

none

# 3、某乙個找到了,再校驗密碼

if user.check_password(password)

:return user

ubuntu 管理員登入問題

摘自 http www.5dlinux.com article 1 2008 linux 20024.html 我們平時以都以我們裝系統時,設定的使用者名稱和密碼登入,你可能就覺得,你是以管理員身份登入的,其實不然,你和普通使用者一樣,幹什麼事都要密碼。此外還有許可權。比如進系統的核心,你就進不去了...

kali啟用root管理員登入

1.啟動kali liunx 進入開機啟動頁面,按鍵盤e鍵進入kali gnu grub頁面 2.在kali gnu grub頁面,選擇linux那一行,將ro 改為 rw 在此行末尾增加 init bin bash 修改完畢以後按ctrl x 鍵進入單使用者模式 3.按ctrl c 進入單使用者模...

jenkins忘記管理員登入密碼

jenkins 管理員的密碼忘記的處理辦法 首先,進入 jenkins 目錄 比如c users administrator jenkins 備份 config.xml 為 config.xml.bak 開啟 config.xml 配置檔案,修改 true 為 false 把 配置刪除。重啟jenk...