1. 程式人生 > >04,認證、許可權、頻率

04,認證、許可權、頻率

 

認證元件

Django原生的authentic元件為我們的使用者註冊與登入提供了認證功能,十分的簡介與強大。同樣DRF也為我們提供了認證元件,一起來看看DRF裡面的認證元件是怎麼為我們工作的! models.py
<wiz_code_mirror>       15           1
# 定義一個使用者表和一個儲存使用者Token的表
2
 
         
         
          
          
           3
           
          
         
 
         
         
          
          
           4
           
          
         
class UserInfo(models.Model):
5
    username = models.CharField(max_length=16)
6
    password = models.CharField(max_length=32)
7
    type = models.SmallIntegerField(
8
        choices=((1, '普通使用者'), (2, 'VIP使用者')),
9
        default=1
10
    )
11
 
         
         
          
          
           12
           
          
         
 
         
         
          
          
           13
           
          
         
class Token(models.Model):
14
    user = models.OneToOneField(to='UserInfo')
15
    token_code = models.CharField(max_length=128)
    url <wiz_code_mirror>       1           1
    path('login/', views.LoginView.as_view()),
    views.py <wiz_code_mirror>       38           1
# 檢視主要處理使用者名稱、密碼是否正確,使用者每一次請求都要帶著專有token來!
2
import hashlib, time
3
from rest_framework.response import Response
4
from rest_framework.views import APIView
5
 
         
         
          
          
           6
           
          
         
 
         
         
          
          
           7
           
          
         
def get_random_token(username):
8
    """
9
    根據使用者名稱和時間戳生成隨機token
10
    :param username:
11
    :return:
12
    """
13
    timestamp = str(time.time())
14
    m = hashlib.md5(bytes(username, encoding="utf8"))
15
    m.update(bytes(timestamp, encoding="utf8"))
16
    return m.hexdigest()
17
 
         
         
          
          
           18
           
          
         
 
         
         
          
          
           19
           
          
         
class LoginView(APIView):
20
    """
21
    校驗使用者名稱密碼是否正確從而生成token的檢視
22
    """
23
    def post(self, request):
24
        res = {"code": 0}
25
        print(request.data)
26
        username = request.data.get("username")
27
        password = request.data.get("password")
28
 
         
         
          
          
           29
           
          
         
        user = models.UserInfo.objects.filter(username=username, password=password).first()
30
        if user:
31
            # 如果使用者名稱密碼正確
32
            token = get_random_token(username)
33
            models.Token.objects.update_or_create(defaults={"token_code": token}, user=user)
34
            res["token"] = token
35
        else:
36
            res["code"] = 1
37
            res["error"] = "使用者名稱或密碼錯誤"
38
        return Response(res)
    定義認證類model_serializer.py <wiz_code_mirror>       18           1
# 這一步是要對著原始碼才能寫出來
2
from rest_framework.authentication import BaseAuthentication
3
from rest_framework.exceptions import AuthenticationFailed
4
 
         
         
          
          
           5
           
          
         
 
         
         
          
          
           6
           
          
         
class MyAuth(BaseAuthentication):
7
    def authenticate(self, request):
8
        if request.method in ["POST", "PUT", "DELETE"]:
9
            request_token = request.data.get("token", None)
10
            if not request_token:
11
                raise AuthenticationFailed('缺少token')
12
            token_obj = models.Token.objects.filter(token_code=request_token).first()
13
            if not token_obj:
14
                raise AuthenticationFailed('無效的token')
15
            return token_obj.user.username, None
16
        else:
17
            return None, None
18
 
         
        
       
      
     
    
   
     
    
   
     
    
   
  
 

 全域性配置
 

 <wiz_code_mirror> 
  
  
    
   
  
    
   
  
    
   
   
    
     
      
       
        
         
         
          4
          
         
        
       
         
        
       
         
        
        
        
          
         
        
        
         
         
           
          
         
           
          
          
          
           1
           
          
         
# 在settings.py中配置
2
REST_FRAMEWORK = {
3
    "DEFAULT_AUTHENTICATION_CLASSES": ["app01.utils.MyAuth", ]
4
}
     

許可權元件

只有vip才能看的內容 自定義許可權類 <wiz_code_mirror>       15           1
# 自定義許可權類
2
from rest_framework.permissions import BasePermission
3
 
         
         
          
          
           4
           
          
         
class MyPermission(BasePermission):
5
    message = 'VIP使用者才能訪問'
6
 
         
         
          
          
           7
           
          
         
    def has_permission(self, request, view):
8
        """
9
        自定義許可權只有VIP使用者才能訪問
10
        """
11
        # 因為在進行許可權判斷之前已經做了認證判斷,所以這裡可以直接拿到request.user
12
        if request.user and request.user.type == 2:  # 如果是VIP使用者

相關推薦

04認證許可權頻率

  .wiz-editor-body .wiz-code-container { position: relative; padding: 8px 0; margin: 5px 25px 5px 5px; text-indent: 0; text-align: left } .CodeMirror

Rest_Framework之認證許可權頻率元件原始碼剖析

一:使用RestFramwork,定義一個檢視 from rest_framework.viewsets import ModelViewSet class BookView(ModelViewSet): queryset = Book.objects.all()

Django框架rest_framework中APIView的as_view()原始碼解析認證許可權頻率控制

在上篇我們對Django原生View原始碼進行了區域性解析:https://www.cnblogs.com/dongxixi/p/11130976.html 在前後端分離專案中前面我們也提到了各種認證需要自己來做,那麼我們用rest_framework的時候 rest_framework也為我們提供相應的

使用者職位組織許可權角色SQL語句

****************** 角色 --角色 select r.fid        FID,        r.fnumber &nb

OARACLE——建立表空間使用者許可權刪除使用者匯入匯出

1、使用sys使用者登入,連線為SYSDBA; 2、查詢表空間資料資料夾在伺服器上的路徑,得到資料夾的路徑為D:\ORACLE\PRODUCT\10.2.0\ORADATA\YWSJ\; Select FILE_NAME FROM DBA_DATA_FILES; 3、建立表空間 CR

Oracle使用者許可權角色管理

Oracle 許可權設定一、許可權分類:系統許可權:系統規定使用者使用資料庫的許可權。(系統許可權是對使用者而言)。 實體許可權:某種許可權使用者對其它使用者的表或檢視的存取許可權。(是針對表或檢視而言的)。 二、系統許可權管理:1、系統許可權分類:DBA: 擁有全部特權,是系統最高許可權,只有DBA才可以

JAVA知識點(類方法構造器許可權修飾符資料型別等知識點)

注意事項: 同一個包中不能有一樣的類名的類,不然編譯會出現錯誤。 (二)單例類(Singleton) 1、把構造器用private隱藏。 2、用static建立一個自定義只允許建立一個物件例項的靜態方法(這樣即使還沒建立物件,就可以由類呼叫進行檢查是否已經存在例項了並進行

表空間使用者許可權角色 (資料控制語言-DCL-grant,revoke)

1、登陸資料庫 SQLPLUS SYS AS SYSDBA; // 登陸SYS帳戶 SQLPLUS 使用者名稱/密碼@SID; // 登陸普通使用者 例如:SQLPLUS LAOSAN/[email&

linux命令之----ls命令查詢檔案的所有者許可權時間大小等資訊

1、ls命令作用 ls命令用於顯示指定工作目錄下之內容(列出目前工作目錄所含之檔案及子目錄) 2、ls命令結構 drwxr-xr-x  2 root root 4.0K  3月  23  2017  etc “d”   表示檔案的型別為目錄 “rwx” 表示檔

Oracle 的使用者許可權角色及表空間的管理

第二章:Oracle的使用者、許可權、角色及表空間的管理 Oracle資料庫查詢時如何對滿屏的sql命令做清屏處理呢?很多朋友喜歡使用SQL*Plus,SQL*Plus工具怎麼清屏呢? oracle清屏命令彙集: 1、同時按SHIFT和DELETE鍵,然

基於EasyNVR二次開發實現業務需求:使用者許可權裝置管理

許多接觸到EasyNVR的使用者、開發者都會提出關於EasyNVR裝置分組和賬戶裝置關係對映的問題,我們參考目前大部分的視訊能力輸出平臺的做法,EasyNVR目前只做了唯一的使用者/密碼(類比appkey/secretkey)管理,應用層呼叫EasyNVR

Rest Framework第四天-認證元件許可權元件頻率元件

                         

【無私分享:從入門到精通ASP.NET MVC】從0開始一起搭框架做專案(6) 控制器基類 主要做登入使用者許可權認證日誌記錄等工作

索引 簡述 今天我們來寫一個控制器基類 主要做登入使用者、許可權認證、日誌記錄等工作 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,

20.DjangoRestFramework學習三之認證元件許可權元件頻率元件url註冊器響應器分頁元件

一 認證元件   1. 區域性認證元件     我們知道,我們不管路由怎麼寫的,對應的檢視類怎麼寫的,都會走到dispatch方法,進行分發,     在咱們看的APIView類中的dispatch方法的原始碼中,有個self.initial(request, *args, **kwargs),那麼認證、許可

drf token重新整理配置認證元件(使用)許可權元件(使用)頻率元件(使用)異常元件(使用)

目錄 一、特殊路由對映的請求 二、token重新整理機制配置(瞭解) 三、認證元件專案使用:多方式登入 1、urls.py 路由 2、views.py 檢視 3、seriali

RestFramework自定制之認證權限限制訪問頻率

[1] eal val def app http asi col basic 認證   所謂認證就是檢測用戶登陸與否,通常與權限對應使用。網站中都是通過用戶登錄後由該用戶相應的角色認證以給予對應的權限。 自定制認證規則的重點是繼承內置的BaseAuthenticatio

Django Restful Framework【第三篇】認證權限限制訪問頻率

authent per ted inf png ip限制 users -a python 一、認證 認證請求頭 views.py #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views

04分類整理:會搜索還不夠整理分類歸納

存儲 下一個 cse 丟失 機制 pic 九宮格 垃圾 賬號 在這個當一鍵收藏所需信息變得越來越簡單的今天,如果不去定期收納整理。我們可以想象一下,假如我們的電腦和手機是房子,我們下載、收藏、保存的信息,資源人脈是我們每天帶回來的東西,如果不定期收納整理,住在這個房子裏的我

04 -pandas索引的堆(行列操作交換行列)聚合操作(求和最大值最小值平均值等)

引入模組 import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt 建立示例DataFrame # 用作案例 不要刪 !!! data=np.random.ra

oracle 11g 最常用的基本管理命令包括建立使用者表空間許可權

Oracle 11g最常用的基本管理命令,包括建立使用者、表空間,許可權分配等 1、啟動oracle資料庫: 從root切換到oracle使用者進入:su - oracle 進入sqlplus環境,nolog引數表示不登入:sqlplus /nolog 以管理員模式登入:sqlplu