基於wsgiref模組寫的web框架

2021-10-22 06:55:42 字數 3211 閱讀 8448

基於wsgiref web框架

from wsgiref.******_server import make_server

from urls import urls

from views import

*def

run(env, response)

:'''

:param env: 請求相關的所有資料型別

:param response: 相應相關的資料型別

:return: 返回給瀏覽器的資料

'''# print(env) # env 是乙個大字典,wsgiref模組將http格式的資料轉化成大字典

response(

'200 ok',[

])current_path = env.get(

'path_info'

) func =

none

for url in urls:

if current_path == url[0]

: func = url[1]

break

# 匹配到乙個後應該立刻結束for迴圈

if func:

res = func(env)

else

: res = error(env)

return

[res.encode(

'utf-8')]

if __name__ ==

'__main__'

: server = make_server(

'127.0.0.1'

,8080

,run)

'''

會實時監聽127.0.0.1:8080 位址,只要客戶端來了都會交給run函式處理(會自動加括號『run()'觸法run函式的執行)

flask啟動原始碼

make_server('127.0.0.1',8080,obj)

也會自動給obj加括號

__call__

'''server.serve_forever(

)# 啟動伺服器

urls 檔案

from views import

*# url與函式的對應關係

urls =[(

'/index'

, index),(

'/login'

, login),(

'/***'

, ***),(

'/get_time'

, get_time),(

'/get_dict'

, get_dict)

]

views 檔案

def

index

(env)

:return

'index'

deflogin

(env)

:return

'login'

deferror

(env)

:return

'404'

def***

(env)

:with

open

(r'templates/02myxx.html'

,'r'

, encoding=

'utf-8'

)as f:

return f.read(

)import datetime

defget_time

(env)

: current_time = datetime.datetime.now(

).strftime(

'%y-%m-%d-%x')#

with

open

(r'templates/03mytime.html'

,'r'

,encoding=

'utf-8'

)as f:

data = f.read(

)# data就是一串字串

data = data.replace(

'dddd'

, current_time)

return data

''' jinja2

'''from jinja2 import template

defget_dict

(env)

: user_dict =

with

open

('templates/04get_dict.html'

,'r'

,encoding=

'utf-8'

)as f:

data = f.read(

) tmp = template(data)

res = tmp.render(user =user_dict)

# 給get_dict.html 傳遞乙個值,也頁面上通過變數名user就能夠拿到user_dict

return res

import pymysql

defget_user

(env)

: coon = pymysql.connect(

host =

'127.0.0.1'

, port =

3306

, user =

'root'

, password =

'2802017872liu'

, db =

'day59'

, charset =

'utf8'

, autoicommit =

true

) cursor = coon.cursor(cursor=pymysql.cursors.dictcursor)

sql =

'select * from userinfo'

affect_rows = cursor.execute(sql)

dat_list = cursor.fetchall(

)# 將獲取到的資料傳輸給html檔案

基於IHttpHandler 的非標準webapi

基於ihttphandler 的非標準webapi 此篇文章是本菜鳥對於公司大神自研框架的研究,也就是扒 如有不足請指出 先舉個栗子,在命名空間abc.websiteapi下有systemuserapiapi類,類中有create這個方法 namespace abc.websiteapi 想要做到通...

Linux專案 基於HTTP協議的自主web伺服器

前言在學習了網路基礎方面的知識後,想要將自己所學習的網路知識應用到實踐中,因此,模擬實現乙個基於http協議的小型web伺服器 專案描述 採用b s模型或者c s模型 瀏覽器 伺服器模型 編寫支援中小型應用的http,理解常見網際網路應用行為 從上網到關閉瀏覽器的所有操作 模擬實現了使用瀏覽器上網背...

如何在騰訊雲上發布基於tomcat的web專案

目錄 這裡就不在贅述了。因為我用的是window server2012,該作業系統自動遮蔽掉ping命令了,所以頭疼了好久。因為專案只需要用到80埠,所以只需要開放80埠就行,當然也可以根據需要,開放別的埠。甚至關閉防火牆 4.1 開啟控制面板控制面板 系統和安全 windows 防火牆。點選高階設...