cooke和session

1、裝飾器要加入funtools.wrap裝飾

保留函數的元數據(函數名/註釋)python

1.裝飾器redis

def wrapper(f):
  def inner(*args,**kwargs):
    return f(*args,**kwargs)
  return inner

  

import functools

def wrapper(f):
    @functools.wraps(f)
    def inner(*args,**kwargs):
        return f(*args,**kwargs)
    return inner    

1. 執行wrapper
2. 從新賦值
index = wrapper(index)
@wrapper def index(a1,a2):   """   這是一個index函數   """   return a1+ a2 print(index.__name__) print(index.__doc__)

  

 

2、orm字段中的verbose_name

目前當註釋用. 之後:在model form和form中使用.數據庫

 

3、路由系統中記得加入終止符 $

url(r'^login/$', admin.site.urls,name='login'),

4、用戶名和密碼檢測

xxxx.first() # 返回對象或Nonedjango

user_object = models.UserInfo.objects.filter(username=user, password=pwd).first()

xxxx.exists() # 返回布爾值api

user_object = models.UserInfo.objects.filter(username=user, password=pwd).exists()

 

5、模板查找順序

一、根目錄templates瀏覽器

二、根據app註冊順序去每一個app的tempaltes中找緩存

 

6、cookie

原理cookie

基於cookie實現
    保存在用戶瀏覽器端的鍵值對,向服務端發請求時會自動攜帶。

操做session

def login(request):
  # return HttpResponse('...')
  # return render('...')
  # return redirect('...')
# 設置cookie   data = redirect('...')   data.set_cookie()
# 讀取cookie   request.COOKIES.get('xx')   return data
必須背會一下三個參數:   key, value='', max_age=None

應用場景: 用戶認證 投票 每頁默認顯示數據

 

7、session

原理:隨機字符串的過程....app

基於session實現原理

依賴cookie
是一種存儲數據的方式,依賴於cookie,實現本質:
    用戶向服務端發送請求,服務端作兩件事:生成隨機字符串;爲此用戶開闢一個獨立的空間來存放當前用戶獨有的值.
    在空間中如何想要設置值:
        request.session['x1'] = 123
        request.session['x2'] = 456
    在空間中取值:
        request.session['x2']
        request.session.get('x2')
    視圖函數中的業務操做處理完畢,給用戶響應,在響應時會將隨機字符串存儲到用戶瀏覽器的cookie中.        

  

cookie和session的區別?

答: cookie是存儲在客戶端瀏覽器上的鍵值對,發送請求時瀏覽器會自動攜帶. 
session是一種存儲數據方式,基於cookie實現,將數據存儲在服務端(django默認存儲到數據庫).其本質是:
    用戶向服務端發送請求,服務端作兩件事:生成隨機字符串;爲此用戶開闢一個獨立的空間來存放當前用戶獨有的值.

在空間中如何想要設置值:
    request.session['x1'] = 123
    request.session['x2'] = 456
在空間中取值:
    request.session['x2']
    request.session.get('x2')
視圖函數中的業務操做處理完畢,給用戶響應,在響應時會將隨機字符串存儲到用戶瀏覽器的cookie中.

  拓展:djanago和session相關的配置:

 SESSION_COOKIE_NAME = "sessionid" #Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串 SESSION_COOKIE_DOMAIN = None # api.baidu.com /www.baidu.com/ xxx.baidu.com SESSION_COOKIE_PATH = "/" # Session的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 # 是否每次請求都保存Session,默認修改以後才保存

  

#django中的session如何設置過時時間:

  SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(2周)


#django的session默認存儲在數據庫,能夠放在其餘地方嗎:

小系統:默認放在數據庫便可. 
大系統:緩存(redis)

文件:
SESSION_ENGINE = 'django.contrib.sessions.backends.file' 
SESSION_FILE_PATH = '/sssss/'

緩存(內存):
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default' 
CACHES = { 
  'default': { 
    'BACKEND': 
      'django.core.cache.backends.locmem.LocMem Cache', 
      'LOCATION': 'unique-snowflake', 
  } 
}

緩存(redis):
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default'
CACHES = { 
  "default": { 
    "BACKEND": 
      "django_redis.cache.RedisCache", 
      "LOCATION": "redis://127.0.0.1:6379", 
    "OPTIONS": { 
      "CLIENT_CLASS": 
        "django_redis.client.DefaultClient", 
        "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密碼", 
    } 
  } 
}

  

操做session

#讀取
request.session['x']
request.session.get('xx')

#設置(添加&修改) request.session['x'] = 123

#刪除 del request.session['x']

  

配置
  數據存儲位置
    數據庫(django默認)
    文件
    緩存(內存/redis)
cookie相關操做
應用場景   用戶認證   短信驗證過時   權限管理
強調 session中的數據是根據用戶相互隔離. # 示例 def login(request):   # 獲取用戶提交的用戶名和密碼   user = request.POST.get('user')   request.session['user_name'] = user
def index(request): print(request.session['user_name'])

  

 8、Http協議

什麼是HTTP協議

超文本傳輸協議
關於鏈接:一次請求一次響應以後斷開鏈接(無狀態、短鏈接)
關於格式:
請求:請求頭+請求體 
  (http:www.baidu.com/index/?a=123)   send("GET /index/?a=123   http1.1\r\nhost:www.baidu.com\r\nuseragent:Chrome\r\n\r\n")   send("POST /index/   http1.1\r\nhost:www.baidu.com\r\nuseragent:Chrome\r\n\r\nusername=alex&pwd=123") 響應:響應頭+響應體   Content-Encoding: gzip\r\nCache-Control:   private\r\n\r\n網頁看到的HTML內容
擴展:常見的請求頭都有哪些?
- user-agent:用什麼瀏覽器訪問的網站。 - content-type: 請求體的數據格式是什麼?(服務端按照格式要求進行解析)
擴展:常見的請求方式?
- GET - POST

 

 

 

 9、django請求生命週期

 django請求生命週期 / 瀏覽器上輸入http://www.xxx.com 請求到 達django後發生了什麼?

 

補充:

一、經過js設置cookie

document.cookie = 'k1=wy222;path=/'

$.cookie('k1','wy222',{path:'/'})

注意:path不一樣會致使設置不一樣.

 

二、path的做用

/ , 當前網站中全部的URL都能讀取到此值.

"", 只能在當前頁面訪問的到此數據.

/index/ , 只能在/index/xxx 的網頁中查看.
相關文章
相關標籤/搜索