日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Web 框架

發(fā)布時(shí)間:2023/12/2 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web 框架 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、Web框架

Web框架(Web framework)是一種開(kāi)發(fā)框架,用來(lái)支持動(dòng)態(tài)網(wǎng)站、網(wǎng)絡(luò)應(yīng)用和網(wǎng)絡(luò)服務(wù)的開(kāi)發(fā)。這大多數(shù)的web框架提供了一套開(kāi)發(fā)和部署網(wǎng)站的方式,也為web行為提供了一套通用的方法。web框架已經(jīng)實(shí)現(xiàn)了很多功能,開(kāi)發(fā)人員使用框架提供的方法并且完成自己的業(yè)務(wù)邏輯,就能快速開(kāi)發(fā)web應(yīng)用了。瀏覽器和服務(wù)器的是基于HTTP協(xié)議進(jìn)行通信的。也可以說(shuō)web框架就是在以上十幾行代碼基礎(chǔ)張擴(kuò)展出來(lái)的,有很多簡(jiǎn)單方便使用的方法,大大提高了開(kāi)發(fā)的效率。

wsgiref模塊

最簡(jiǎn)單的Web應(yīng)用就是先把HTML用文件保存好,用一個(gè)現(xiàn)成的HTTP服務(wù)器軟件,接收用戶請(qǐng)求,從文件中讀取HTML,返回。

如果要?jiǎng)討B(tài)生成HTML,就需要把上述步驟自己來(lái)實(shí)現(xiàn)。不過(guò),接受HTTP請(qǐng)求、解析HTTP請(qǐng)求、發(fā)送HTTP響應(yīng)都是苦力活,如果我們自己來(lái)寫(xiě)這些底層代碼,還沒(méi)開(kāi)始寫(xiě)動(dòng)態(tài)HTML呢,就得花個(gè)把月去讀HTTP規(guī)范。

正確的做法是底層代碼由專門(mén)的服務(wù)器軟件實(shí)現(xiàn),我們用Python專注于生成HTML文檔。因?yàn)槲覀儾幌M佑|到TCP連接、HTTP原始請(qǐng)求和響應(yīng)格式,所以,需要一個(gè)統(tǒng)一的接口協(xié)議來(lái)實(shí)現(xiàn)這樣的服務(wù)器軟件,讓我們專心用Python編寫(xiě)Web業(yè)務(wù)。這個(gè)接口就是WSGI:Web Server Gateway Interface。而wsgiref模塊就是python基于wsgi協(xié)議開(kāi)發(fā)的服務(wù)模塊。

from wsgiref.simple_server import make_serverdef mya(environ, start_response):print(environ)start_response('200 OK', [('Content-Type', 'text/html')])if environ.get('PATH_INFO') == '/index':with open('index.html','rb') as f:data=f.read()elif environ.get('PATH_INFO') == '/login':with open('login.html', 'rb') as f:data = f.read()else:data=b'<h1>Hello, web!</h1>'return [data]if __name__ == '__main__':myserver = make_server('', 8011, mya)print('監(jiān)聽(tīng)8010')myserver.serve_forever()wsgiref簡(jiǎn)單應(yīng)用 wsgiref應(yīng)用

2、手寫(xiě)Web框架

models.py

鏈接數(shù)據(jù)庫(kù)返回字典格式:
cursor=pymysql.cursors.DictCursor

import pymysql #連接數(shù)據(jù)庫(kù) conn = pymysql.connect(host='127.0.0.1',port= 3306,user = 'root',passwd='123456',db='web') #db:庫(kù)名 #創(chuàng)建游標(biāo) cur = conn.cursor()sql=''' create table userinfo(id INT PRIMARY KEY ,name VARCHAR(32) ,password VARCHAR(32) )'''cur.execute(sql)#提交 conn.commit() #關(guān)閉指針對(duì)象 cur.close() #關(guān)閉連接對(duì)象 conn.close()創(chuàng)建數(shù)據(jù)表 創(chuàng)建數(shù)據(jù)表

myserver.py

from wsgiref.simple_server import make_serverfrom urls import url_pattersdef mya(environ, start_response):# print(environ)start_response('200 OK', [('Content-Type', 'text/html')])func = Nonefor item in url_patters:if item[0] == environ.get('PATH_INFO'):func = item[1]breakif func:data = func(environ)return [data]else:return [b'404']if __name__ == '__main__':myserver = make_server('', 8011, mya)print('監(jiān)聽(tīng)8010')myserver.serve_forever()啟動(dòng)文件 啟動(dòng)文件

urls.py

from views import * url_patters = [('/login', login),('/index', index),('/time', time), ]路由配置 路由配置

views.py

def index(environ):with open('templates/index.html', 'rb') as f:data = f.read()return data def time(environ):import datetimenow=datetime.datetime.now().strftime('%y-%m-%d %X')print(now)return now.encode('utf-8') from urllib.parse import parse_qs import pymysql def login(request):if request.get("REQUEST_METHOD") == "POST":try:request_body_size = int(request.get('CONTENT_LENGTH', 0))except (ValueError):request_body_size = 0request_body = request['wsgi.input'].read(request_body_size)data = parse_qs(request_body)user = data.get(b"user")[0].decode("utf8")pwd = data.get(b"pwd")[0].decode("utf8")# 連接數(shù)據(jù)庫(kù)conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='web') # db:庫(kù)名# 創(chuàng)建游標(biāo)cur = conn.cursor()SQL = "select * from userinfo WHERE NAME ='%s' AND PASSWORD ='%s'" % (user, pwd)cur.execute(SQL)if cur.fetchone():f = open("templates/backend.html", "rb")data = f.read()data = data.decode("utf8")return data.encode("utf8")else:print("OK456")return b"user or pwd is wrong"else:f = open("templates/login.html", "rb")data = f.read()f.close()return data視圖函數(shù) 視圖函數(shù)

tempaltes下

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> 登錄成功 </body> </html>backend.html backend.Html <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> index </body> </html>index index <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h4>登錄頁(yè)面</h4> <form action="http://127.0.0.1:8011/login" method="post">用戶名 <input type="text" name="user">密碼 <input type="text" name="pwd"><input type="submit"> </form> </body> </html>login.html login.html

3、其他SOCKET服務(wù)端

'cgi': CGIServer,'flup': FlupFCGIServer,'wsgiref': WSGIRefServer,'waitress': WaitressServer,'cherrypy': CherryPyServer,'paste': PasteServer,'fapws3': FapwsServer,'tornado': TornadoServer,'gae': AppEngineServer,'twisted': TwistedServer,'diesel': DieselServer,'meinheld': MeinheldServer,'gunicorn': GunicornServer,'eventlet': EventletServer,'gevent': GeventServer,'geventSocketIO':GeventSocketIOServer,'rocket': RocketServer,'bjoern' : BjoernServer,'auto': AutoServer,

都遵循一個(gè)協(xié)議wsgi(Web Server Gateway Interface web服務(wù)網(wǎng)關(guān)接口)

轉(zhuǎn)載于:https://www.cnblogs.com/gwklan/p/10981678.html

總結(jié)

以上是生活随笔為你收集整理的Web 框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。