第四十六章:session 驗證

1. djagno ORM 數據列類型
 
  mysql      djagno
  int         interfiled
  
  
  
  
  參數:
   null : true
   default : 設置默認值
   max_length: 最大長度
   unique: 惟一索引
   聯合惟一索引:
    class Meta:
     unique_together = (
      ("id", 'name')
     )
   普通聯合索引:
    class Meta:
     index_together = (
      ("id", 'name')
     )
   
   db_index : 設置普通索引
   
   db_column: 設置列名
   
 2. Djagno admin 列類型:
  
  EmailFiled: 驗證郵箱是否正確
  
  fileFiled: 驗證文件是否上傳
  。。。。。
  
  參數: 
   blank: True、false
   versobse_name: 顯示字段名
   editable            Admin中是否能夠編輯
   help_text           Admin中該字段的提示信息
   choices             Admin中顯示選擇框的內容,用不變更的數據放在內存中從而避免跨表操做
   choices = (
    (1, '男'),
    (2, '女')
   )
   gender = models.IntegerField(choices=chocies)
  
  
 3. 分頁:
  
  
  內置的分頁:
   
   paginator
  
   缺點:
    頁碼只能所有顯示
  
  自定製分頁:
   
   1. models.xxxx.objects.all()[start:stop]
   2. 判斷極值
    最左邊:
     half
     
    最右邊:
     half
   
  ps:
   本身用過的分頁工具:
    1. class類
    2. dataTables (https://datatables.net)
   
    
 4. CSRF:
  
  
  settings:
   MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
   ]
  
  @csrf_exempt  @csrf_protect
  
 

今天內容:
 
 1. 模板 (永遠是渲染頁面的做用)
  
  - 基本數據類型 渲染
   a. 變量
   b. 列表
   c。 字典
   d。列表中套字典
   
  - 母版
   layout.html 佈局頁面
    {%block mycss%}
    
    {%endblock%}
   子版繼承:
    {% extends 「layout.html」%}
    
    {%block mycss%}
     link
     script src
    {%endblock%}
  
  - 導入
   
   本身寫了一個很是漂亮的 html 代碼 (html頁面)
   
   {% include 「html頁面」 %}
  - 內置函數
   
   python:
    str  = 「zekai」
    str.upper()
    str.lower()
   
   母版語言:
    
    
  - 自定義函數
   配置:
    a、在app中建立templatetags模塊
    b. 建立xx.py
   
   
   - simple_filter:
    
    from django import template
    register = template.Library()
    @register.filter()
    def my_func(val, arg1):
     return val + arg1
    
    注意:
     1. 只能傳入一個參數
     2. 函數名和參數之間不能有空格
    用法 :
     {% load xx %}
     {{ name|my_func:'kkkk'}}
   
   - simple_tag:
   
    from django import template
    register = template.Library()
    
    @register.simple_tag()
    def my_func(val, arg1):
     return val + arg1
    
    用法:
     {% load xx %}
     {% my_tag 'zekai' 'is' 'jjj' %}
   
 2. cookie和session (********************************)
  
  原理:
   - cookie:
    存在於客戶端瀏覽器的一個key-val的隨機字符串(鍵值對)
    
    服務端返回的
     {"鍵": cookie值}
   - session
    
    存在於服務端的包含用戶敏感信息的鍵值對
    
    {
     「cookie值」 : {「name」:‘zekai’, 'age‘:18},
     「cookie值1」 : {「name」:‘zekai2’, 'age‘:34},
     「cookie值2」 : {「name」:‘zekai3’, 'age‘:45},
     「cookie值3」 : {「name」:‘zekai4’, 'age‘:56},
    }
   
   
   
  具體使用:
   
   ### 獲取session
   ### 查詢session值
   # print(request.session.keys()) ### dict_keys(['name', 'pwd', 'age'])
   # print(request.session.values()) ###  dict_values(['zekai', '123', 12])
   # print(request.session.items())   ### dict_items([('name', 'zekai'), ('pwd', '123'), ('age', 12)])
   
   
   
   ### 設置session值
            request.session['name'] = username
            request.session['pwd'] = pwd
            request.session['age'] = 12
   
   
   # 用戶session的隨機字符串
   request.session.session_key
 
   # 將全部Session失效日期小於當前日期的數據刪除
   request.session.clear_expired()
 
   # 檢查 用戶session的隨機字符串 在數據庫中是否
   request.session.exists("session_key")
 
   # 刪除當前用戶的全部Session數據
   request.session.delete("session_key")
 
   request.session.set_expiry(value)
    * 若是value是個整數,session會在些秒數後失效。
    * 若是value是個datatime或timedelta,session就會在這個時間後失效。
    * 若是value是0,用戶關閉瀏覽器session就會失效。
    * 若是value是None,session會依賴全局session失效策略。
   
  
   
  能夠使用的存儲介質:
   
   1. SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默認)
    
    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串(默認)
    SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路徑(默認)
    SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默認)
    SESSION_COOKIE_SECURE = False                            # 是否Https傳輸cookie(默認)
    SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http傳輸(默認)
    SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默認)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否關閉瀏覽器使得Session過時(默認)
    SESSION_SAVE_EVERY_REQUEST = False                       # 是
   
 
   2. SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
     SESSION_CACHE_ALIAS = 'default'                            # 使用的緩存別名(默認內存緩存,也能夠是memcache),此處別名依賴緩存的設置
    
    
     SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串
     SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路徑
     SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名
     SESSION_COOKIE_SECURE = False                             # 是否Https傳輸cookie
     SESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie只支持http傳輸
     SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)
     SESSION_EXPIRE_AT_BROWSER_CLOSE = False                   # 是否關閉瀏覽器使得Session過時
     SESSION_SAVE_EVERY_REQUEST = False                        #
   
   3.  SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
    SESSION_FILE_PATH = None                                    # 緩存文件路徑,若是爲None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir()                                                            # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
   
   
    SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串
    SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路徑
    SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名
    SESSION_COOKIE_SECURE = False                               # 是否Https傳輸cookie
    SESSION_COOKIE_HTTPONLY = True                              # 是否Session的cookie只支持http傳輸
    SESSION_COOKIE_AGE = 1209600                                # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                     # 是否關閉瀏覽器使得Session過時
    SESSION_SAVE_EVERY_REQUEST = False      
   
   4. 配置 settings.py
 
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        #
   
   
   
   ##分佈式session存儲
   
  補充:
   關係型數據庫:(基於硬盤的)
     sqllite  mysql oracle db2
   
   菲關係型數據庫:(基於內存的)
    redis, mongdb, memcahce
      
 
 3. 中間件  (django的請求生命週期)
  
  - class 類
   
   - process_request : 請求必經的一個方法
   - process_response: 這個響應必經的一個方法
   
   - process_view
   
  - settings: 
   MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'm1.M1',
    'm2.M2'
   ]
   
  - 應用:
   作預處理的時候, 將代碼寫 在中間件中
   判斷是不是IP黑名單中的值
   .....
  
 4. MTV 和 MVC         MVC:        項目目錄結構的設計模式            客戶       ------點餐-------->    服務員  ------處理菜單需求--------> 廚師         <------------------            <-------------------------          (瀏覽器)  ------------------->  函數或者類處理  ------------------>  數據庫               業務邏輯    views:                         controllers                          models:             loginController.py     LoginModel.py             UserController.py                   UserModel.py     大量html頁面                                    MVC        django:     M : models     T : Templates (各類html頁面) 至關於views     V :Views(視圖處理函數) 至關於 controllers          
相關文章
相關標籤/搜索