標籤:bre bsp djang user tcp串連 自己的 .com root fetch
一、web架構
web架構(web framwork)是一種開發架構,用來支援動態網站,網路應用和網路服務的開發。這大多數的web架構提供了一套開發和部署網站的方式,也為web行為提供了一套通用的方法。web架構已經實現了很多功能,開發人員使用架構提供的方法並且完成自己的商務邏輯,就能快速開發web應用了。瀏覽器和伺服器的是基於HTTP協議進行通訊的。也可以說web架構就是在以上十幾行代碼基礎張擴充出來的,有很多簡單方便使用的方法,大大提高了開發的效率。
二、wsgir模組
最簡單的Web應用就是先把HTML用檔案儲存好,用一個現成的HTTP伺服器軟體,接收使用者請求,從檔案中讀取HTML,返回。
如果要動態產生HTML,就需要把上述步驟自己來實現。不過,接受HTTP請求、解析HTTP請求、發送HTTP響應都是苦力活,如果我們自己來寫這些底層代碼,還沒開始寫動態HTML呢,就得花個把月去讀HTTP規範。
正確的做法是底層代碼由專門的伺服器軟體實現,我們用Python專註於產生HTML文檔。因為我們不希望接觸到TCP串連、HTTP原始請求和響應格式,所以,需要一個統一的介面協議來實現這樣的伺服器軟體,讓我們專心用Python編寫Web業務。這個介面就是WSGI:Web Server Gateway Interface。而wsgiref模組就是python基於wsgi協議開發的服務模組。
wsgiref
from wsgiref.simple_server import make_serverdef application(environ, start_response): start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)]) return [b‘<h1>Hello, Web!</h1>‘]httpd = make_server(‘127.0.0.1‘, 8080, application)print(‘Servering HTTP on port 8080...‘)# 開始監聽HTTP請求httpd.serve_forever()
三、DIY一個web架構
models.py
import pymysql# 串連資料庫conn = pymysql.connect(host=‘IP‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘blog‘) #db:庫名#建立遊標cur = conn.cursor()# sql=‘‘‘# create table userinfo(# id int primary key,# name varchar(32),# password varchar(32)# )‘‘‘# cur.execute(sql)# sql = "insert into userinfo values (%s,%s,%s)"# var = [(1, ‘mike‘, 123), (2, ‘tom‘, 123)]# cur.executemany(sql, var)sql = ("select * from userinfo where name=‘mike‘")cur.execute(sql)# 提交conn.commit()# 關閉指標對象cur.close()# 關閉連線物件conn.close()
開機檔案manage.py
from wsgiref.simple_server import make_serverfrom urls import URLpatterndef applications(environ, start_response): # 當前請求路徑 path = environ.get("PATH_INFO") print(path) start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘), ("Charset", "utf8")]) func = None for item in URLpattern: if path == item[0]: func = item[1] break if func: return [func(environ)] else: return [b"<h1>404!<h1>"]if __name__ == ‘__main__‘: server = make_server("127.0.0.1", 8889, applications) print("伺服器開始啟動") server.serve_forever()
urls.py
URLpattern = ( ("/login", login), ("/favicon.ico", fav),)
views.py
import datetimeimport pymysqlfrom urllib.parse import parse_qsdef login(environ): with open("templates/login.html", "rb") as f: data = f.read() return datadef index(environ): with open("templates/index.html", "rb") as f: data = f.read() return datadef fav(environ): with open("templates/favicon.ico", "rb") as f: data = f.read() return datadef reg(environ): with open("templates/reg.html", "rb") as f: data = f.read() return datadef timer(environ): now = datetime.datetime.now().strftime("%y-%m-%d %x") return now.encode("utf8")def auth(request): try: request_body_size = int(request.get(‘CONTENT_LENGTH‘, 0)) except (ValueError): request_body_size = 0 request_body = request[‘wsgi.input‘].read(request_body_size) data = parse_qs(request_body) user = data.get(b"user")[0].decode("utf-8") pwd = data.get(b"pwd")[0].decode("utf-8") # 串連資料庫 conn = pymysql.connect(host=‘10.1.2.71‘, port=3306, user=‘root‘, passwd=‘testjfz‘, db=‘blog‘) # 建立遊標 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"
login.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <from action="http://127.0.0.1:8080/" method="post"> 使用者名稱<input type="text" name="user"><br> 密碼 <input type="password" name="pwd"><br> <input type="submit"> </from></body></html>
backend.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <h4>歡迎來到登入頁面</h4></body></html>
Django架構開發-web架構