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