1. 程式人生 > 其它 >Django csrf跨站請求 csrf的處理 Auth模組

Django csrf跨站請求 csrf的處理 Auth模組

內容概要

  • csrf跨站請求
  • csrf的處理
  • Auth模組
  • 擴充套件auth_user表字段

內容詳細

csrf跨站請求

        # 背景:
            釣魚網站
             '''
                英語4級報名網站為例
                    你要在這個網站要付費,你去的這個網站是一個冒牌的網站,他就去冒牌網站裡面付費了,前付到了冒牌網站,沒有報名成功。

             '''
          他會出現在form表單中,action引數:朝後端傳送的地址

        # 怎麼解決這個問題?

        # csrf是針對與post請求的才會做驗證

        '''token相關的,一般都是一個串,祕鑰, 私鑰,公鑰'''

        # 兩種解決方式

         {#data:{'a':1, 'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()},#}
        data:{'a':1, 'csrfmiddlewaretoken': '{{ csrf_token }}'},

csrf相關裝飾器

        '''
            如果使用中介軟體限制的話,他就會限制全域性的,要麼全部限制,要麼全部不限制

            只有index函式需要驗證,其他的不需要驗證
            我只想讓home函式不驗證,其他的都需要驗證
        '''
        提供了2個裝飾器
        csrf_protect: 需要驗證
        csrf_exempt:不需要驗證

        '''
            按照FBV和CBV的使用即可
        '''

        from django.views.decorators.csrf import csrf_exempt,csrf_protect
        '''
            針對CBV:
                csrf_protect的三種方式都是可以的
                csrf_exempt前兩種方式都不行,只有第三種方式可以的
        '''

Auth模組

        # 遷移資料庫會有一個表生成,auth_user
        # django專案建立完後之後,會有一個預設的路由,admin/
        # admin/是django預設提供的後臺管理介面

        訪問admin/登入參照的資料就是從auth_user表中來,前提是必須是超級管理員

        # 如何建立超級管理員?

        python3 manage.py createsuperuser

擴充套件auth_user表字段

# 前提:一般情況,你執行了資料庫遷移命令,就不要在擴充套件了
要想擴充套件欄位,最後在遷移資料庫命令之前擴充套件。

如果已經遷移過了,也是可以擴充套件的,只不過有點麻煩,還有可能容易出錯

# 擴充套件auth_user表,要繼承Abstractuser類

from django.contrib.auth.models import AbstractUser
# Create your models here.

# 如果擴充套件欄位的話,就不要在繼承models.Model
class UserInfo(AbstractUser):
    '''
        1. 原來已經有的欄位不要動
        2. 你只寫你自己需要擴充套件的欄位
        3. 擴充套件之後,原來的auth_user表已經不存在了
        4. 從新生成一個新表
    '''
    phone = models.CharField(max_length=32)
    # 可以上傳任意的檔案
    avatar = models.FileField(upload_to='static/img/', default='static/img/default.png')
    # 只能上傳圖片
    # avatar = models.ImageField
    create_time = models.DateTimeField(auto_now_add=True)
    
'''在配置檔案中增加一下內容'''
# AUTH_USER_MODEL = '應用名.類名'
AUTH_USER_MODEL = 'app01.UserInfo'