二十九: MVC / MVT / MVP / MVVM
1. MVC -- Model Views Controller -- 模型層、模板層、視圖函數
2. MVT -- Model Views Templates -- 模型層、視圖函數、模板層
3. MVP -- Model Views Presenter -- 模型層、模板層、視圖函數(contrller/Presenter)
4. MVVM -- Model Views ViewsModel -- 模型層、模板層、視圖函數
將views和狀態(tài)和抽象化,視圖UI和業(yè)務邏輯分開,viewsmodel可以取出 Model 的數據同時幫忙處
理 View 中由于需要展示內容而涉及的業(yè)務邏輯。
二十六:數據庫刪除操作(謹慎使用):
-- 刪除數據庫: drop database if exists 數據庫名;
-- 刪除表:drop table 表名字 (完全刪除去掉整張表);
-- 刪除表:delete from 表名 (刪除表里面的數據,一行一行的刪除,表明后面可以跟where 字段名= 值,
刪除指定的某條或者多條記錄,該命令可以回滾)
-- 刪除表:truncate table 表名稱 (刪除表中的數據,并且新增加記錄的計數標識會重置,
比如主鍵id原來是50,用該命令刪除后,新增加的數據主鍵id會從1開始,而不是51開始)
一般來說:執(zhí)行速度-->drop>truncate>delete
使用foreign key約束的表,不能用truncate,應使用不帶where的delete
二十 : 操作系統(tǒng)的五大管理功能 :
1.設備管路:主要是負責內核與外圍設備的數據交互,實質是對硬件設備的管理,包括對輸出輸入設備的分配,初始化,維護與回收等,比如管理音頻的輸入輸出;
2.作業(yè)管理:這部分功能主要是負責人機交互,圖形界面或者系統(tǒng)任務的管理;
3.文件管理:這部分功能設計文件的邏輯組織和物理知識,目錄結構和管理等;
4.進程管理:說明一個進程存在的唯一標志是pcd(進程控制塊),負責維護進程的信息和狀態(tài);
5.存儲管理:數據的存儲方式和組織結構。
十八 : SQL注入攻擊
--> 用戶在客戶端輸入特定的字符串提交服務器,在服務器執(zhí)行sql語句時,將用戶輸入的特定字符串誤以為是sql語句并且執(zhí)行語句
如何防御sql注入攻擊:
1.項目上線時,將網頁錯誤提示返回信息關閉,或者重寫(python中配置:debug=False),這種方法只是簡單的掩蓋代碼缺陷,并不能防御;
2.檢查變量數據類型和格式;
3.過過濾字符串;
4.綁定變量,使用預編譯語句;
5.數據庫信息加密;
6.使用數據庫存儲過程;
十四: python容器類型(即數據類型)
1. 列表(list) -- 可變,有序 -- 中括號[]
a.獲取元素 - 通過下標獲取元素
b.增刪改
增 : append ,insert , extend
刪除:remove , del ,pop ,clear
改 : 列表[下標] = 新值
c. 相關運算 :+ ,* ,in /not in ,len() ,list() ,max() ,min()
列表1.append(a) 和列表1.extend(a)的區(qū)別:
append: 添加對象到列表1(將添加的對象作為列表1的一個元素)
extend: 添加元素到列表1(將添加的對象中的元素添加到列表1)
a = [1,2,3,4]
b = [5,6,7,8]
a.append(b) # a: [1,2,3,4,[5,6,7,8]]
a = [1,2,3,4]
a.extend(b) # a: [1,2,3,4,5,6,7,8]
將[[1,2],[3,4],[5,6]]一行代碼展開該列表,得出[1,2,3,4,5,6]
a= [[1, 2], [3, 4], [5, 6]]
b= [j for i in a for j in i]
2. 元祖(tuple) -- 不可變,有序 -- 小括號()
注意: 當元祖只有一個元素時,要加逗號
a = (1) --- a變量類型是int類型
b = (1,) --- b變量類型是tuple類型
獲取元素 - 通過下標獲取元素
變量1,變量2 = (元素1,元素2)
變量1,*變量2 = (元素1,元素2,元素3......)
相關運算 :+ ,* ,in /not in ,len() ,tuple() ,max() ,min()
3. 字典 (dict) -- 可變,有序 -- 大括號{}
a.獲取元素 -- 通過鍵獲取元素
b.增刪改
增 : 字典[key] = 值 , 字典1.update(字典2), 字典1.setdefault(key,值)
刪 : del 字典[key],字典.pop(key) ,clear
改 :字典[key] = 值
c. 相關運算 :in /not in ,len() ,dict() ,
max() : 取的是字典的key的最小值 ,key類型需要一樣
min() :取的是字典的key的最小值 ,key類型需要一樣
4. 集合 (set) -- 可變、無序 --大括號{}
a. 查--獲取集合元素 : 不能單獨獲取某個元素,只能遍歷
b. 增 (添加元素): 集合.add(元素) -- 將制定元素添加到集合中
集合.update(序列) -- 將序列中的元素添加到集合中(序列中的元素必須是不可變的)
c. 刪 (刪除元素): 集合.remove(元素) -- 刪除集合中指定的元素
d. in / not in ,max ,min, len ,set
e.數學運算:包含(>=,<=),并集(|),交集(&),補集(^),差集(-)
5. 字符串(str)-- 不可變、 有序--兩個單引號''或者雙引號
a.獲取元素 -- 通過下標獲取元素
b. 字符串切片:字符串1[:]
c. 相關運算 :+ ,* ,in /not in ,len() ,str() ,max() ,min()
d.轉義字符:\n,\t,\',\
e.阻止轉義:r/R
八: 閉包問題 (變量作用域)
1. python屬性查找規(guī)則:LEGB
1. (Local)局部作用域,每當調用一個函數的時候就創(chuàng)建了一個局部作用域,它最先被搜索。
2. (Enclosing)嵌套的父級函數的局部作用域
3. (global)全局作用域
4. (built-in)內建作用域,這個是內建函數和類的作用域。
2. 實列:
1) def func(x):
a = []
for i in range(5):
a.append(i*x)
return a
b = func(2)
print(b)
輸出結果為:[0, 2, 4, 6, 8]
2)
def func():
return [lambda x : i * x for i in range(4)]
print([m(2) for m in func()])
輸出結果為: [6, 6, 6, 6]
如果想得到[0,2,4,6]可以用生成器或者創(chuàng)建閉包或者偏函數
生成器
def multipliers():
for i in range(4): yield lambda x : i * x
print([m(2) for m in multipliers()])
將閉包作用域變?yōu)榫植孔饔糜? def multipliers():
return [lambda x,i=i : i * x for i in range(4)]
print([m(2) for m in multipliers()])
偏函數
from functools import partial
from operator import mul
def multipliers():
return [partial(mul, i) for i in range(4)]
print([m(2) for m in multipliers()])
七: 映射(map()) -- 歸納(reduce()) -- 過濾(filter()) --
解析式生成可迭代對象:列表解析式,元祖解析式,字典解析式等(任何可迭代對象)
1) map(函數,可迭代序列對象) -- 對可迭代對象的每個元素執(zhí)行函數,返回一個序列對象(需要指定保存類型則:list(map())) <--> (數據處理)
2) reduce(函數,可迭代對象) -- 通常map和reduce都是在列表里結合使用,map對數據進行一一映射處理,reduce對數據進行整合計算 <-->(數據整合)
3) filter(函數,可迭代對象) -- 將可迭代對象的元素中滿足函數的保留下來,不滿足的剔除掉 <-->(數據篩選)
4) 解析式是python生成列表的一種高效方式(也可以生成其他類型,通常生成list) : 列表解析式 -- [ function for item in iterable]
比如 : [ x * x for x in range(1,5)]
[ num * num for num in range(-8,5) if num < 0]
字典解析式:
# Taken from page 70 chapter 3 of Fluent Python by Luciano Ramalho
DIAL_CODES = [
(86, 'China'),
(91, 'India'),
(1, 'United States'),
(62, 'Indonesia'),
(55, 'Brazil'),
(92, 'Pakistan'),
(880, 'Bangladesh'),
(234, 'Nigeria'),
(7, 'Russia'),
(81, 'Japan'),
]
>>> country_code = {country: code for code, country in DIAL_CODES}
>>> country_code
{'Brazil': 55, 'Indonesia': 62, 'Pakistan': 92, 'Russia': 7, 'China': 86, 'United States': 1, 'Japan': 81, 'India': 91, 'Nigeria': 234, 'Bangladesh': 880}
>>> {code: country.upper() for country, code in country_code.items() if code < 66}
{1: 'UNITED STATES', 7: 'RUSSIA', 62: 'INDONESIA', 55: 'BRAZIL'}
集合解析式:
# taken from page 87, chapter 3 of Fluent Python by Luciano Ramalho
>>> from unicodedata import name
>>> {chr(i) for i in range(32, 256) if 'SIGN' in name(chr(i), '')}
{'×', '¥', '°', '£', '', '#', '?', '%', 'μ', '>', '¤', '±', '?', '§', '<', '=', '', '$', '÷', '¢', '+'}
五: 字符串格式化-- format函數 (菜鳥教程)
功能: a.代替占位符: f'{a}任意字符' -- 等同于--> '%s任意字符%s' %(a,b)
b.格式化字符串:'{a}'.format(a='內容',b='內容')
實列:
1.傳入參數:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print("網站名:{name}, 地址 {url}".format(name="菜鳥教程", url="www.runoob.com"))
# 通過字典設置參數
site = {"name": "菜鳥教程", "url": "www.runoob.com"}
print("網站名:{name}, 地址 {url}".format(**site))
# 通過列表索引設置參數
my_list = ['菜鳥教程', 'www.runoob.com']
print("網站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必須的
2.傳入對象
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class AssignValue(object):
def __init__(self, value):
self.value = value
my_value = AssignValue(6)
print('value 為: {0.value}'.format(my_value)) # "0" 是可選的
3.格式化數字:
>>> print("{:.2f}".format(3.1415926));
3.14
三: 裝飾器:一個閉包,把一個函數當做參數返回 一個替代版的函數,本質上就是一個返回函數的函數 (被裝飾的函數名會變成裝飾器的名字,不在是原來的名字)
裝飾器的三個要素():
1. 外層函數嵌套內層函數
2. 外層函數返回內層函數
3. 內層函數調用外層函數參數
# 對要裝飾的函數添加新的代碼
def outer(func):
def inner(*args, **kwargs):
# 需要裝飾的代碼(在func基礎上添加的新代碼)
return func(*args, **kwargs)
return inner
二: 偏函數:把一個函數的某些參數固定住(設默認值),返回一個新的函數
列子:
int('234') -- 將'234'字符串變成int類型 --int('234', base=10)將字符串引號去掉后,當成10進制的數,然后轉換成10進制數返回
int('1010',base=2) -- 將字符串去掉引號后當成一個2進制數來算,轉成10進制數返回
自定義偏函數:
導入偏函數模塊:from functools import partial
int2 = partial(int, base=2)
int2就是一個偏函數
-- int2('101011')--將101011當2進制,轉換成10進制數