亚洲成人一区在线观看_天堂网www_国产精品久久9_中文在线播放_伊人天天_久久精品久久久精品美女

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 翻譯www.djangobook.com之第三章:動態Web頁面基礎

翻譯www.djangobook.com之第三章:動態Web頁面基礎
2010-01-13 23:33:26  作者:  來源:
上一章我們解釋了怎樣開始一個Django項目和運行Django服務器
當然了,這個站點實際上什么也沒有做------除了顯示了"It worked"這條信息以外。
這一章我們介紹怎樣使用Django創建動態網頁

你的第一個視圖:動態內容
讓我們創建一個顯示當前日期和時間的Web頁面來作為你的第一個目標
這是一個動態Web頁面的例子,因為頁面內容根據計算當前時間而變化
這個例子不需要數據庫和任何用戶輸入,只是輸出服務器內部時鐘
我們將寫一個視圖方法,它只是一個Python方法,接受Web請求并返回Web應答
這個應答可以是HTML內容、重定向、404錯誤、XML文檔、圖像等等
視圖本身包含任意必要的邏輯來返回應答
在這里視圖作為HTML文檔返回當前日期和時間
Java代碼 復制代碼
  1. from django.http import HttpResponse   
  2. import datetime   
  3. def current_datetime(request):   
  4.  now = datetime.datetime.now()   
  5.  html = "It is now %s." % now   
  6.  return HttpResponse(html)  

讓我們來看看代碼
1,首先,我們從django.http模塊import HttpResponse類
2,然后,我們從Python標準庫import datetime模塊
datetime模塊包含一些處理日期和時間的類和方法,并且包含一個返回當前時間的方法
3,然后,我們定義current_datetime方法
這是一個視圖方法,它使用一個HttpRequest對象作為它的第一個參數
每個視圖方法都使用HttpRequest對象作為自己的第一個參數
在這個方法里,我們把這個參數叫做request
Django并不關心視圖方法的名字,我們也不必遵循某種特定的命名方式供Django鑒別。我們以current_datetime命名這個方法
純粹是因為它正好可以明確的表達方法的意圖,你可以任意地命名view方法,current_datetime清楚的表明了它會做什么事情
一會我們會解釋Django怎樣找到這個方法
4,該方法的第一行代碼計算當前日期和時間,并存儲在本地變量now中
5,該方法的第二行代碼使用Python的格式化string能力構建了一個HTML應答
string里面的%s是一個占位符,string后面的百分號表示使用now變量的值代替%s
(給html純化論者們:我們沒有寫DOCTYPE申明,沒有<head>標簽,等等等等,我們只是盡量讓這個頁面簡潔明了。)
6,最后,視圖返回一個包含生成的HTML的HttpResponse對象
每個視圖方法都會返回一個HttpResponse對象,例外的情況我們后面會解釋

你的第一個URL配置
這個視圖方法返回了一個包含當前日期和時間的HTML頁面
但是這些代碼應該放在哪?怎樣告訴Django使用這些代碼呢?
第一個問題的答案是:你可以把view的代碼放在任何位置,只要它是在你的Python PATH下,沒有任何其他的要求----沒有"魔術"。
我們將這些代碼保存在views.py里面,并將views.py放在mysite目錄下
Python PATH是一個你系統的目錄列表,當你使用Python import語句時Python會查看這些目錄
例如你的Python PATH設置成['', '/usr/lib/python2.4/site-packages', '/home/mycode']
如果你執行代碼from foo import bar,Python將首先在當前目錄下查找叫foo.py的模塊
第一個Python PATH為空string,這表示當前目錄
如果找不到foo.py,Python將嘗試查找/usr/lib/python2.4/site-packages/foo.py
最后,如果foo.py還是找不到,Python將報ImportError
如果你有興趣查看Python PATH,進入Python交互環境并輸入import sys和print sys.path
一般來說你不必擔心設置Python PATH,Python和Django會暗中自動為你做這些事情
如果你實在好奇,設置Python PATH是manage.py的一個工作
我們怎么告訴Django使用這些視圖代碼?答案是URL配置
URLConf就像是一張Django web站點的內容表格。基本上,這個配置是一個URL模式和對應的view函數的映射,這些函數會在請求某個符合特定模式的URL時被調用。
URLconf就是告訴Django,"對于這個URL,調用這些代碼,對于那個URL,調用那些代碼..."
URL配置就像是你的Django項目的目錄
基本上,它是URL模式和URL模式調用的視圖方法的映射
django-admin.py startproject會自動生成一個URL配置文件urls.py,默認情況下它是這樣的:
Java代碼 復制代碼
  1. from django.conf.urls.defaults import *   
  2. urlpatterns = patterns('',   
  3.  # Example:   
  4.  # (r'^mysite/', include('mysite.apps.foo.urls.foo')),   
  5.   
  6.  # Uncomment this for admin:   
  7. # (r'^admin/', include('django.contrib.admin.urls')),   
  8. )  

讓我們來看看這些代碼
1,第一行import django.conf.urls.defaults模塊的所有對象,包括一個叫patterns的方法
2,第二行調用patterns()方法并將接過保存到urlpatterns變量,patterns()方法只傳了一個空string作為參數
其它行被注釋掉了
這里主要看的就是變量urlpatterns,它定義了URL和處理URL的代碼的映射
默認情況下所有的URL配置被注釋掉了,這意味著你的Django項目是空的,這讓Django得知顯示“It worked!”頁面
如果你的URL配置是空的,Django假設你剛開始一個新的項目,這樣就顯示這條信息
讓我們編輯urls.py來暴露current_datetime視圖:
Java代碼 復制代碼
  1. from django.conf.urls.defaults import *   
  2. form mysite.views import current_datetime   
  3.   
  4. urlpatterns = patterns('',   
  5.  (r'^now/$', current_datetime),   
  6. )  

我們做了兩處改動。首先,我們從mysite/views.py模塊import current_datetime視圖
該模塊在Python的import語法中被轉換成mysite.views
然后我們增加一行(r'^now/$', current_datetime),它指向一個URL模式
這是一個Python元組,第一個元素是一個正則表達式,第一個是視圖方法
這樣,我們就告知Django對URL /now/的請求應該被current_datetime視圖方法處理
注意幾個地方:
1,在例子中,我們把視圖方法current_datetime當成對象傳遞而不是調用這個方法
這是Python及其它動態語言的特性,函數是第一類對象,可以像其它變量一樣傳遞,cool吧?
2,不必在'^now/$'前面增加斜線來匹配/now/,Django自動在每個表達式前面添加斜線
3,'^'和'$'符號很重要,前者表示“匹配string的開始的模式”,后者表示“匹配string結束的模式”
這個例子很好的解釋了概念問題,如果我們使用模式'^now/',則/now/,/now/foo,/now/bar都將匹配
如果我們使用模式'now/$'則/now/,/foo/bar/now/等也將匹配
所以我們使用'^now/$',則不多不少只有/now/匹配
現在測試一下我們對URLConf的修改。運行python manage.py runserver來啟動Django的開發服務器
(如果讓它一直運行也沒有問題,服務器會自動探測Python代碼的修改,在必要的時候重新載入,所以沒有必要一修改就重起)
瀏覽器訪問http://127.0.0.1:8000/now/測試一下
萬歲!你已經開發了你的第一個Django-powered Web頁面

Django怎樣處理請求
Django怎樣處理Web請求?讓我們來看看事實真相
1,命令python manage.py runserver尋找settings.py,這個文件包含了這個Django實例的所有配置選項
最重要的設置是ROOT_URLCONF,它告訴Django使用哪個Python模塊作為當前站點的URL配置
2,當一個請求進來如/now/,Django載入URL配置,然后按順序檢查每個URL模式直到找到一個匹配的URL請求模式
然后Django調用那個模式匹配的方法,并傳遞一個HttpRequest對象作為第一個參數
3,視圖方法負責返回一個HttpResponse對象
這樣你就了解了Django-powerd頁面的基礎,它很簡單,只需寫視圖方法和通過URL配置映射到URL

URL配置和松耦合
現在是指出URL配置和Django后面的哲學的良好時機:松耦合原則
松耦合是具有使得部分模塊可替換的價值的軟件開發方法
如果兩個模塊是松耦合的,那么對一個模塊做改動不會或很少對另一個有影響
Django的URL配置是這個原則的很好的例子
在Django Web程序中,URL定義和視圖方法是松耦合的,開發人員可以替換其中一個而不會對另一個產生影響
對比之下,其他的web開發平臺耦合了URL和程序,例如在basic php中,應用的URL取決于代碼在文件系統中的位置,
在CherryPy框架中,URL和應用中的方法名稱是相對應的。這些方式看來非常方便,但是長遠來看會造成難以管理的問題
舉例來說,考慮我們剛剛的那個顯示當前時間的函數。如果我們想改變這個應用的URL,比如從/now/變成/currenttime/
我們可以對URLconf做一個非常快捷的修改,不用擔心隱藏在這個URL之后的函數實現。類似的,如果我們想修改view函數
修改它的邏輯,我們用不著影響URL就可以做到。
更進一步,如果我們想把這個當前時間的方法暴露到多個URL上,我們也可以通過修改URLconf輕易完成,而無需影響view的代碼。

404錯誤
在我們當前的URLconf里面只有一個處理/now/的URL模式。如果我們請求一個不同的URL會發生什么呢?
當訪問一個沒有在URLconf里面定義過的URL時,你將看到一個"Page not found"的信息,因為這個URL還沒有定義在URLconf里。
這個頁面的用途其實不僅僅是顯示404錯誤信息:它精確的告訴我們Django使用了哪一個URLconf,以及這個配置里的每一個URL匹配模式。
通過這個頁面我們可以輕易的得知為什么請求的URL拋出了404錯誤。
當然了,這些信息的初衷是為了方便web開發者。如果這是一個實際的internet站點,我們不希望這些信息被泄露出去。
出于這個原因,這個"Page not found"頁面只顯示在debug模式下。

你的第二個視圖:動態URL
第一個視圖例子中,頁面內容當前日期和時間是動態的,但是URL("/now/")是靜態的
大多數動態Web程序中,URL包含了影響輸出頁面的參數
下面的例子中我們使用一個數字來顯示為了幾小時的日期和時間
如/now/plus1hour/顯示未來1小時的時間,/now/plus3hour/顯示未來3小時的時間
先修改URL配置:
Java代碼 復制代碼
  1. urlpatterns = patterns('',   
  2.  (r'^now/$', current_datetime),   
  3.  (r'^now/plus1hour/$', one_hour_ahead),   
  4.  (r'^now/plus2hour/$', two_hours_ahead),   
  5.  (r'^now/plus3hour/$', three_hours_ahead),   
  6.  {r'^now/plus4hour/$', four_hours_ahead),   
  7. )  

顯然這樣的模式有缺陷,不僅會產生大量的視圖方法,還將程序局限在預先定義的小時范圍內
如果我們想顯示5小時后的時間,我們還得再添加一行
所以我們應該在這里做出一點抽象

關于良好的URL
如果你使用過PHP或Java,你可能會說“讓我們使用一個查詢參數”,類似于像/now/plus?hours=3
你也可以使用Django這樣做,但是Django的一個核心哲學是,URL應該是優雅的
/now/plus3hours/更干凈、更簡單、更可讀、更朗朗上口
良好的URL是Web程序質量的一個顯示
Django的URL配置系統提供容易配置的良好的URL定義

URL模式通配符
繼續我們的例子,讓我們在URL模式中添加一個通配符
上面提到,URL模式是一個正則表達式,這里我們可以使用\d+來匹配1個或多個數字:
Java代碼 復制代碼
  1. from django.conf.urls.defaults import *   
  2. from mysite.views import corruent_datetime, hours_ahead   
  3.   
  4. urlpatterns = patterns('',   
  5.  (r'^now/$', current_datetime),   
  6.  (r'^now/plus\d+hours/$', hours_ahead),   
  7. )  

這個URL模式可以匹配任何URL,例如/now/plus2hours/,/now/plus25hours/,甚至/now/plus100000000000hours/
讓我們限制最多99小時,即我們只允許1個或2個數字,在正則表達式里就是\d{1,2}:
(r'^now/plus\d{1,2}hours/$', hours_ahead),
當我們構建web程序的時候,考慮可能出現的不合常理的輸入, 并且決定是否處理這些輸入是非常重要的。
我們在這里限制時間的偏移量<=99小時。順便啰嗦一句,Outlandishness Curtailers是個超級棒的樂隊。
正則表達式是一個在文本里面指定模式的簡潔方式
Django的URL配置允許任意的正則表達式來提供強大的URL匹配能力,下面是一些常用的模式:
Java代碼 復制代碼
  1. Symbol    Matches   
  2. .(dot)    任意字符   
  3. \d        任意數字   
  4. [A-Z]     從A到Z的任意字符(大寫)   
  5. [a-z]     從a到z的任意字符(小寫)   
  6. [A-Za-z]  從a到z的任意字符(大小寫不敏感)   
  7. [^/]+     任意字符直到一個前斜線(不包含斜線本身)   
  8. +         一個或多個前面的字符   
  9. ?         零個或多個前面的字符   
  10. {1,3}     1個到3個之間前面的字符(包括13)  

更多的正則表達式信息請查看Appendix 9,正則表達式
好了,我們已經在URL里設計了一個通配符,但我們需要把信息傳遞給視圖方法
這樣我們才能使用一個單獨的視圖方法來處理任意的小時參數
我們把我們在URL模式里希望保存的數據用括號括起來,即把\d{1,2}括起來
(r'^now/plus(\d{1,2})hours/$', hours_ahead),
如果你熟悉正則表達式,你會覺得非常親切:我們正是在使用括號從匹配的文本中獲得我們想要的數據。
最終的URL配置如下:
Java代碼 復制代碼
  1. from django.conf.urls.defautls import *   
  2. form mysite.views import current_datetime, hours_ahead   
  3.   
  4. urlpatterns = patterns('',   
  5.  (r'^now/$', current_datetime),   
  6.  (r'^now/plus(\d{1,2})hours/$', hours_ahead),   
  7. )  

下面我們定義hours_ahead方法:
告誡:關于編碼的順序
在這個例子里面,我們先定義了URL模式,然后才開始撰寫view代碼,但是在前一個例子里,編碼的順序正好相反。那么哪一種方式更好呢?
當然,每一個開發人員都有不一樣的習慣。
如果你是一個大局觀很好的人,一次性就定義好所有的URL模式,然后再來實現view的代碼,這是非常不錯的。
這種方式能夠展現一個非常清晰的to-do list,因為它從根本上定義了將要實現的view函數所需的參數。
如果你是一個有著自底向上的習慣的程序員,你也許更愿意寫一個view,然后把它和某一個URL模式綁定起來。這樣做也不錯。
兩種方式當然都是正確的,使用哪一個取決于哪一種更加符合你思考的模式。
Java代碼 復制代碼
  1. from django.http import HttpResponse   
  2. import datetime   
  3.   
  4. def hours_ahead(request, offset):   
  5.  offset = int(offset)   
  6.  dt = datetime.datetime.now() + datetime.timedelta(hours=offset)   
  7.  html = "In %s hour(s), it will be %s." % (offset, dt)   
  8.  return HttpResponse(html)  

我們還是一次一行的解讀這些代碼:
跟我們在current_datetime里所做的一樣,我們導入了django.http.HttpResponse和datetime模塊
view函數hours_ahead接受兩個參數:request和offset。
request是一個HttpRequest對象,和在current_datetime中一樣。我們要重申一點:每一個view函數的第一個參數總是HttpRequest對象。
offset是一個string,它的值是通過URL模式里的那一對括號從請求的URL中得到的。比如請求的URL是/now/plus3hours/
offset的值就是一個string‘3’。請注意從URL中得到的值始終是string而不是integer,即使這個string是由純數字構成的。
我們把這個變量命名為offset,但是你可以用任何合法的Python變量名來命名它。變量的名字并不重要,但是必須是view函數的第二個參數。
在函數里我們做的第一件事就是調用int(),把offset轉換成整形。
如果一個值不能被轉換成為一個整型數(像字符串'foo'), Python將會拋出ValueError。
但是我們對此并不擔心,因為我們可以肯定offset一定可以被轉換,正則表達式\d{1,2}一定會從URL中獲得數字。
這也從另一個側面證明了URLconf的優雅:它相當清楚地提供了一個對輸入的校驗。
程序的下一行揭示了我們對offset做類型轉換的原因,這行代碼計算了當前的時間加上一個時間偏移量,這個偏移量的值就是offset
保存計算的結果在變量dt.datetime.timedelta函數需要的輸入參數就是整型。
下一行我們構造一個html的輸出,和在current_datetime函數中類似。
最后,和current_datetime函數一樣,我們返回一個HttpResponse對象。
好了,我們訪問http://127.0.0.1:8000/now/plus3hours/可以驗證它工作了
然后我們試試http://127.0.0.1:8000/now/plus100hours/,Django顯示“Page not found”錯誤
http://127.0.0.1:8000/plushours/也會顯示404錯誤,因為我們只接受1個或2個數字的參數

Django良好的出錯頁面
我們將offset = int(offset)注釋掉
# offset = int(offset)
然后重新訪問/now/plus3hours,你將看到一個很多信息的出錯頁面,包括TypeError信息在最上面:
“unsupported type for timedelta hours component: str”
發生了什么?
datetime.timedelta函數預期hours參數為integer類型,但我們注釋掉了把offset轉化為integer的代碼
這導致datetime.timedelta產生TypeError,只是典型的每個程序員容易出現的小bug
中一些需要注意的地方:
1,頁面的頂端顯示的是關于異常的主要信息:異常的類型,異常的參數,導致異常的文件和行數
2,接下來頁面顯示完整的異常的Python traceback,在stack的每個frame里Django都顯示了文件名、方法名、行數和該行代碼
點擊暗灰色的代碼,你可以看到出錯行前后的幾行代碼,讓你得到上下文
點擊“Local vars”可以看到所有的本地變量的列表,變量值,出錯點等,這個debug信息是很有價值的
3,點擊在“Traceback”下面的“Switch to copy-and-paste view”將切換到可以很容易復制粘貼的版本
當你想同他人分享異常信息或得到技術支持時(Django IRC聊天室或者Django用戶郵件列表)可以很好的利用它
4,“Request information”包括大量的產生錯誤的Web請求的信息,GET和POST信息,cookie值和meta信息如CGI頭部等
下面的“Settings”部分列出了當前Django安裝的所有設置信息,后面我們會慢慢解釋這些
Django錯誤頁面在模板語法錯誤等情況下會顯示更豐富的信息,現在去掉注釋offset=int(offset)
你是那種喜歡用print語句debug 的程序員嗎?使用Django錯誤頁面就可以做到這點,不需要print語句
你可以臨時插入assert False來觸發錯誤頁面,后面我們會解釋更高級的debug方法
很顯然大部分這些錯誤信息是敏感的,它暴露了你的Python代碼和Django配置的五臟六腑
把這些信息顯示到網上是愚蠢的,心懷惡意的人可能會在你的網站里面做骯臟的事情
無論如何,后面我們會提到怎樣去除debug模式

練習
這里是一些鞏固本章知識的練習,我們在這里介紹了一些新的技巧
1,創建另一個視圖hours_behind,類似于hours_ahead,只不過顯示過去的時間偏移量
這個視圖應該綁定到/now/minusXhours/,這里X是偏移量小時數
2,一旦你做完練習1,一個良好的程序員會發現hours_ahead和hours_behind非常類似,這顯得多余了
把這兩個方法合并到單獨的一個方法hour_offset,URL還是保持/now/minusXhours/和/now/plusXhours/不變
別忘了根據偏移量是正還是負來改變HTML代碼,“In X hour(s)”或者“X hour(s) ago”
3,讓我們更專業一點,允許/now/plus1hour/和/now/plus2hours/,但是不允許/now/plus1hours/和/now/plus2hour/
4,在HTML的顯示里,如果偏移量是個位數,使用hour,否則使用hours

答案
1,hours_behind視圖:
Java代碼 復制代碼
  1. def hours_behind(request, offset):   
  2.     offset = int(offset)   
  3.     dt = datetime.datetime.now() - datetime.timedelta(hours=offset)   
  4.     html = "%s hour(s) ago, it was %s." % (offset, dt)   
  5.     return HttpResponse(html)  

URL模式:
Java代碼 復制代碼
  1. (r'^now/minus(\d{1,2})hours/$', hours_behind),  

2,hour_offset視圖:
Java代碼 復制代碼
  1. def hour_offset(request, plus_or_minus, offset):   
  2.     offset = int(offset)   
  3.     if plus_or_minus == 'plus':   
  4.         dt = datetime.datetime.now() + datetime.timedelta(hours=offset)   
  5.         html = 'In %s hour(s), it will be %s.' % (offset, dt)   
  6.     else:   
  7.         dt = datetime.datetime.now() - datetime.timedelta(hours=offset)   
  8.         html = '%s hour(s) ago, it was %s.' % (offset, dt)   
  9.     html = '%s' % html   
  10.     return HttpResponse(html)  

URL模式:
Java代碼 復制代碼
  1. (r'^now/(plus|minus)(\d{1,2})hours/$', hour_offset),  

3,URL模式:
Java代碼 復制代碼
  1. (r'^now/(plus|minus)(1)hour/$', hour_offset),   
  2. (r'^now/(plus|minus)([2-9]|\d\d)hours/$', hour_offset),  

其中“|”表示“or”,上面的模式表示匹配模式[2-9]或者\d\d
即匹配一個2到9的數字或者匹配兩個數字
4,hour_offset視圖:
Java代碼 復制代碼
  1. def hour_offset(request, plus_or_minus, offset):   
  2.     offset = int(offset)   
  3.     if offset == 1:   
  4.         hours = 'hour'  
  5.     else:   
  6.         hours = 'hours'  
  7.     if plus_or_minus == 'plus':   
  8.         dt = datetime.datetime.now() + datetime.timedelta(hours=offset)   
  9.         output = 'In %s %s, it will be %s.' % (offset, hours, dt)   
  10.     else:   
  11.         dt = datetime.datetime.now() - datetime.timedelta(hours=offset)   
  12.         output = '%s %s ago, it was %s.' % (offset, hours, dt)   
  13.     output = '%s' % output   
  14.     return HttpResponse(output)  



安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 亚洲国产成人精品久久 | 精品久久久精品 | 91秦先生艺校小琴 | 羞羞视频在线播放 | 国产ts余喵喵和直男多体位 | 成人福利视频 | www.日韩视频| 亚洲欧美日韩电影 | 精品一区久久 | 日韩精品日韩激情日韩综合 | 国产精品久久久久久久久免费 | 日本不卡一区二区 | 99精品福利视频 | 久久国产精品视频观看 | 黄色国产精品 | 久久午夜影院 | 亚洲视频一区二区三区 | 日韩视频三区 | 成人欧美 | 在线无码 | 91亚洲国产成人久久精品网站 | 毛片国产 | 中文字幕国产视频 | 国内成人免费视频 | 欧美日韩午夜 | 久久久.com| 日韩综合网 | av在线日韩| 久久久国产精品 | 欧美性一区二区 | 亚洲一区二区在线免费观看 | 99免费精品 | 中文字幕在线第一页 | 韩国精品主播一区二区在线观看 | 99亚洲| 日韩视频在线一区二区 | 91久久久久久久久久久久久久 | 福利毛片| 成人精品鲁一区一区二区 | 91高清视频 | 久久美女视频 | 午夜精品久久久久久久久久久久 | 操人网| 日本三级在线网站 | 欧美色欧美亚洲另类七区 | 欧美成人精品一区二区三区 | 黄色免费一级 | 在线观看成人小视频 | 免费黄色欧美 | 久久久精品一区二区三区 | 韩国三级午夜理伦三级三 | 在线观看免费成人av | 午夜国产精品视频 | 蜜桃视频成人m3u8 | 久久人人av | 日韩超级大片免费看国产国产播放器 | 曰批视频在线观看 | 美女三区| 国产午夜小视频 | 老牛嫩草一区二区三区眼镜 | 免费看的毛片 | 在线视频 91 | 一区二区在线影院 | 久久在线视频 | 亚洲精品www久久久久久广东 | 六月婷婷综合 | 久久精品久久精品 | 精品福利在线 | 国产999精品久久久久久麻豆 | 成人免费视频视频 | 精品视频在线观看 | 玖玖在线免费视频 | 91性高湖久久久久久久久_久久99 | 久久国产精彩视频 | 99精品免费 | 久久久久中文 | 日韩国产在线 | 国产aⅴ一区二区 | 欧美6一10sex性hd | 久久精品伊人 | 精品久久久久久久久久久 | 999国产一区二区三区四区 | 亚洲精品二区 | 毛片天堂 | 久草网站 | 国产人成精品一区二区三 | 亚洲综合视频 | 欧美一级片免费看 | 久久精品| 不卡一区 | 久久精品性 | 国产免费黄色 | 国产玖玖 | 国产在线不卡视频 | 人人人人人你人人人人人 | 久久中文字幕一区 | 国产精品久久久久久福利一牛影视 | 99精品国产高清在线观看 | 视频一区 中文字幕 | 成人a在线 | 午夜合集 | 欧美成人精品一区二区三区 | 亚洲美女在线视频 | 成人精品一区二区三区 | 日韩一| 亚洲精品www久久久久久广东 | 成a人片在线观看 | 午夜久久久| 亚洲影视一区二区 | 久久一日本道色综合久久 | 91精品视频在线播放 | 伊人狠狠干| 欧美黄 片免费观看 | 一级做a爰| 国产一区二区精品丝袜 | 国产精品久久久久久久久小说 | 午夜精品久久久久久久 | 国产精品永久久久久久久久久 | 天操天天干 | 99视频免费播放 | 国产精品毛片无码 | 高清av网站 | 天堂精品一区二区三区 | 狠狠操夜夜操天天操 | 亚洲第一精品在线 | 国产91亚洲精品 | 国产女人和拘做受在线视频 | 国产欧美精品一区二区三区四区 | 免费特级黄毛片 | 国产精品久久久久久中文字 | 婷婷在线免费视频 | 精品成人免费一区二区在线播放 | 黄色激情网站 | 国产精品一区二区不卡 | 日韩欧美二区 | 99精品国产高清一区二区麻豆 | 国产成人精品亚洲777人妖 | www视频在线观看 | 国产高清视频在线 | 日韩www视频| 一区二区三区免费 | 精品人成| 激情久久久 | 日本成人中文字幕 | 国产精品亚洲一区二区三区在线 | 玖玖色资源 | 欧美精品久久久 | 久草久 | 毛片网 | 色婷婷综合在线视频 | 伊人久久综合影院 | 国产一区二区在线看 | 国产午夜精品一区二区 | 亚洲精品美女在线观看 | 精品中文在线 | 日韩视频一区 | 亚洲成人一区二区三区 | 亚洲成av | 久久这里只有精品首页 | 日本不卡高字幕在线2019 | 婷婷综合一区 | 亚洲国产成人精品女人 | 国产精品久久久久久久久福交 | 欧美精品成人一区二区三区四区 | 91久久久久久久久久久 | 国产欧美精品区一区二区三区 | 欧洲一级视频 | 久久精品小视频 | 黄p在线看 | 91精品国产91久久久久久蜜臀 | 久久久精品久久久久 | 欧美国产一区二区 | 91麻豆精品国产91久久久更新时间 | 综合五月 | 精品久久久久久久久久久久久久 | 久久中文字幕一区 | 香蕉av777xxx色综合一区 | 国产乱码精品一区二区三区爽爽爽 | 国产一区二区在线免费观看 | 天天干天天爱天天 | 亚洲一区二区中文字幕在线观看 | 亚洲中出 | 国产一区二区三区网站 | 国产91精选 | 91麻豆精品国产91久久久久久 | 国产精品1区2区 | 九九热精品免费视频 | 美日韩精品视频 | 日韩色av | 欧美在线 | 亚洲 | 午夜激情视频在线观看 | 日韩不卡中文字幕 | 中文字幕一区二区在线观看 | 欧美成人一区二区三区片免费 | 欧美精品一区二区三区在线 | 中文字幕在线观看 | 中文字幕日韩欧美一区二区三区 | 国产精品精品视频 | 中文在线一区 | 吴梦梦到粉丝家实战华中在线观看 | 国产精品中文字幕在线 | 99色综合 | 日韩毛片免费视频一级特黄 | 亚洲成人av| 日韩在线观看 | 99精品视频免费 | 亚洲人网站 | 999精品视频 | 亚洲v欧美 | 一区二区免费视频 | 精品免费久久 | 久久久久久亚洲精品 | 欧美精品一区二区三区在线 | 国产乱码精品1区2区3区 | 欧美黄视频在线观看 | 91精品中文字幕一区二区三区 | 日本欧美在线观看 | 欧美日韩二区三区 | 欧美一二区 | 91精品视频在线播放 | 亚洲福利在线播放 | 欧美一区二区黄色片 | 久久久久久久香蕉 | 一级全毛片 | 91在线精品一区二区 | 1级毛片| 91中文在线 | 久久女人 | 国产精品毛片久久久久久 | 百性阁综合另类 | 日本激情在线 | 亚洲欧美一区二区三区在线 | 久久精品国产99国产精品 | 欧美日韩三级 | 欧美9999| 久久久精品亚洲 | 一区二区三区四区精品 | 欧美中文字幕在线 | 日韩欧美在线一区二区 | 伊人国产在线 | 韩国av一区二区 | 午夜成人在线视频 | 国外成人在线视频网站 | 成人久久久精品乱码一区二区三区 | 黄色免费成人 | 久久激情视频 | 欧美天堂在线观看 | 婷婷欧美| 国产视频一区二区在线 | 国产精品一二 | 欧美理论在线观看 | 日韩精品中文字幕在线播放 | 欧美一区二区三区黄 | 亚洲91精品 | 性做久久久久久久免费看 | 看毛片网站 | 91在线精品一区二区 | 天天澡天天狠天天天做 | www.久久.com | a级黄色在线观看 | 国产成人福利 | 欧美一区二区三区在线观看视频 | 色婷婷久久久久swag精品 | 国产成人精品一区二区三区视频 | 成人a网 | 欧美一区永久视频免费观看 | 五月在线视频 | 日日草夜夜草 | 成人免费在线观看网址 | 91视频一88av | 精品久久97| 国产精品二区一区二区aⅴ污介绍 | 精品在线一区二区 | 日韩久久精品一区二区 | 午夜大片网 | 精品视频久久 | 亚洲欧洲精品视频在线观看 | 久久狠狠 | 91亚洲高清 | 毛片网站大全 | 99国产精品 | 一级黄色大片 | 黄网在线观看 | 久久精品国产一区 | 完全免费av | 99这里只有精品 | 亚洲欧洲精品成人久久奇米网 | 久久综合九色综合欧美狠狠 | 欧美成人精品一区二区男人看 | 亚洲人成网站999久久久综合 | 国产偷自视频区视频 | 亚洲一区二区三区四区的 | 国产精品三级久久久久久电影 | 在线免费中文字幕 | 欧美国产在线观看 | 日本一区二区三区免费观看 | 国内精品一区二区 | 一区二区三区免费 | 91久久精品一区二区别 | 亚洲综合在线视频 | 午夜影院免费视频 | 成人不卡视频 | 精品www| 亚洲 欧美 日韩 在线 | 欧美日韩视频在线 | 国产高清一区 | a视频在线免费观看 | 人人做人人爽 | 蜜桃精品视频在线 | 成人黄页在线观看 | 国产在线一区二区三区 | 精品国产一区二区在线 | 欧美精品在线观看 | 亚洲福利一区二区 | h视频免费| 亚洲午夜成激人情在线影院 | 老司机深夜福利在线观看 | 一级日韩片 | 欧美一区二区三区在线观看 | 久久成人精品 | 日韩毛片 | 91.成人天堂一区 | 精品伦理一区二区三区 | 日韩一区二区三区在线 | 精品久久久久久久久久久院品网 | 日韩av在线免费电影 | 中文字幕第七页 | 成人在线免费 | 欧美一区视频 | 久久综合久久综合久久综合 | 色综合久久久久 | www.久久伊人| 国产综合精品 | 精品国产乱码久久久久久1区2区 | 成人深夜小视频 | 色综合久久88色综合天天 | 国产一区二区精品丝袜 | 一区二区在线视频 | 色橹橹欧美在线观看视频高清 | 日韩精品av一区二区三区 | 中文字幕av一区 | 国产精品久久久久久久久久 | 狠狠综合久久av一区二区小说 | 国产美女高潮视频 | 国产在线日韩 | 久久精品性视频 | 成人在线高清视频 | 91精品国产91久久久久游泳池 | 99热在线看| 亚洲成a人v欧美综合天堂麻豆 | 99日韩| www夜夜操| 亚洲精品综合在线 | 久久成人综合网 | 国产在线高清视频 | av在线成人 | 曰韩毛片| 免费成人在线网站 | 国产成人久久精品一区二区三区 | 一区二区三区四区免费看 | 日韩一区二区三区av | 欧洲一区二区在线观看 | 操久久| 久久99国产精品久久99大师 | wwwjizz日本| 欧美精品成人一区二区三区四区 | 欧美日韩久久 | 国产成人av一区二区三区 | 亚洲国产精品久久久久秋霞蜜臀 | 91精品国产91久久久久久黑人 | 亚洲精品中文字幕乱码无线 | 麻豆久久 | 亚洲美女网址 | 激情五月婷婷在线 | 国产成人片 | 99re在线视频| 国产一在线 | 国产一区二区在线看 | 自拍视频在线观看 | 97精品视频在线 | 日本久久综合 | 精品久久久久久久久久久 | 欧美在线播放 | 日韩欧美一级二级 | 欧美性网 | 国产精品视频播放 | 成人在线小视频 | 毛片网站大全 | 一区二区日韩精品 | 成人夜晚看av | 99国产精品久久久久久久久久 | 亚洲欧美日韩在线一区 | 五月婷婷导航 | 二区视频| 99精品视频网| 国产精品视频 | www视频在线观看 | 国产成人免费 | 精品国产影院 | 国产精品亚洲精品久久 | 国产91九色 | 欧美日在线 | 欧美日韩精品一区二区三区在线观看 | 97久久超碰 | 99久久免费观看 | 亚洲视频在线播放 | 欧美久久一区二区 | 成人免费视频视频 | 91免费网 | 欧美大片一区二区 | 国产成人99久久亚洲综合精品 | 国产精品原创av | 欧美精品综合 | 亚洲第一色片 | 欧美日韩在线精品 | 久久精品一区二区三区四区毛片 | 日韩一区高清视频 | 中文字幕在线观看 | 中文字幕在线观看 | 欧美日韩亚洲视频 | 在线日韩视频 | 国产98色在线 | 日韩 | 日韩毛片在线观看 | 精品国产91乱码一区二区三区 | 一区二区视频 | 中文在线一区二区 | 成人性视频免费网站 | 成人影院网站ww555久久精品 | 婷婷免费在线观看 | 精品久久久久久久久久久久久久久久久久 | 亚洲一区免费视频 | 亚洲欧美日韩另类精品一区二区三区 | 国产精品国产精品国产专区不卡 | 男女啪网站 | 久久久久久亚洲 | 99久精品| 亚洲一区二区三区高清 | 国产精品一二区 | 日本69视频 | 精品国产一区二区三区性色av | 国产在线观看一区 | 欧美国产在线观看 | 国产传媒在线视频 | 国产伦精品一区二区三区四区视频 | 国产69精品久久久久观看黑料 | 99中文视频 | 在线99 | 国产成人av在线播放 | 青青草久久爱 | 国精产品99永久一区一区 | av一区二区三区四区 | av电影天堂网 | 久久草视频 | 国产精品久久久久久亚洲调教 | 亚洲乱码一区二区三区在线观看 | www.久久| 国产精品18久久久久久首页狼 | 欧美伦理电影一区二区 | 国产成人精品亚洲777人妖 | 欧美视频亚洲视频 | 欧美电影一区 | 久产久精品 | 欧洲在线一区 | 欧美一级在线观看 | 欧美日韩国产综合在线 | 日韩3级在线观看 | 日韩免费网站 | 日本天天操 | 久久久精彩视频 | 在线视频一区二区 | 精品综合 | 久久久久久久久久国产精品 | a级黄色毛片免费观看 | 欧美一区二| 久久久久无码国产精品一区 | 久久久久久久久一区 | 色婷婷综合网 | 日韩二区三区 | 精品国产第一国产综合精品 | 国产精品免费观看 | 不卡成人 | 久久国产精品免费一区二区三区 | 国产精品视频专区 | zzzwww在线观看免 | 精品av| 中文字幕在线免费看 | 亚洲最黄网站 | 亚洲久久久 | 亚洲不卡网站 | 午夜精品久久久久久久久久久久 | 男女羞羞视频在线免费观看 | 欧美小电影 | 九一视频在线免费观看 | 亚洲精品久久久久久下一站 | 精品一区二区在线观看 | 日韩一区二区在线电影 | 欧美激情精品久久久久久 | 久久精品国产亚卅av嘿嘿 | 狠狠搞狠狠搞 | 中文字幕久久综合 | 日本在线视频一区 | 午夜激情在线免费观看 | 成人精品一区 | 一区二区三区国产视频 | 亚洲人人 | 亚洲视频一区二区三区 | 午夜电影福利 | 国产精品视频免费 | 亚洲精品视频在线 | 国产一区二区在线播放 | 亚洲午夜精品一区二区三区 | 在线观看黄免费 | aaa在线| 国产av毛片 | 免费午夜电影 | 国产免费看 | 狠狠骚 | 亚洲性视频网站 | 不卡在线一区 | 亚洲欧美国产精品专区久久 | 中文在线a在线 | 欧美日韩精 | 亚洲一区二区三区高清 | 久久久久91 | 在线影院av | 国产精品网站在线看 | 91性高湖久久久久久久久_久久99 | 亚洲色欲色欲www | 品久久久久久久久久96高清 | 精品一二三区 | 色网在线看 | 国产不卡免费视频 | 亚洲男人的天堂网站 | 国产区日韩区欧美区 | 99精品欧美一区二区三区综合在线 | 毛片91| 天天干狠狠干 | 国产一区二区精品在线观看 | a视频在线观看 | 日韩精品久久久久久 | 成人爽a毛片一区二区免费 美女高潮久久久 | 这里精品| 不卡免费在线视频 | 国产黄色大全 | 国久久久 | 免费日韩 | 欧美三区视频 | 亚洲国产精品久久人人爱 | 欧美视频xxx| 综合 欧美 亚洲日本 | 在线观看国产视频 | 亚洲一区二区三区免费视频 | 欧美精品一区二区三区在线播放 | japanhd熟睡侵犯 | 在线免费成人 | 天天操综合网 | 成人在线免费视频 | 国产免费观看一区二区三区 | 国产精品美女久久久久久久网站 | 在线观看成人小视频 | 亚洲一区二区高清视频 | 成人国产免费视频 | 999精品视频 | 嫩草视频入口 | h免费在线观看 | aaaa网站 | 国产亚洲欧美一区二区三区 | 亚洲精品久久久久avwww潮水 | 日韩超碰 | 亚洲精品一区二区三区蜜桃久 | 欧美国产精品一区二区三区 | 日本天堂在线播放 | 天天干,夜夜操 | 久久国产成人 | 欧美一区视频 | 欧美日韩综合一区 | 99精品视频网 | 91在线视频福利 | 日韩精品一区二区在线观看 | 男女视频在线观看 | 国产激情不卡 | 山岸逢花在线 | 欧美日韩电影一区二区 | av女人的天堂 | 一区二区三区四区日韩 | 成人看片在线 | 国产精品一区二区三区四区 | 欧美电影一区 | 日韩在线中文字幕 | 欧美午夜在线观看 | 天天草夜夜 | 黄色二区 | 日韩一级大片 | 亚洲一区二区在线视频 | 欧美精品一区二区三区中文字幕 | 成人在线观 | 久久久久久久久久穴 | 欧美一a一片一级一片 | 国产欧美精品一区二区 | 在线观看v片 | 九九av| 一级片网| 毛片在线视频 | 国家aaa的一级看片 h片在线看 | 亚洲一区视频在线 | 一级特黄网站 | 狠狠综合久久av一区二区老牛 | 国产专区一区二区三区 | 久久免费电影 | 亚洲精品久久久久久动漫 | 日韩在线观看 | 国内精品一区二区 | 成人黄色电影在线观看 | 一级毛片免费看 | 色婷婷久久一区二区三区麻豆 |