Web 應用 WEB框架 HTTP協議 初識Django

----------------------------財富存在於人的思想裏,你沒找到路,不等於沒有路,你想知道未來要獲得什麼,你必須知道如今應該先作什麼和先放棄什麼!html


[web 應用]java

web應用

Web應用程序是一種能夠經過Web訪問的應用程序,程序的最大好處是用戶很容易訪問應用程序,用戶只須要有瀏覽器便可,不須要再安裝其餘軟件。應用程序有兩種模式C/S、B/S。C/S是客戶端/服務器端程序,也就是說這類程序通常獨立運行。而B/S就是瀏覽器端/服務器端應用程序,這類應用程序通常藉助谷歌,火狐等瀏覽器來運行。WEB應用程序通常是B/S模式。Web應用程序首先是「應用程序」,和用標準的程序語言,如java,python等編寫出來的程序沒有什麼本質上的不一樣。在網絡編程的意義下,瀏覽器是一個socket客戶端,服務器是一個socket服務端。python

複製代碼
import socket

def handle_request(client):

    request_data = client.recv(1024)
    print("request_data: ",request_data)

    client.send("HTTP/1.1 200 OK\r\nstatus: 200\r\nContent-Type:text/html\r\n\r\n".encode("utf8"))
    client.send("<h1>Hello, luffycity!</h1><img src=''>".encode("utf8"))

def main():

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost',8812))
    sock.listen(5)

    while True:
        print("the server is waiting for client-connection....")
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()

if __name__ == '__main__':

    main()

 

上節回顧jquery

1 jquery的each循環

$.each([111,222,333],function(i,j){

})
$("p").each(function(){
$(this)
})

2 節點操做
1 建立節點 $("<p>")
2 添加節點
$("父節點").append($("<p>"))
$("父節點").append("<p>123</p>")

3 刪除節點
$("刪除節點").remove()
$("刪除節點").empty()

4 替換節點
$("被替換節點").replaceWith("新節點")

5 拷貝節點
$("拷貝節點").clone()

3 bootstrap
柵格系統(******)
表格
表單
按鈕
模態對話框
導航欄

WEB
1 web應用程序

2 http協議
https://www.baidu.com/s?ie=utf-8&f=8
URL:協議/域名:端口/路徑?請求數據

通訊雙方 瀏覽器,服務器應用程序

客戶端的瀏覽器-----------------服務器應用程序web

http協議特性:
1 基於TCP/IP協議
2 基於請求-響應模式
3 無狀態保存(******)
4 無鏈接

http協議格式:
請求協議格式
客戶端的瀏覽器----------------->服務器應用程序
<----------------
響應協議格式
請求協議格式:
"GET 路徑?user=yuan&pwd=123 HTTP/1.1 # 請求首行
user-agent: Windows NT Chrome, # 請求頭
accept-encoding: gzip, deflate, # 請求頭
k1:v1,# 請求頭
空行
"

"POST 路徑?user=yuan&pwd=123 HTTP/1.1 # 請求首行
user-agent: Windows NT Chrome, # 請求頭
accept-encoding: gzip, deflate, # 請求頭
k1:v1,# 請求頭
空行
user=yuan&pwd=123 # 請求體:存放請求數據(只有POST請求才有請求體)
"
響應協議格式:

"HTTP/1.1 200 OK # 響應首行
content-length: 29878, # 響應頭
date: Fri, 28 Dec 2018 01:43:30 GMT # 響應頭
server: JDWS/2.0 # 響應頭
空行
響應體
"

3 Django

MVC

C: controller 控制器(url分發和視圖函數)
V: 存放html文件
M: model:數據庫操做

MTV
url分發控制器
V:視圖函數
Tempates:存放html文件
M:model:數據庫操做


Django命令:
1 建立Django項目: django-admin startproject mysite
manage.py ----- Django項目裏面的工具,經過它能夠調用django shell和數據庫等。
settings.py ---- 包含了項目的默認設置,包括數據庫信息,調試標誌以及其餘一些工做的變量。
urls.py ----- 負責把URL模式映射到應用程序shell

2 建立一個應用: python manage.py startapp app01
views.py: 存放試圖函數
models.py: 存放數據庫表

3 項目啓動
python manage.py runserver IP:8000 數據庫


[Web框架]django

web框架

Web框架(Web framework)是一種開發框架,用來支持動態網站、網絡應用和網絡服務的開發。這大多數的web框架提供了一套開發和部署網站的方式,也爲web行爲提供了一套通用的方法。web框架已經實現了不少功能,開發人員使用框架提供的方法而且完成本身的業務邏輯,就能快速開發web應用了。瀏覽器和服務器的是基於HTTP協議進行通訊的。也能夠說web框架就是在以上十幾行代碼基礎張擴展出來的,有不少簡單方便使用的方法,大大提升了開發的效率。編程

wsgiref模塊

最簡單的Web應用就是先把HTML用文件保存好,用一個現成的HTTP服務器軟件,接收用戶請求,從文件中讀取HTML,返回。bootstrap

若是要動態生成HTML,就須要把上述步驟本身來實現。不過,接受HTTP請求、解析HTTP請求、發送HTTP響應都是苦力活,若是咱們本身來寫這些底層代碼,還沒開始寫動態HTML呢,就得花個把月去讀HTTP規範。

正確的作法是底層代碼由專門的服務器軟件實現,咱們用Python專一於生成HTML文檔。由於咱們不但願接觸到TCP鏈接、HTTP原始請求和響應格式,因此,須要一個統一的接口協議來實現這樣的服務器軟件,讓咱們專心用Python編寫Web業務。這個接口就是WSGI:Web Server Gateway Interface。而wsgiref模塊就是python基於wsgi協議開發的服務模塊。

複製代碼
from wsgiref.simple_server import make_server


def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, web!</h1>']


httpd = make_server('', 8080, application)

print('Serving HTTP on port 8000...')
# 開始監聽HTTP請求:
httpd.serve_forever()




[HTTP協議]

http協議簡介

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於萬維網(WWW:World Wide Web )服務器與本地瀏覽器之間傳輸超文本的傳送協議。

HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,通過幾年的使用與發展,獲得不斷地完善和擴展。HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。

http協議特性

 

(1) 基於TCP/IP

http協議是基於TCP/IP協議之上的應用層協議。

(2) 基於請求-響應模式

HTTP協議規定,請求從客戶端發出,最後服務器端響應該請求並 返回。換句話說,確定是先從客戶端開始創建通訊的,服務器端在沒有 接收到請求以前不會發送響應

(3) 無狀態保存

HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議 自身不對請求和響應之間的通訊狀態進行保存。也就是說在HTTP這個 級別,協議對於發送過的請求或響應都不作持久化處理。

使用HTTP協議,每當有新的請求發送時,就會有對應的新響應產 生。協議自己並不保留以前一切的請求或響應報文的信息。這是爲了更快地處理大量事務,確保協議的可伸縮性,而特地把HTTP協議設計成 如此簡單的。但是,隨着Web的不斷髮展,因無狀態而致使業務處理變得棘手 的狀況增多了。好比,用戶登陸到一家購物網站,即便他跳轉到該站的 其餘頁面後,也須要能繼續保持登陸狀態。針對這個實例,網站爲了能 夠掌握是誰送出的請求,須要保存用戶的狀態。HTTP/1.1雖然是無狀態協議,但爲了實現指望的保持狀態功能, 因而引入了Cookie技術。有了Cookie再用HTTP協議通訊,就能夠管 理狀態了。有關Cookie的詳細內容稍後講解。

無鏈接

無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。

http請求協議與響應協議

http協議包含由瀏覽器發送數據到服務器須要遵循的請求協議與服務器發送數據到瀏覽器須要遵循的請求協議。用於HTTP協議交互的信被爲HTTP報文。請求端(客戶端)的HTTP報文 作請求報文,響應端(服務器端)的 作響應報文。HTTP報文自己是由多行數據構成的字 文本。 

請求協議

請求格式

請求方式: get與post請求

  • GET提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連,如EditBook?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的請求體中.
  • GET提交的數據大小有限制(由於瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.
  • GET與POST請求在服務端獲取請求數據方式不一樣。

響應協議

響應格式

響應狀態碼

狀態碼的職 是當客戶端向服務器端發送請求時, 返回的請求 結果。藉助狀態碼,用戶能夠知道服務器端是正常 理了請求,仍是出 現了 。狀態碼如200 OK,以3位數字和緣由 成。數字中的 一位指定了響應 別,後兩位無分 。響應 別有以5種。

 

演示示例:

複製代碼
import socket


sock=socket.socket()
sock.bind(("127.0.0.1",8808))
sock.listen(5)

while 1:
    print("server waiting.....")
    conn,addr=sock.accept()
    data=conn.recv(1024)
    print("data",data)

    # 讀取html文件
    with open("login.html","rb") as f:
        data=f.read()

    conn.send((b"HTTP/1.1 200 OK\r\n\r\n%s"%data))
    conn.close()
複製代碼

login.html

複製代碼
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>



<form action="" method="post">
    用戶名 <input type="text" name="user">
    密碼 <input type="password" name="pwd">
    <input type="submit">
</form>

</body>
</html>
相關文章
相關標籤/搜索