日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 全栈开发,Day66(web应用,http协议简介,web框架)

發布時間:2025/3/20 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 全栈开发,Day66(web应用,http协议简介,web框架) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、web應用

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

?

B/S架構,是瀏覽器先發送請求,服務器響應請求,返回數據給客戶端。

簡單socket服務器

舉例:

新建server.py文件,代碼如下:

import socket sk = socket.socket() sk.bind(('127.0.0.1',8800)) sk.listen()while True:print('server waiting...')conn,addr = sk.accept()# 服務器首先是接收數據data = conn.recv(1024)# 打印接收信息print('data',data)# 發送給客戶端conn.send(b'Hi,JD')conn.close() sk.close() View Code

啟動py文件,頁面訪問url:

http://127.0.0.1:8800/

網頁輸出:

上面提示無效的響應,為什么?是因為服務器響應信息,不符合HTTP規范。

查看pycharm控制臺的輸出信息

data b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8800\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=IwhDDZ9RiKQUV4T5CbzGIhAcVZNxYuvAYdS7RKc0tmOmk02hHWfQ8sWnIGrN1pzC\r\n\r\n' View Code

它才是一個完整的HTTP請求信息。

?

更改socket代碼,將conn.send改成下面的

conn.send(b'HTTP://1.1 200 OK\r\n\r\nHi,JD')

重啟py文件,再次訪問頁面

頁面輸出:?Hi,JD

?

修飾返回信息

響應的信息,可以加入一些html標簽,比如H1和img

import socket sk = socket.socket() sk.bind(('127.0.0.1',8800)) sk.listen()while True:print('server waiting...')conn,addr = sk.accept()# 服務器首先是接收數據data = conn.recv(1024)# 打印接收信息print('data',data)# 發送給客戶端html=b'<h1>Hi,JD</h1><img src="https://img20.360buyimg.com/da/jfs/t24334/1/45221916/115081/515da78a/5b2393d4N05f8a4c2.gif?t=1529495461508"/>'conn.send(b'HTTP://1.1 200 OK\r\n\r\n%s'%html)conn.close() sk.close() View Code

重啟py文件,再次訪問頁面,效果如下:

但是用字符串拼接,太麻煩了。

?

登錄頁面

可以引入一個index.html文件,來展示頁面

新建文件index.html,代碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <form action=""><lable>用戶名</lable><input type="text"><lable>密碼</lable><input type="text"><input type="submit"> </form> </body> </html> View Code

修改server.py,代碼如下:

import socket sk = socket.socket() sk.bind(('127.0.0.1',8800)) sk.listen()while True:print('server waiting...')conn,addr = sk.accept()# 服務器首先是接收數據data = conn.recv(1024)# 打印接收信息print('data',data)# 發送給客戶端with open("index.html","rb") as f: #必須使用rb模式打開data = f.read() # 讀取所有內容conn.send(b'HTTP://1.1 200 OK\r\n\r\n%s'%data)conn.close() sk.close() View Code

重啟py文件,再次訪問頁面,效果如下:

?

二、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協議之上的應用層協議。

請求協議(瀏覽器-->服務器)

響應協議(服務器-->瀏覽器)

比如:張三要發送一段信息為李四。發送的信息為

s = "zhangsan--24--shanghai"

那么李四接收的時候,必須用--切割才能得到信息。否則李四不知道,這段信息是干啥的。這個是一個簡單的基于內容的協議。

對于HTTP而言,服務器和瀏覽器雙方遵循了共同的協議。

沒有請求,就沒有響應

?

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

HTTP協議規定,請求從客戶端發出,最后服務器端響應該請求并 返回。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有 接收到請求之前不會發送響應

?

?

(3) 無狀態保存

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

?

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

?

無連接

無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。

比如訪問jd網頁,服務器響應請求,返回html代碼給瀏覽器。瀏覽器接收后,連接就斷開了。

擴展:還有一個短連接,比如請求響應之后,維持3秒。如果客戶端沒有操作,連接就斷開了。

?

http請求協議與響應協議

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

?

請求協議

請求格式

?

注意:name=ueno&age=37 上面有一個空行。

Host和Conten-Length 之間的內容屬于請求體,它是用來解釋本次請求的信息。

?

請求方式: get與post請求

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

響應協議

響應格式

請求協議(瀏覽器-->服務器)

" 請求首行:請求協議 url 請求方式 請求頭: 它是key:value形式的數據請求體...(注意:請求體和請求頭,必須有一個空行,也就是/r/n) "

看下面2個url

https://passport.jd.com/new/login.aspx?ReturnUrl=http%3A%2F%2Fhome.jd.com%2Fhttp://127.0.0.1:8000/books/113/?age=18

第一個url使用了域名,它涉及到一個dns解析過程。域名后面沒有端口,表示使用默認端口。https端口為443

第二個url,端口之后和問號之間的部分,叫做路徑。不管多少層,只要沒遇到問號,都屬于路徑部分。

問號之后的部分,叫做數據。

看這個url: https://www.jd.com/? ?它的路徑就是 / 。/表示根路徑

所以一個完整的url由4部分組成:協議、域名/IP和端口、路徑、數據

?

查看Pycharm控制臺,使用谷歌瀏覽器訪問一次網頁。實際上,是有2次請求的。

data b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8800\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=IwhDDZ9RiKQUV4T5CbzGIhAcVZNxYuvAYdS7RKc0tmOmk02hHWfQ8sWnIGrN1pzC\r\n\r\n'server waiting...data b'GET /favicon.ico HTTP/1.1\r\nHost: 127.0.0.1:8800\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nReferer: http://127.0.0.1:8800/\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=IwhDDZ9RiKQUV4T5CbzGIhAcVZNxYuvAYdS7RKc0tmOmk02hHWfQ8sWnIGrN1pzC\r\n\r\n' View Code

第一次,是正常請求。第二次是,favicon.ico請求,它是網頁圖標問題。這個請求,忽略即可。

將/r/n替換為換行,得到以下信息

GET / HTTP/1.1 Host: 127.0.0.1:8800 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: csrftoken=IwhDDZ9RiKQUV4T5CbzGIhAcVZNxYuvAYdS7RKc0tmOmk02hHWfQ8sWnIGrN1pzC View Code

可以看到,GET的數據,是放到url后面的。POST數據是放在請求體后面的。

打個比方:比如早期時候,用的信封。get相當于,直接寫在封面上了。post相當于寫在信封里面了。

?

舉例:

使用表單模擬post請求

更改index.html,代碼如下:

注意:action不能和當前網頁路徑一樣,比如http://127.0.0.1:8800,否則提交之后,頁面會卡死。

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <form action="/abc" method="post"><lable>用戶名</lable><input type="text" name="user"/><lable>密碼</lable><input type="password" name="pwd"/><input type="submit"/> </form> </body> </html> View Code

重啟server.py文件,訪問頁面

輸入用戶名和密碼,點擊提交

查看pycharm的控制臺,查看post請求

data b'POST /abc HTTP/1.1\r\nHost: 127.0.0.1:8800\r\nConnection: keep-alive\r\nContent-Length: 17\r\nCache-Control: max-age=0\r\nOrigin: http://127.0.0.1:8800\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nReferer: http://127.0.0.1:8800/abc?user=xiao&pwd=123\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=IwhDDZ9RiKQUV4T5CbzGIhAcVZNxYuvAYdS7RKc0tmOmk02hHWfQ8sWnIGrN1pzC\r\n\r\nuser=xiao&pwd=123' View Code

看最后的信息,就可以看到user=xiao&pwd=123'

?

模擬get請求

修改index.html,代碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <form action="" method="get"><lable>用戶名</lable><input type="text" name="user"/><lable>密碼</lable><input type="password" name="pwd"/><input type="submit"/> </form> </body> </html> View Code

輸入用戶名和密碼,點擊提交

發現url就發生變化了,數據保存到url中

?

?響應協議(服務器-->瀏覽器)

響應首行: 請求協議 協議碼 OK 響應頭:key:value響應體

注意:響應體和響應頭有一個空行。

響應頭,可要可不要。比如上面的socket,響應信息,就沒有響應頭。

響應體,是瀏覽器真正加載的內容。

使用谷歌瀏覽器打開網頁,按f12打開控制臺-->networkd-->點擊左邊的連接-->Respone,這里面就是響應體

?

瀏覽器發送也是一堆字符串
瀏覽器從服務器得到響應信息,也是拿到一堆字符串

?

增加一個響應頭,比如Content-Type: text/html

修改server.py,代碼如下:

#!/usr/bin/env python # -*- coding: utf-8 -*- import socket sk = socket.socket() sk.bind(('127.0.0.1',8800)) sk.listen(5)while True:print('server waiting...')conn,addr = sk.accept()# 服務器首先是接收數據data = conn.recv(1024)# 打印接收信息print('data',data)# 發送給客戶端with open("index.html","rb") as f: #必須使用rb模式打開data = f.read() # 讀取所有內容conn.send(b'HTTP://1.1 200 OK\r\nContent-Type: text/html\r\n\r\n%s'%data)conn.close() sk.close() View Code

重啟socket.py,打開控制臺,查看網絡。訪問網頁http://127.0.0.1:8800/

發現多了一個響應頭

請求頭和響應頭,都是很有意義的
請求頭有啥用呢?
比如這個:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36

爬蟲應用,如果沒有帶user-agent。那么服務器,就拒絕請求。

響應式頁面,也是通過user-agent來判斷的

?

響應狀態碼

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

?以后會大量用到3xx狀態

301 永久性重定向

永久性重定向。該狀態碼表示請求的資源已被分配了新的UR1,以后應使用資源現在所指的URI。也就是說,如果已經把資源對應的UR1保存為書簽了,這時應該按Location首部字段提示的UR1重新保存。
像下方給出的請求URI,當指定資源路徑的最后忘記添加斜杠"/",就會產生301狀態碼。

http://example.com/sample

301使用2次請求。 一次是初始請求,第二次是訪問新的鏈接。

?

302臨時性重定向

?

?

臨時性重定向。該狀態碼表示請求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問。

和301MovedPermanently狀態碼相似,但302狀態碼代表的資源不是被永久移動,只是臨時性質的。換句話說,已移動的資源對應的URI將來還有可能發生改變。比如,用戶把UR丨保存成書簽,但不會像301狀態碼出現時那樣去更新書簽,而是仍舊保留返回302狀態碼的頁面對應的UR1。

?

注意:面試會問道301和302的區別

《HTTP圖解》這本書可以看一下
還有一本,《HTTP權威指南》這個太復雜了,目前可以不看。

三、web框架

Web框架

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

wsgiref模塊

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

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

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

?

由于url路徑在請求信息,里面有大量的字符串。比如下面的一段信息:

GET /index/ HTTP/1.1 Host: 127.0.0.1:8800 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: csrftoken=IwhDDZ9RiKQUV4T5CbzGIhAcVZNxYuvAYdS7RKc0tmOmk02hHWfQ8sWnIGrN1pzC View Code

要得到/index/,可以使用正則、split切割...等方式。但是這樣太麻煩了。

現在有一個內置模塊wsgiref,它可以解析這些信息,并返回一個字典格式。那么就可以方便取數據了。

?

舉例:

新建文件wsgiref_start.py,內容如下:

#!/usr/bin/env python # -*- coding: utf-8 -*- from wsgiref.simple_server import make_server#所有請求信息都在environ,它會傳給application def application(environ, start_response):print(environ) #打印environ信息start_response('200 OK', [('Content-Type', 'text/html')])return [b'<h1>Hello, web!</h1>']#不寫ip,默認監聽本機ip地址 httpd = make_server('', 8888, application)print('Serving HTTP on port 8888...') # 開始監聽HTTP請求: httpd.serve_forever() View Code

運行py文件,訪問頁面

如果訪問頁面失敗,嘗試換一個端口,就可以了。

?

DIY一個web框架

訪問首頁,查看Pycharm控制臺輸出信息,這就是完整的environ信息,返回的是字典格式。

{'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>, 'PROCESSOR_ARCHITECTURE': 'AMD64', 'HOMEPATH': '\\Users\\xiao', 'PATH': 'C:\\Python35\\Scripts\\;C:\\Python35\\;C:\\Program Files\\Python36\\Scripts\\;C:\\Program Files\\Python36\\;C:\\Program Files (x86)\\Common Files\\NetSarang;C:\\Program Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\\iCLS Client\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\;D:\\Program Files\\Git\\bin;C:\\Program Files (x86)\\Windows Kits\\8.1\\Windows Performance Toolkit\\;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;D:\\Program Files (x86)\\ffmpeg-20180518-16b4f97-win64-shared\\bin;C:\\Program Files\\nodejs\\;D:\\Program Files (x86)\\mysql-5.7.22-winx64\\bin;C:\\Users\\xiao\\AppData\\Local\\Microsoft\\WindowsApps;D:\\Program Files\\Git\\bin;C:\\Users\\xiao\\AppData\\Roaming\\npm;C:\\Python35\\lib\\site-packages\\numpy\\.libs', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe', 'HTTP_ACCEPT': 'image/webp,image/apng,image/*,*/*;q=0.8', 'PATH_INFO': '/favicon.ico', 'HTTP_REFERER': 'http://127.0.0.1:8888/', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'PYCHARM_MATPLOTLIB_PORT': '50111', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36', 'LOCALAPPDATA': 'C:\\Users\\xiao\\AppData\\Local', 'PROGRAMDATA': 'C:\\ProgramData', 'SERVER_PROTOCOL': 'HTTP/1.1', 'WINDIR': 'C:\\WINDOWS', 'VS140COMNTOOLS': 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Tools\\', 'ALLUSERSPROFILE': 'C:\\ProgramData', 'REQUEST_METHOD': 'GET', 'OS': 'Windows_NT', 'USERDOMAIN_ROAMINGPROFILE': 'DESKTOP-CFMVJ8G', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'REMOTE_HOST': '', 'SCRIPT_NAME': '', 'APPDATA': 'C:\\Users\\xiao\\AppData\\Roaming', 'HTTP_HOST': '127.0.0.1:8888', 'wsgi.multiprocess': False, 'GATEWAY_INTERFACE': 'CGI/1.1', 'wsgi.version': (1, 0), 'PROCESSOR_LEVEL': '6', 'SERVER_SOFTWARE': 'WSGIServer/0.2', 'wsgi.file_wrapper': <class 'wsgiref.util.FileWrapper'>, 'COMPUTERNAME': 'DESKTOP-CFMVJ8G', 'SESSIONNAME': 'Console', 'REMOTE_ADDR': '127.0.0.1', 'CONTENT_TYPE': 'text/plain', 'SYSTEMROOT': 'C:\\WINDOWS', 'HTTP_CONNECTION': 'keep-alive', 'TEMP': 'C:\\Users\\xiao\\AppData\\Local\\Temp', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW', 'SERVER_NAME': 'DESKTOP-CFMVJ8G', 'LOGONSERVER': '\\\\DESKTOP-CFMVJ8G', 'PROGRAMW6432': 'C:\\Program Files', 'HOMEDRIVE': 'C:', 'HTTP_ACCEPT_LANGUAGE': 'zh-CN,zh;q=0.9', 'QUERY_STRING': '', 'PUBLIC': 'C:\\Users\\Public', 'PROCESSOR_REVISION': '5e03', 'USERNAME': 'xiao', 'wsgi.run_once': False, 'PYTHONPATH': 'C:\\Program Files\\JetBrains\\PyCharm 2018.1.1\\helpers\\pycharm_matplotlib_backend;E:\\python_script', 'VS90COMNTOOLS': 'D:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\Common7\\Tools\\', 'PYCHARM_HOSTED': '1', 'USERPROFILE': 'C:\\Users\\xiao', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 94 Stepping 3, GenuineIntel', 'TMP': 'C:\\Users\\xiao\\AppData\\Local\\Temp', 'PROGRAMFILES': 'C:\\Program Files', 'wsgi.multithread': True, 'USERDOMAIN': 'DESKTOP-CFMVJ8G', 'HTTP_COOKIE': 'csrftoken=IwhDDZ9RiKQUV4T5CbzGIhAcVZNxYuvAYdS7RKc0tmOmk02hHWfQ8sWnIGrN1pzC', 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules', 'SERVER_PORT': '8888', 'PYTHONUNBUFFERED': '1', 'wsgi.input': <_io.BufferedReader name=340>, 'NUMBER_OF_PROCESSORS': '8', 'SYSTEMDRIVE': 'C:', 'CONTENT_LENGTH': '', 'wsgi.url_scheme': 'http', 'PYTHONIOENCODING': 'UTF-8'} View Code

PATH_INFO就是請求路徑

上面信息太多了,只打印PATH_INFO,更改print(environ)為

print('path:',environ.get("PATH_INFO"))

重啟py文件,再次訪問頁面,查看pycharm控制臺,輸出

path: / 127.0.0.1 - - [20/Jun/2018 23:22:33] "GET / HTTP/1.1" 200 20 127.0.0.1 - - [20/Jun/2018 23:22:33] "GET /favicon.ico HTTP/1.1" 200 20 path: /favicon.ico

得到路徑,就可以根據路徑判斷,來渲染不同的html文件了

創建index.html,代碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h3>Index</h3></body> </html> View Code

創建login.html,代碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <form action="/abc" method="post"><lable>用戶名</lable><input type="text" name="user"/><lable>密碼</lable><input type="password" name="pwd"/><input type="submit"/> </form> </body> </html> View Code

?編輯wsgiref_start.py文件,加入路徑判斷。

#!/usr/bin/env python # -*- coding: utf-8 -*- from wsgiref.simple_server import make_server#所有請求信息都在environ,它會傳給application def application(environ, start_response):# print('path:',environ.get("PATH_INFO"))path = environ.get("PATH_INFO")start_response('200 OK', [('Content-Type', 'text/html')])if path == '/login/': # 注意路徑后面,必須有/with open("login.html","rb") as f:data = f.read()return [data]elif path == '/index/':with open("index.html","rb") as f:data = f.read()return [data]else:return [b"<h1>404</h1>"]#不寫ip,默認監聽本機ip地址 httpd = make_server('', 8888, application)print('Serving HTTP on port 8888...') # 開始監聽HTTP請求: httpd.serve_forever() View Code

重啟py文件,訪問以下url:

http://127.0.0.1:8888/index/

注意:index后面必須有一個/,否則輸出404

頁面輸出:

?

http://127.0.0.1:8888/login/

注意:login后面必須有一個/,否則輸出404

頁面輸出:

?

http://127.0.0.1:8888/abc/

訪問不存在的,頁面輸出:

?

?

將url判斷和頁面輸出部分,封裝成函數,wsgiref_start.py代碼如下:

#!/usr/bin/env python # -*- coding: utf-8 -*- from wsgiref.simple_server import make_server#視圖函數,如果需要用到請求信息,必須要傳environ變量 def login(environ):with open("login.html", "rb") as f:data = f.read()return datadef index(environ):with open("index.html" , "rb") as f:data = f.read()return data#所有請求信息都在environ,它會傳給application def application(environ, start_response):#當前訪問路徑current_path = environ.get("PATH_INFO")#響應給客戶端200狀態start_response('200 OK', [('Content-Type', 'text/html')])#url控制,匹配url時,調用對應的視圖函數urlpatterns = [("/login/", login),("/index/", index),]#初始變量func = None#遍歷url列表for item in urlpatterns:#當列表的url和當前訪問路徑相同時if item[0] == current_path:#將視圖函數賦值給func,注意:這里并沒有執行函數func = item[1]#這里必須要跳出循環break#判斷func變量不為Noneif func:ret = func(environ) # 執行視圖函數,必須傳入environreturn [ret] # 返回給瀏覽器else:return [b"<h1>404</h1>"] # 輸出404頁面#不寫ip,默認監聽本機ip地址 httpd = make_server('', 8888, application)print('Serving HTTP on port 8888...') # 開始監聽HTTP請求: httpd.serve_forever() View Code

重啟py文件,再次訪問上面3個url。訪問結果一致,說明ok了。

?

拆分代碼

上面的代碼,邏輯部分都集中在一個py中,這樣不方便以后的擴展。

比如有30個url,寫30個if判斷嗎?太low了。需要解耦

1. 分離url

新建urls.py文件,代碼如下:

import viewsurlpatterns=[("/login/",views.login),("/index/",views.index),] View Code

2.分離視圖函數

新建views.py文件,代碼如下:

def 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 data View Code

3.分離模板文件,比如html文件

創建目錄templates,將index.html和login.html移動到此目錄

4.修改wsgiref_start.py文件,代碼如下:

from wsgiref.simple_server import make_server from urls import urlpatterns # 導入自定義的urls模塊#所有請求信息都在environ,它會傳給application def application(environ, start_response):#當前訪問路徑current_path = environ.get("PATH_INFO")print(current_path)#響應給客戶端200狀態start_response('200 OK', [('Content-Type', 'text/html')])#初始變量func = None#遍歷url列表for item in urlpatterns:#當列表的url和當前訪問路徑相同時if item[0] == current_path:#將視圖函數賦值給func,注意:這里并沒有執行函數func = item[1]#這里必須要跳出循環break#判斷func變量不為Noneif func:ret = func(environ) # 執行視圖函數,必須傳入environreturn [ret] # 返回給瀏覽器else:return [b"<h1>404</h1>"] # 輸出404頁面#不寫ip,默認監聽本機ip地址 httpd = make_server('', 8888, application)print('Serving HTTP on port 8888...') # 開始監聽HTTP請求: httpd.serve_forever() View Code

重啟pwsgiref_start.py文件,再次訪問上面3個url。訪問結果一致,說明ok了。

到這里,一個簡單web框架,就完成了!

將當前文件夾打包,扔到別的電腦或者服務器,只有有python環境,就可以運行了。

?

新整頁面

修改urls.py,增加一個路徑timer,用來顯示當前時間

import viewsurlpatterns=[("/login/",views.login),("/index/",views.index),("/timer/",views.timer) ] View Code

修改views.py,增加一個視圖函數

import datetimedef 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 timer(environ): # 返回當前時間# 獲得當前時間now = datetime.datetime.now()# 轉換為指定的格式:otherStyleTime = now.strftime("%Y-%m-%d %H:%M:%S")return otherStyleTime.encode('utf-8') # 必須為bytes類型 View Code

重啟pwsgiref_start.py文件,訪問url:

http://127.0.0.1:8888/timer/

頁面輸出:

?


參考資料:

Django 基礎教程

轉載聲明:
作者:肖祥
出處:?https://www.cnblogs.com/xiao987334176/

轉載于:https://www.cnblogs.com/bqwzx/p/10177401.html

總結

以上是生活随笔為你收集整理的python 全栈开发,Day66(web应用,http协议简介,web框架)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品国产成人av在线 | 8x成人在线| 国产精品99久久久久久武松影视 | 日日干干夜夜 | 久久www免费人成看片高清 | 黄色大片免费网站 | 在线免费观看视频一区二区三区 | 国产成人精品一区二区在线观看 | www麻豆视频 | 98涩涩国产露脸精品国产网 | 国产在线观看高清视频 | 天天天干 | 久久高清国产 | 香蕉视频久久久 | 欧美日韩裸体免费视频 | 久久久天天操 | 久久综合久久久 | 精品视频免费看 | 欧美一级在线观看视频 | 国产一卡久久电影永久 | 国产午夜精品理论片在线 | 久久国产精品二国产精品中国洋人 | 久久午夜影视 | 99热99热| 免费观看国产成人 | 中文字幕av在线播放 | 欧美激情亚洲综合 | 欧洲黄色片 | 久热免费在线观看 | 日韩在线观看你懂的 | 国产 日韩 在线 亚洲 字幕 中文 | 国产精品片| 国产又粗又猛又色又黄网站 | 国产偷国产偷亚洲清高 | a级片久久 | 奇米先锋 | 伊色综合久久之综合久久 | 五月婷婷在线综合 | 人人干人人超 | 久久黄视频 | 亚洲国产成人av网 | 久久综合久久88 | 国产精品爽爽爽 | 国产精品永久在线 | 超碰在线资源 | 国产五月 | 日韩三级久久 | 成人久久免费 | 日日噜噜噜噜夜夜爽亚洲精品 | av片免费播放 | 国产自在线 | 91黄站| 欧美日韩大片在线观看 | 啪啪免费试看 | 中文字幕中文字幕在线中文字幕三区 | 蜜臀av.com | 人人爽网站 | 激情视频一区二区三区 | 天天草视频 | 日韩有码第一页 | 久久精品免费看 | 婷婷丁香在线视频 | 亚洲激情 在线 | 在线观看精品一区 | 国产精品你懂的在线观看 | 中文字幕日本特黄aa毛片 | 91av色 | 97av在线视频免费播放 | 色多多视频在线 | 亚洲成人频道 | 成年人免费在线观看网站 | 五月激情视频 | 国产不卡精品 | 欧美一级免费黄色片 | www免费网站在线观看 | 丁香综合激情 | 人人爽爽人人 | 成人av地址 | 99视频免费播放 | 日本黄色免费在线观看 | 91视频久久久久久 | 成人av片在线观看 | 免费av观看 | 日韩一级片大全 | 色天天综合网 | 一级黄色片在线 | 在线欧美a| 人人舔人人爽 | 九九九九精品 | 伊人影院av | 久久免费看a级毛毛片 | 免费在线观看午夜视频 | 中文字幕在线看视频 | 亚洲精品午夜国产va久久成人 | 欧美aa级 | 天天插天天爽 | 91成人破解版 | 色婷婷国产精品 | 操天天操 | 99久久影视 | 国产精品高清av | 国产女人40精品一区毛片视频 | 在线观看一区二区精品 | 亚洲视频在线视频 | 国产午夜精品一区二区三区欧美 | 国产精品 中文字幕 亚洲 欧美 | 2018亚洲男人天堂 | 青青草国产精品 | 免费观看黄色av | www.香蕉视频在线观看 | 人人干,人人爽 | 亚洲一区二区三区四区精品 | 国产精品一区二区久久精品爱微奶 | 精品黄色片 | 免费国产一区二区视频 | 天天做综合网 | 久久天堂精品视频 | 黄色激情网址 | 日本韩国精品一区二区在线观看 | 亚洲精品视 | 欧美午夜剧场 | 91av大全| 欧美另类人妖 | 中文字幕久久亚洲 | 午夜精品一区二区三区四区 | 久久网站免费 | 麻豆视频在线免费看 | 精品视频久久久久久 | 天堂麻豆 | 午夜在线免费观看视频 | 在线欧美小视频 | 成人黄色大片在线观看 | 狠狠干五月天 | 99久热在线精品视频观看 | 日韩理论片中文字幕 | 日韩精品一区二区三区中文字幕 | 久久福利综合 | 黄色在线视频网址 | 久草在线91 | 91精品国自产在线偷拍蜜桃 | 国产成人精品一区二区在线观看 | 欧美精品网站 | 亚洲精品乱码久久久一二三 | 国产成人三级一区二区在线观看一 | 91成版人在线观看入口 | 久久成人在线 | 中文资源在线播放 | 久久免费一 | 黄色av网站在线观看免费 | 亚洲 中文 欧美 日韩vr 在线 | 麻花天美星空视频 | 久久视频精品在线观看 | 国产免费美女 | 亚洲日本va中文字幕 | 久久免费国产电影 | 狠狠操夜夜 | 欧美成年黄网站色视频 | 最近中文字幕国语免费av | 色天天| 激情 婷婷| 黄色片软件网站 | 免费日韩一区二区三区 | 欧美日韩aaaa | 中文字幕第 | 欧美日韩高清一区 | 麻豆一区二区三区视频 | 91看片一区二区三区 | 精品国产_亚洲人成在线 | 国产美女免费视频 | 亚洲一级理论片 | 国产在线久久久 | 欧美色操 | 亚洲国产日韩欧美在线 | 天天·日日日干 | 少妇bbw搡bbbb搡bbbb| 丁香五香天综合情 | 免费能看的av | 一本一本久久a久久精品综合妖精 | 四虎国产精品免费观看视频优播 | 久久精品99久久久久久2456 | 精品1区二区 | 婷婷色综 | 亚洲精品大全 | av超碰在线观看 | 日本特黄一级片 | 日韩理论片在线观看 | 亚洲国产无 | 91精品一 | 亚洲va欧美va人人爽春色影视 | 久草视频在线新免费 | 国产日本在线观看 | 免费av观看 | 国产免费av一区二区三区 | 97精品超碰一区二区三区 | 久久久久高清毛片一级 | 久久久久久免费网 | 午夜精品一二区 | 免费高清在线观看电视网站 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 亚洲激情免费 | 亚洲成人频道 | 夜夜躁日日躁 | 91精品网站| 色永久免费视频 | 久久理论影院 | 在线观看亚洲 | 久久视频国产精品免费视频在线 | 97超碰在线视 | 97视频网址 | 亚洲精品在线观看视频 | 国产免费叼嘿网站免费 | 91大神一区二区三区 | 久操视频在线观看 | 亚洲精品视频播放 | 五月婷婷激情 | 91精品蜜桃 | 99激情网| 国产精品福利午夜在线观看 | 欧美日韩国产亚洲乱码字幕 | 丁香六月五月婷婷 | 97成人超碰| 成人va视频 | 久久精品亚洲一区二区三区观看模式 | 久久激情视频 久久 | 国产韩国精品一区二区三区 | 女人久久久久 | 久操97| 看片一区二区三区 | 色综合小说 | 欧美日韩精品影院 | 五月综合色 | 激情综合网天天干 | 三级黄色网址 | 中文字幕在线观看免费观看 | 在线观看va | 波多野结衣亚洲一区二区 | 亚洲成人av一区 | 日韩av高清在线观看 | 黄色小说18 | av再线观看| 国产一区在线视频播放 | 波多野结衣在线中文字幕 | 国产99久 | 欧美电影黄色 | 久久国产午夜精品理论片最新版本 | 二区三区av | 天天综合网入口 | 国产在线更新 | 九九视频精品在线 | 亚洲成人午夜在线 | 亚洲精品美女视频 | 中文字幕国产一区 | 这里只有精品视频在线观看 | 亚洲精品免费在线观看 | 99在线看 | ww视频在线观看 | 麻豆一精品传二传媒短视频 | 中文字幕视频播放 | 久久久国产精品视频 | 国产在线不卡一区 | 国产视频一区二区在线观看 | 亚洲欧美日韩精品久久久 | 国产福利小视频在线 | 粉嫩av一区二区三区免费 | 91精品视频在线免费观看 | 国产资源网站 | 久久福利 | 成年人视频在线观看免费 | 国产不卡在线观看视频 | 久久久久久久久久久久久国产精品 | 日本中文字幕系列 | 日日碰夜夜爽 | 97在线公开视频 | 操操日 | 国产一区二区在线免费 | 日韩二区三区在线 | 亚洲视频1 | 国产少妇在线观看 | 久久毛片高清国产 | 久久超级碰 | 日韩av专区| 国产精品毛片一区二区在线看 | 日韩中文字| 日韩在线观看网址 | 99免在线观看免费视频高清 | 久久综合色婷婷 | 亚洲综合视频在线观看 | 一区二区三区四区免费视频 | 欧美一级专区免费大片 | 日韩欧美一区二区三区在线观看 | 亚洲欧美国产日韩在线观看 | 国产精品综合久久久 | 日本中文字幕视频 | 狠狠狠狠狠狠狠 | 韩国一区在线 | 免费看一级一片 | 中文字幕久久久精品 | 日韩激情片在线观看 | 天天躁日日躁狠狠躁av中文 | 婷婷激情小说网 | 一区二区观看 | 91精品婷婷国产综合久久蝌蚪 | av片在线观看免费 | ,午夜性刺激免费看视频 | 国产精品毛片久久久 | 九九导航| 久草免费福利在线观看 | 中文字幕av播放 | www.亚洲视频 | 人人精品久久 | 欧美精品中文在线免费观看 | 伊人狠狠 | 一级性视频 | 久草久热 | av一区在线播放 | 日韩精品电影在线播放 | 国产日韩在线看 | 日韩欧美电影在线观看 | 天天天天射 | 91综合视频在线观看 | 青青射 | 欧美综合在线视频 | 丁香激情综合国产 | 天天操天天艹 | 少妇精品久久久一区二区免费 | 国产在线1区 | 黄网在线免费观看 | 亚洲经典视频在线观看 | 亚洲国产一二三 | 国产亚洲精品久久久久久久久久 | 久久久久久久久久免费 | 久久久三级视频 | 人人看人人| 国产一区福利 | 日韩在线一区二区免费 | 激情综合亚洲 | 8x成人免费视频 | 91在线视频免费观看 | 伊人国产在线播放 | 国产成人精品一区二区三区 | 欧美久久久久久久久中文字幕 | 天天艹天天 | 天天爱天天 | 99视频在线观看视频 | 中文字幕中文字幕在线中文字幕三区 | 在线观看免费高清视频大全追剧 | 成人资源在线观看 | 波多野结衣视频一区 | 国产亚洲成人精品 | 欧美日比视频 | 亚洲精品看片 | 视频在线观看99 | 韩国一区二区三区视频 | 91成人精品国产刺激国语对白 | 97精品久久人人爽人人爽 | 日韩美女久久 | 91精品国产综合久久久久久久 | 91黄色小视频| 最近中文字幕免费大全 | 国产91综合一区在线观看 | 一本一道久久a久久精品蜜桃 | 99视频在线精品 | 97视频中文字幕 | 亚洲国产成人精品在线 | 91精品婷婷国产综合久久蝌蚪 | 91亚洲精品国产 | 麻豆成人精品视频 | 色播99| 亚洲 精品在线视频 | 中文字幕资源在线 | 久久久综合九色合综国产精品 | 免费视频xnxx com| 奇米网777 | 国产视| 国产一级片在线播放 | 午夜影院先 | 亚洲欧美观看 | av成人动漫在线观看 | 国产免费亚洲高清 | 丝袜美女在线 | 久久精品亚洲 | 国内精品久久久久久久久久清纯 | 久久精品综合一区 | 久久精品亚洲 | 色综合五月 | 日韩中文字幕免费在线播放 | 在线观看v片 | 欧美福利在线播放 | 欧美一级淫片videoshd | 在线视频一区二区 | 久久av一区二区三区亚洲 | 久久草在线免费 | 国产不卡一二三区 | 日韩av免费在线看 | 亚洲精品久久久蜜桃直播 | 国产福利小视频在线 | 久久国产亚洲精品 | 五月天综合激情 | 久久日本视频 | 日韩免费视频观看 | 夜夜视频资源 | 美女视频网 | 91香蕉视频720p | 9在线观看免费高清完整 | 久久综合久久综合这里只有精品 | 日韩激情影院 | av片在线观看免费 | 日日夜夜天天久久 | 中文字幕第一页在线播放 | 成人av片在线观看 | 国产精品99久久久久人中文网介绍 | 97在线视频免费播放 | 日韩二区三区在线 | av在线免费观看不卡 | 伊人亚洲综合网 | 欧美日韩国产成人 | 欧美视频在线二区 | 久久精品一区二区三 | 中文字幕日本在线 | 色夜视频| 午夜精品一区二区三区免费 | 国产亚洲精品久久19p | 丁香av在线 | 韩国一区二区三区在线观看 | 丁香视频全集免费观看 | 婷婷色影院 | 久草视频在线免费播放 | 伊人电影天堂 | 国产日韩一区在线 | 人人爱夜夜操 | 超碰人在线 | 欧美色888 | 亚洲视频一级 | 国产高清日韩 | 国产小视频91 | 免费在线观看av网址 | 国产精品第7页 | 91免费看黄色 | 亚洲爽爽网 | 亚洲一区二区视频在线 | 亚洲综合成人婷婷小说 | 亚洲涩涩涩| 精品1区2区3区 | 99免费看片| 欧美色图亚洲图片 | 国产精品丝袜在线 | 国产欧美在线一区二区三区 | 黄色毛片在线 | 国产精品 国产精品 | 亚洲精品乱码久久久久久蜜桃欧美 | 亚洲女在线 | 久久久久免费电影 | 高清免费在线视频 | 精品a视频 | 91看片淫黄大片在线播放 | 国产专区在线视频 | 91一区在线观看 | 国产亚洲精品久久久久久无几年桃 | 日韩中文字幕免费视频 | 一级黄色毛片 | 日韩簧片在线观看 | 成人免费在线观看入口 | 国产精品毛片久久久久久 | 亚洲美女精品视频 | 成人黄色毛片视频 | 果冻av在线| 天天操夜夜爱 | 国产精品成人一区二区三区吃奶 | 亚洲色图色| 日韩av片无码一区二区不卡电影 | 日韩在线观看免费 | 天天干天天操av | 国产在线观看你懂得 | 国产精品99精品 | 日韩免费视频线观看 | 亚洲精品视频在线免费 | 久久免费在线观看 | 美女搞黄国产视频网站 | 国产日产欧美在线观看 | 国产免费精彩视频 | 在线视频国产区 | 三级a视频 | 久久精品艹| 国产一区二区影院 | 99av在线视频 | 中文字幕日韩一区二区三区不卡 | 亚洲精品在线一区二区三区 | 午夜久久影视 | av资源免费在线观看 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久午夜电影院 | av网站在线观看播放 | 日韩欧美在线国产 | 国产高清99 | 深爱开心激情 | 四虎5151久久欧美毛片 | 成人黄色小说在线观看 | 亚洲欧洲在线视频 | 国产精品成人一区 | 韩国av在线 | 中文字幕av在线免费 | 91色网址 | 99久久精品免费看 | 69精品久久久 | 五月天最新网址 | 亚洲精品综合一二三区在线观看 | 欧美成人手机版 | 日本久久精品视频 | 国产美女在线观看 | 欧美精品三级在线观看 | 国产福利一区二区在线 | 精品一区二区久久久久久久网站 | 爱色婷婷| 成人久久毛片 | 中文字幕制服丝袜av久久 | 欧美91av| 免费日韩一区二区 | 黄色av免费| 日韩电影中文 | 免费看一级特黄a大片 | 91成人在线观看高潮 | 欧美日韩精品综合 | 精品在线视频观看 | 麻豆久久精品 | 狠狠色狠狠色 | 国产馆在线播放 | 欧美日韩免费一区二区 | 97超碰资源 | 一本一本久久a久久精品综合 | 亚洲成av人影片在线观看 | 欧美精品中文字幕亚洲专区 | 欧美精品日韩 | 成人黄色小说视频 | 丁香五月缴情综合网 | 69国产成人综合久久精品欧美 | 日本三级国产 | 天天操夜夜摸 | 国产一区二区三区免费在线 | 大片网站久久 | 999久久精品 | 美女久久久久 | 国产高清视频免费最新在线 | 西西人体4444www高清视频 | 国产精品一区二区av日韩在线 | 国内精自线一二区永久 | 国产成人99久久亚洲综合精品 | 27xxoo无遮挡动态视频 | 91亚洲精品久久久久图片蜜桃 | 中文字幕在线观看播放 | 久久免费精品视频 | 99热亚洲精品| 麻豆视频观看 | 最近乱久中文字幕 | 在线成人免费 | 欧美性性网 | 亚洲天堂网视频 | 99热99 | 天天色天天爱天天射综合 | 麻豆影视在线观看 | 麻豆国产精品永久免费视频 | 亚洲,国产成人av | www.久草视频 | 久久不卡日韩美女 | 日韩精品久久一区二区 | 国产色婷婷精品综合在线手机播放 | 正在播放 久久 | 日韩激情中文字幕 | 少妇av网| 在线观看免费av片 | 九九九九九精品 | 波多野结依在线观看 | 狂野欧美激情性xxxx | 日本久久高清视频 | 亚洲区另类春色综合小说 | 日本深夜福利视频 | 天天插天天操天天干 | 国产无遮挡猛进猛出免费软件 | 国产精品成人自拍 | 91字幕 | 黄色毛片视频免费观看中文 | 77国产精品 | 亚洲影院天堂 | 亚洲闷骚少妇在线观看网站 | 久久久久激情 | 97在线观看免费视频 | 亚洲精品国偷自产在线99热 | 国产伦精品一区二区三区免费 | 在线一二三四区 | 美女很黄免费网站 | 久久超碰免费 | 免费观看成人网 | 国产精品岛国久久久久久久久红粉 | 日韩精品视频免费专区在线播放 | 亚洲九九九 | 亚洲一区二区视频在线播放 | 久草在线中文888 | 亚洲网久久 | 亚洲人xxx | 一区二区欧美在线观看 | 日韩特黄一级欧美毛片特黄 | 国产精品专区h在线观看 | 国产一区在线免费 | 日日操日日干 | 黄色小网站免费看 | 国产 在线 高清 精品 | 国产成人在线网站 | 免费观看黄 | 久久躁日日躁aaaaxxxx | 人人爱人人爽 | 六月丁香激情网 | 毛片精品免费在线观看 | 久久精品视频3 | 日韩欧美视频一区二区三区 | 久久伊人免费视频 | 黄色一级大片免费看 | 国产精品视频免费观看 | 久操久 | 久久伦理电影网 | 国产成人99久久亚洲综合精品 | 国产手机av | 久热免费 | 日韩视频三区 | 久久婷婷国产色一区二区三区 | 国产成人av一区二区三区在线观看 | 色九九视频 | 欧美日韩国产一区二区三区在线观看 | 国产美女免费 | 免费高清男女打扑克视频 | 欧美天天射 | 免费看片日韩 | 91精品久久久久久综合五月天 | 在线观看视频你懂 | 国产精品久久久久9999吃药 | 国产精品免费观看视频 | 日韩欧美视频一区二区 | a级片久久| 久久看片 | 成人精品影视 | 精品国产一区二区三区久久影院 | 午夜性福利 | 97在线成人| 亚洲视频免费视频 | www欧美xxxx| 久久综合中文字幕 | 国产一级黄色片免费看 | 午夜精品福利一区二区三区蜜桃 | 免费碰碰| 欧美另类高清 videos | 天堂va在线观看 | 丁香六月婷婷开心 | 在线观看亚洲专区 | 美女黄频在线观看 | 在线观看中文字幕dvd播放 | 美女精品网站 | 亚洲电影影音先锋 | 欧美成人基地 | 国产二级视频 | 久草视频免费观 | 99久久久久久久久 | 日韩精品一区二区在线视频 | 欧美激情综合色综合啪啪五月 | 国内免费的中文字幕 | 久久久久国产一区二区三区 | 丁香一区二区 | 色.www| 激情综合五月婷婷 | 日日夜夜狠狠操 | 91在线观 | 91精品久久久久 | 日本不卡一区二区 | 91视频啪 | 99久久精品久久久久久动态片 | 国产色视频一区 | 中文亚洲欧美日韩 | 亚洲综合在线一区二区三区 | 最新国产在线视频 | 亚洲国产精品一区二区久久,亚洲午夜 | 91在线免费观看网站 | 韩日成人av | 免费视频成人 | 在线91视频 | 在线观看视频97 | 中文字幕乱码日本亚洲一区二区 | 一区二区国产精品 | 亚洲婷久久 | 天天色天天操综合 | 久久99国产精品久久 | 色综合久久久久综合体 | 中文国产字幕 | 综合亚洲视频 | 久久 国产一区 | 亚洲精品一区二区三区四区高清 | 又黄又爽又无遮挡免费的网站 | 2020天天干夜夜爽 | 免费看黄色91 | 福利精品在线 | 日韩欧美电影 | 国产精品久久久久久久久久久久久 | 岛国av在线免费 | 精品国产伦一区二区三区观看说明 | 久久久影院官网 | 久久久久99精品国产片 | 日韩欧美一区二区三区在线 | 中文字幕中文字幕在线中文字幕三区 | 久久久国产精品人人片99精片欧美一 | 成人av午夜 | 国产精品成人在线 | 久久久久99精品成人片三人毛片 | 在线免费av电影 | 在线精品视频免费播放 | 91桃花视频 | 在线观看亚洲国产精品 | 亚洲自拍偷拍色图 | 亚洲精品中文字幕在线观看 | 最近中文字幕免费av | 91人人网| 日韩免费中文 | 在线黄网站 | 99色视频 | 天天射天天色天天干 | 亚洲 欧美 成人 | 97精品在线观看 | 久久人人爽人人片 | 久久在线观看视频 | 久久久www成人免费精品张筱雨 | 日韩在线观看免费 | 国产精品美女久久久 | 91福利在线导航 | 亚洲精品欧美精品 | 国产1区在线观看 | 日本黄色黄网站 | 日韩在线观看中文 | 人人超碰在线 | 免费在线电影网址大全 | 一区二区激情 | 美女黄久久 | 精品国产乱码久久久久久三级人 | 免费99精品国产自在在线 | 日韩av中文在线观看 | 最新久久免费视频 | 亚洲精品资源在线观看 | 日韩一二三 | 日本中文字幕在线 | 国产99久久久国产 | 亚洲精品久久在线 | 992tv又爽又黄的免费视频 | 久免费视频 | 亚洲天堂视频在线 | 最近更新的中文字幕 | 中文字幕在线观看免费观看 | 黄色成人影视 | 福利视频区 | 亚洲九九九在线观看 | 日韩欧美在线观看一区二区 | 国产精品1区2区3区 久久免费视频7 | 五月婷婷一区二区三区 | 久久这里只有精品首页 | 黄色小说网站在线 | 中文字幕久久精品亚洲乱码 | 国产伦精品一区二区三区无广告 | 久久久久蜜桃 | 免费在线观看不卡av | 夜夜爽夜夜操 | 99r在线观看 | 国产三级视频在线 | 成x99人av在线www | 1000部国产精品成人观看 | 亚洲国产一二三 | 色婷婷六月 | 在线观看中文字幕一区二区 | 激情图片区 | 探花视频在线观看 | 综合激情网 | 久久综合狠狠综合久久激情 | 色丁香久久 | 国产色在线,com | 911香蕉| 国产精品一区二区三区久久 | 四虎永久国产精品 | 久久不色| 狠狠狠狠狠狠操 | 免费国产在线精品 | 五月婷婷在线视频观看 | 成年人国产在线观看 | 五月婷婷丁香在线观看 | 久久伦理 | 日韩欧美一区二区在线播放 | 久久亚洲在线 | 国产精品亚洲精品 | 久久97精品 | 亚洲高清视频一区二区三区 | 色婷婷视频 | 免费视频 三区 | 国产成人一区二区三区久久精品 | 久久亚洲免费 | 天天干天天操天天搞 | 西西www444 | 深爱激情亚洲 | 天天色天天射天天综合网 | 91精品国产综合久久福利 | 9免费视频 | 国产成人一区二区三区在线观看 | 国产亚洲精品久久久久动 | 91精品国产综合久久福利 | 国内精品二区 | 久久午夜国产 | 四虎国产精品成人免费影视 | 欧美日韩精品二区第二页 | 超碰在线最新网址 | 久久久久久久久久久电影 | 国产无套视频 | 国产一级久久久 | 精品久久久久久国产 | 在线黄色国产电影 | 欧美精品二区 | 国产午夜精品久久 | 天天操天天干天天干 | 欧美日韩国产亚洲乱码字幕 | 国产精品美女久久久久久网站 | av免费观看网址 | 亚洲另类视频在线 | 成人免费视频视频在线观看 免费 | 欧美尹人 | 天干啦夜天干天干在线线 | 中文av一区二区 | 91精品国自产拍天天拍 | 69精品久久久 | 久久黄色网页 | 五月天久久久 | 免费成人av | 国产又黄又硬又爽 | 久久精品欧美一区二区三区麻豆 | 在线视频 你懂得 | 狠狠的操你| 国产又粗又猛又爽又黄的视频免费 | 99中文字幕在线观看 | 97超碰成人| 国内久久久 | 久草视频免费 | 人人澡人摸人人添学生av | 中文字幕国产在线 | 亚洲成人二区 | 最新av在线网站 | 日韩va欧美va亚洲va久久 | 日韩精品久久久久久中文字幕8 | 精品国产视频在线观看 | 天天操天天操天天操天天操 | 夜夜看av | 蜜桃传媒一区二区 | 久久精品综合视频 | 欧美日韩一区二区免费在线观看 | 国内精品国产三级国产aⅴ久 | 亚洲黄色激情小说 | 深爱综合网 | 婷婷视频在线观看 | 亚洲激情六月 | 亚洲波多野结衣 | 国产乱码精品一区二区三区介绍 | 在线免费观看国产精品 | 亚洲视频中文 | 亚洲综合在线五月 | 久久久久久久影院 | 精品欧美一区二区在线观看 | 国产黄色美女 | 国产精品女人久久久 | 高清不卡毛片 | 91大神精品视频在线观看 | 成人黄性视频 | 激情久久网 | 四虎影视成人永久免费观看亚洲欧美 | 亚洲码国产日韩欧美高潮在线播放 | 日韩区视频 | 国产精品久久久久久久久久久久久久 | 91久久久久久国产精品 | 久久久久久久久久久久99 | 国产精品原创av片国产免费 | 色婷婷视频 | 91视频久久久久 | 九九免费在线观看 | 三级黄色网址 | 四虎亚洲精品 | 国产精品资源在线 | 欧美污网站 | 午夜色场| 久久久婷 | 久久三级视频 | 黄色av一区二区 | 久久久综合精品 | 国产精品a成v人在线播放 | 久久xxxx| 国产又黄又猛又粗 | 成人免费大片黄在线播放 | 一级电影免费在线观看 | 欧美成人中文字幕 | 免费h视频 | 精品久久一区二区 | 国产三级精品在线 | 国产精品久久三 | 伊人色综合久久天天网 | 黄色网址国产 | 国产99久久精品一区二区永久免费 | 97在线观看 | 亚洲成人黄色在线观看 | 99久国产| 婷婷色在线视频 | 亚洲少妇激情 | 天天操夜夜干 | 国产精品久久久久久久7电影 | 国产打女人屁股调教97 | 最近久乱中文字幕 | 99热播精品 | 午夜10000| 又黄又爽又色无遮挡免费 | 97精品超碰一区二区三区 | 一区二区在线影院 | 久久久久久久久久影视 | 免费一级片久久 | 91亚洲精品久久久蜜桃借种 | 国产一区精品在线 | 一区免费在线 | 中文免费| 黄色小说免费在线观看 | 色狠狠干 | 婷婷精品国产一区二区三区日韩 | 精品福利视频在线观看 | 色网站在线观看 | 久久久影院一区二区三区 | 日本久久电影网 | 欧美污污网站 | 天天干,狠狠干 | 天天干干| 久久视讯 | 国产91全国探花系列在线播放 | 成人夜晚看av | 精品乱码一区二区三四区 | 亚洲精品中文字幕在线观看 | 在线91av| 黄色一级大片在线观看 | 九九免费在线观看 | 久久爱影视i | 九九99| 97免费视频在线 | 久久久久久久久久久久亚洲 | 黄色app网站在线观看 | 亚洲一片黄| 深爱激情婷婷网 | 日韩中文在线电影 | 亚洲黄色免费在线 | 九九精品在线观看 | 国产福利在线免费 | 欧美一区二区精美视频 | 中文字幕国内精品 | av色综合 | 精品一区二区三区香蕉蜜桃 | 国产精品 中文字幕 亚洲 欧美 | 美女黄网久久 | 天天干,天天射,天天操,天天摸 | 日本在线观看一区 | 在线观看va | 久久人人爽爽人人爽人人片av | 精品毛片久久久久久 | 国产做爰视频 | 日日夜夜婷婷 | 天天操比 | 色综合色综合久久综合频道88 | 日日夜夜精品免费观看 | 亚洲mv大片欧洲mv大片免费 | 欧美精彩视频在线观看 | 国产日韩欧美视频在线观看 | 色婷婷 亚洲 | 99爱视频| 97在线免费视频观看 | www.久艹 | 久久精品一区二区国产 | 最新av在线播放 | 五月婷婷六月丁香激情 | 00av视频| 91成人精品在线 | 免费男女羞羞的视频网站中文字幕 | 香蕉视频在线网站 | 91在线视频在线观看 | 国产精品一区二区电影 | 十八岁以下禁止观看的1000个网站 | 国产精品视频久久久 | 国产精品福利无圣光在线一区 | 国产精品久久久区三区天天噜 | 国产精品毛片一区二区 | 国产婷婷| 婷婷5月色 | 天堂视频中文在线 | 国产色网站 | 天天操天天干天天摸 | 欧美少妇影院 | 国产高清成人av | 久久影院亚洲 | 国产精品一码二码三码在线 | 天天干天天操天天 | 免费国产ww |