Django架構開發-web架構

來源:互聯網
上載者:User

標籤: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架構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.