保留函數的元數據(函數名/註釋)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__)
目前當註釋用. 之後:在model form和form中使用.數據庫
url(r'^login/$', admin.site.urls,name='login'),
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()
一、根目錄templates瀏覽器
二、根據app註冊順序去每一個app的tempaltes中找緩存
原理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
應用場景: 用戶認證 投票 每頁默認顯示數據
原理:隨機字符串的過程....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'])
什麼是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
django請求生命週期 / 瀏覽器上輸入http://www.xxx.com 請求到 達django後發生了什麼?
一、經過js設置cookie
document.cookie = 'k1=wy222;path=/' $.cookie('k1','wy222',{path:'/'}) 注意:path不一樣會致使設置不一樣.
二、path的做用
/ , 當前網站中全部的URL都能讀取到此值. "", 只能在當前頁面訪問的到此數據. /index/ , 只能在/index/xxx 的網頁中查看.