如何利用web mini框架實現乙個伺服器

2021-08-19 10:02:11 字數 3767 閱讀 5180

import socket

import re

import multiprocessing

import mini_web_06

class webserver(object):

#乙個功能乙個函式

#相關的功能合成乙個類

def __init__(self):

# 1. 建立套接字

self.tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)

self.tcp_server_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

# 2. 繫結

self.tcp_server_socket.bind(("", 7890))

# 3. 變為監聽套接字

self.tcp_server_socket.listen(128)

def service_client(self,new_socket):

"""為這個客戶端返回資料"""

# 1. 接收瀏覽器傳送過來的請求 ,即http請求

#判斷靜態或者動態

#.py這個是動態

if file_name.endswith(".py"):

# 呼叫乙個函式得到乙個body結果

#建立乙個字典

url_dict = dict()

url_dict['file_name'] = file_name

#根據不同的位址返回不同的頁面

#把頭部的字段拼接

for temp in self.params:

head += "%s:%s\r\n"%(temp[0],temp[1])

#傳送content = head + "\r\n" + body

new_socket.send(content.encode("utf-8"))

else:

# 2. 返回http格式的資料,給瀏覽器

# 2.1 準備傳送給瀏覽器的資料---header

# 2.2 準備傳送給瀏覽器的資料---boy

# response += "hahahhah"

# 將response header傳送給瀏覽器

new_socket.send(response.encode("utf-8"))

# 將response body傳送給瀏覽器

new_socket.send(html_content)

# 關閉套接

new_socket.close()

def run_server(self):

"""用來完成整體的控制"""

while true:

# 4. 等待新客戶端的鏈結

new_socket, client_addr = self.tcp_server_socket.accept()

# 5. 為這個客戶端服務

p = multiprocessing.process(target=self.service_client, args=(new_socket,))

p.start()

new_socket.close()

# 關閉監聽套接字

tcp_server_socket.close()

def head_params(self,stauts,params):

#存資料

self.stauts = stauts

self.params = params

def main():

server = webserver()

server.run_server()

ifname== 「main「:

main()

import re

url_dict = dict()

def route(file_name):

def set_fun(func):

def call_fun(*args, **kwargs):

return func(*args, **kwargs)

# 存起來

url_dict[file_name] = call_fun

return call_fun

return set_fun

@route(「/index.py」)

def index(match):

return 「index show page!」

@route(「/center.py」)

def center(match):

return 「center show page!」

@route(r」/add/(\d+).py」) #多個位址對應乙個函式/add/8998.py

def add(match):

return 「add%s」%match.group(1)

# 多個if使用字典去替換

# url_dict =

#用正則去迴圈去字典去匹配位址,如果匹配到了資料返回

for key,func in url_dict.items():

#正則match = re.match(key,file_name) #路徑匹配

if match:

#說明匹配到了

return func(match)

#到沒有匹配

return "not page is find!"

如何利用BaseTestCase實現單元測試

雖然 basetestcase system 是屬於主線程的,在執行 test case 後,basetestcase system 將接管主線程的操作權,然後使用 basetestcase system 同樣可以完成單元測試,原因很簡單,還是因為 basetestcase system 它是基於 ...

Django框架利用ajax實現批量匯入資料功能

url.py 複製 如下 url r workimpor程式設計客棧t keywork.views.import keywork name import keywork view.py from keywork.models import devdata from django.http impor...

如何學習和利用深度學習演算法框架

人工智慧技術雖不斷發展,但像深度學習這樣的在學術和工業界皆是顛覆性的技術實在是十年難遇。可惜的是,理解和靈活應用深度學習並不容易,尤其是結構複雜的數學模型。有不少感興趣的人 從入門到放棄 本場 chat 主要針對深度卷積神經網路,具體內容如下 深度學習對於初學者而言,需要注意些什麼問題,如何快速入門...