Python從零開始編寫輕量級Web框架 2

2021-09-26 12:13:13 字數 3997 閱讀 2993

最近閱讀了flask的原始碼,弄懂了原理之後就想嘗試來實現自己的乙個web框架。

因為大部分的實現思路都參照flask0.1版本,也就是最初版本的思路。所用的基本庫是werkzeug

框架的完整**都放在了github上,之後會繼續更新:

求star,球球了t_t

在完成了框架的最基本的get、post之後,我們開始編寫自己的資料庫orm,目前我只寫了支援mysql的orm,並且暫時只支援增刪改查的最基本的功能,使用pymysql作為底層庫。

首先,先定義資料庫的連線,這個很簡單,直接封裝乙個connect()函式即可。當然也可以像我一樣,在建立類的時候直接連線:

def

__init__

(self,name=

'test'

,table_name=

'sqltest'

,host=

'localhost'

,user=

'******'

,password=

'******'):

self.name = name

self.table_name = table_name

self.con = pymysql.connect(host=host,user=user,password=password,database=self.name)

self.cursor = self.con.cursor(

)

測試可以連線成功後,接下來的工作就是定義資料庫要操作的表的屬性,在這裡定義了乙個類field來表示表的列名,詳細原因在後面說明,首先來看看最基本的增加操作:

def

insert

(self,

**kwargs)

:#cursor = self.cursor

condition =

''for key in kwargs:

condition +=

str(kwargs[key])+

',' condition = condition.rstrip(

',')

# 處理引數字典,然後插入sql語句中

sql =

"insert into "

+self.table_name+

" values ("

+condition+

");"

try:

# 嘗試

self.cursor.execute(sql)

self.con.commit(

)except

:# 發出錯誤

raise exception

增加操作是最基礎的操作,而且沒有對資料庫表進行讀操作的需求,所以寫起來較為簡單,基本操作就是通過**kwargs將引數變為元組或者字典,然後對其進行處理,插入到sql語句中執行。

接下來是查詢操作,查詢函式因為需要將條件寫入到函式的引數裡,就像這樣:

search(x<=

1,y==

1)

所以需要將表的屬性的類field的運算子過載,也就是__eq__、__lt__、__gt__、__le__、__ge__、__ne__這幾個,他們分別對應的是==,<=,>=,<,>,!=這幾個符號,這也是為什麼要用將表的列名使用類來定義:

class

field

(object):

defisnum

(self,value)

:try

: value +

1except typeerror:

return

false

else

:return

true

def__init__

(self,name)

: self.name = name

def__eq__

(self, other):if

isinstance

(other,

str)

:return

str(self.name)

+'=\''

+str

(other)

+'\''

else

:if other ==

none

:return

str(self.name)

+'='

+str

('null'

)return

str(self.name)

+'='

+str

(other)

def__lt__

(self, other)

:if self.isnum(other)

:return

str(self.name)

+'<'

+str

(other)

else

:raise typeerror

def__gt__

(self, other)

:if self.isnum(other)

:return

str(self.name)

+'>'

+str

(other)

else

:raise typeerror

def__le__

(self,other)

:if self.isnum(other)

:return

str(self.name)

+'<='

+str

(other)

else

:raise typeerror

def__ge__

(self,other)

:if self.isnum(other)

:return

str(self.name)

+'>='

+str

(other)

else

:raise typeerror

def__ne__

(self, other):if

isinstance

(other,

str)

:return

str(self.name)

+'!=\''

+str

(other)

+'\''

else

:if other ==

none

:return

str(self.name)

+'='

+str

('null'

)return

str(self.name)

+'!='

+str

(other)

這是類中的運算子過載。

接下來是查詢操作的函式:

def

search

(self,

*args)

: condition =

''for i in args:

condition += i+

',' condition = condition.rstrip(

',')

sql =

'select * from '

+self.table_name+

' where ('

+condition+

');'

self.cursor.execute(sql)

result = self.cursor.fetchall(

)return result

從零開始學Python

第三章 字典 1.建立字典 book 其中值可以是任意型別,可以是元組或者字典.2.dict函式建立字典 通過對映建立 book d book.dict 輸出d book 通過關鍵字建立 d dict name zq age 1 輸出d 3.字典的格式化字串 鍵 s 字典名 book name is...

從零開始學Python

第十一章 檔案操作 1.開啟檔案 用open 函式,直接用就可以。open name mode buffering 呼叫open 之後會返回乙個檔案物件,mode 模式,buffering 緩衝都是可以選擇的。f open r 檔案路徑 2.檔案模式 r 讀模式 w 寫模式 a 追加模式 b 二進位...

Python從零開始(1)

學習一門程式語言首先要從計算機基礎常識開始,畢竟程式語言是跟計算機交流的語言。計算機分為硬體系統和軟體系統,從硬體系統說起,硬體系統就是大家可以看得到摸得著的計算機系統,大部分都藏在主機箱中,硬體系統有很多,這裡就說一些主要的 1.cpu,這個就是 處理器,計算機的運算核心,控制核心,是計算機最重要...