久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

Django使用channels + websocket打造在線聊天室

瀏覽:7日期:2024-09-06 08:52:03
目錄什么是websocket?第一步 準備工作第二步 編寫聊天室頁面第三步 編寫后臺websocket路由及處理方法第四步 運行看效果小結(jié)

Channels是Django團隊研發(fā)的一個給Django提供websocket支持的框架,它同時支持http和websocket多種協(xié)議。使用channels可以讓你的Django應(yīng)用擁有實時通訊和給用戶主動推送信息的功能。

演示效果如下所示:

Django使用channels + websocket打造在線聊天室

什么是websocket?

WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議。WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。

很多網(wǎng)站為了實現(xiàn)推送技術(shù),所用的技術(shù)都是 Ajax 輪詢。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務(wù)器發(fā)出HTTP請求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。這種傳統(tǒng)的模式帶來很明顯的缺點,即瀏覽器需要不斷的向服務(wù)器發(fā)出請求,然而HTTP請求可能包含較長的頭部,其中真正有效的數(shù)據(jù)可能只是很小的一部分,顯然這樣會浪費很多的帶寬等資源。Websocket能更好的節(jié)省服務(wù)器資源和帶寬,并且能夠更實時地進行通訊,早已成為一種非常流行必須掌握的技術(shù)。

第一步 準備工作

首先在虛擬環(huán)境中安裝django和channels(本項目使用了最新版本,均為3.X版本), 新建一個名為myproject的項目,新建一個app名為chat。如果windows下安裝報錯,如何解決自己網(wǎng)上去找吧。

pip install django==3.2.3pip install channels==3.0.3

修改settings.py, 將channels和chat加入到INSTALLED_APPS里,并添加相應(yīng)配置,如下所示:

INSTALLED_APPS = [ ’django.contrib.admin’, ’django.contrib.auth’, ’django.contrib.contenttypes’, ’django.contrib.sessions’, ’django.contrib.messages’, ’django.contrib.staticfiles’, ’channels’, # channels應(yīng)用 ’chat’, ] # 設(shè)置ASGI應(yīng)用 ASGI_APPLICATION = ’myproject.asgi.application’ # 設(shè)置通道層的通信后臺 - 本地測試用 CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels.layers.InMemoryChannelLayer' } }

注意 :本例為了簡化代碼,使用了InMemoryChannelLayer做通道層(channel_layer)的通信后臺,實際生產(chǎn)環(huán)境中應(yīng)該需要使用redis作為后臺。這時你還需要安裝redis和channels_redis,然后添加如下配置:

# 生產(chǎn)環(huán)境中使用redis做后臺,安裝channels_redis CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': { 'hosts': [('127.0.0.1', 6379)], #或'hosts': [os.environ.get(’REDIS_URL’, ’redis://127.0.0.1:6379/1’)],}, }, }

最后將chat應(yīng)用的urls.py加入到項目urls.py中去,這和常規(guī)Django項目無異。

# myproject/urls.py from django.conf.urls import include from django.urls import path from django.contrib import admin urlpatterns = [ path(’chat/’, include(’chat.urls’)), path(’admin/’, admin.site.urls), ]第二步 編寫聊天室頁面

我們需要利用django普通視圖函數(shù)編寫兩個頁面,一個用于展示首頁(index), 通過表單讓用戶輸入聊天室的名稱(room_name),然后跳轉(zhuǎn)到相應(yīng)聊天室頁面;一個頁面用于實時展示聊天信息記錄,并允許用戶發(fā)送信息。

這兩個頁面對應(yīng)的路由及視圖函數(shù)如下所示:

# chat/urls.py from django.urls import path from . import views urlpatterns = [ path(’’, views.index, name=’index’), path(’<str:room_name>/’, views.room, name=’room’), ] # chat/views.py from django.shortcuts import render def index(request): return render(request, ’chat/index.html’, {}) def room(request, room_name): return render(request, ’chat/room.html’, { ’room_name’: room_name })

接下來我們編寫兩個模板文件index.html和room.html。它們的路徑位置如下所示:

chat/ __init__.py templates/chat/ index.html room.html urls.py views.py

index.html內(nèi)容如下所示。它也基本不涉及websocket,就是讓用戶輸入聊天室后進行跳轉(zhuǎn)。

<!-- chat/templates/chat/index.html --> <!DOCTYPE html> <html> <head> <meta charset='utf-8'/> <title>Chat Rooms</title> </head> <body> 請輸入聊天室名稱: <input type='text' size='100'> <input type='button' value='Enter'> <script> document.querySelector(’#room-name-input’).focus(); document.querySelector(’#room-name-input’).onkeyup = function(e) { if (e.keyCode === 13) { // enter, return document.querySelector(’#room-name-submit’).click(); }}; document.querySelector(’#room-name-submit’).onclick = function(e) { var roomName = document.querySelector(’#room-name-input’).value; window.location.pathname = ’/chat/’ + roomName + ’/’;}; </script> </body> </html>

room.html內(nèi)容如下所示。為了幫助你理解前后端是怎么實現(xiàn)websocket實時通信的,我給每行js代碼添加了注釋,這對于你理解前端如何發(fā)送websocket的請求,如果處理后端發(fā)過來的websocket消息至關(guān)重要。

<script>// 獲取房間名const roomName = JSON.parse(document.getElementById(’room-name’).textContent); // 根據(jù)roomName拼接websocket請求地址,建立長連接// 請求url地址為/ws/chat/<room_name>/const wss_protocol = (window.location.protocol == ’https:’) ? ’wss://’: ’ws://’;const chatSocket = new WebSocket( wss_protocol + window.location.host + ’/ws/chat/’ + roomName + ’/’ ); // 建立websocket連接時觸發(fā)此方法,展示歡迎提示chatSocket.onopen = function(e) { document.querySelector(’#chat-log’).value += (’[公告]歡迎來到’ + roomName + ’討論群。請文明發(fā)言!n’)} // 從后臺接收到數(shù)據(jù)時觸發(fā)此方法// 接收到后臺數(shù)據(jù)后對其解析,并加入到聊天記錄chat-log chatSocket.onmessage = function(e) { const data = JSON.parse(e.data); document.querySelector(’#chat-log’).value += (data.message + ’n’);}; // websocket連接斷開時觸發(fā)此方法 chatSocket.onclose = function(e) { console.error(’Chat socket closed unexpectedly’);}; document.querySelector(’#chat-message-input’).focus(); document.querySelector(’#chat-message-input’).onkeyup = function(e) { if (e.keyCode === 13) { // enter, return document.querySelector(’#chat-message-submit’).click(); }}; // 每當點擊發(fā)送消息按鈕,通過websocket的send方法向后臺發(fā)送信息。 document.querySelector(’#chat-message-submit’).onclick = function(e) { const messageInputDom = document.querySelector(’#chat-message-input’); const message = messageInputDom.value; //注意這里:先把文本數(shù)據(jù)轉(zhuǎn)成json格式,然后調(diào)用send方法發(fā)送。 chatSocket.send(JSON.stringify({ ’message’: message })); messageInputDom.value = ’’;}; </script>

此時如果你使用python manage.py runserver命令啟動測試服務(wù)器,當你訪問一個名為/hello/的房間時,你將看到如下頁面:

Django使用channels + websocket打造在線聊天室

到這里你看不到任何聊天記錄,也不能發(fā)送任何消息,因為我們還沒有在后端編寫任何代碼用于處理前端發(fā)來的消息,并返回數(shù)據(jù)。在終端你還會看到如下報錯, 說Django只能處理http連接,不能處理websocket。

Django使用channels + websocket打造在線聊天室

到目前為止,我們所寫的就是一個普通的django應(yīng)用,還沒有用到channels庫處理websocket請求。接下來我們就要正式開始使用channels了。

第三步 編寫后臺websocket路由及處理方法

當 Django 接受 HTTP 請求時, 它會根據(jù)根 URLconf 以查找視圖函數(shù), 然后調(diào)用視圖函數(shù)來處理請求。同樣, 當 channels 接受 WebSocket 連接時, 它也會根據(jù)根路由配置去查找相應(yīng)的處理方法。只不過channels的路由不在urls.py中配置,處理方法也不寫在views.py。在channels中,這兩個文件分別變成了routing.py和consumers.py。這樣的好處是不用和django的常規(guī)應(yīng)用混在一起。

routing.py:websocket路由文件,相當于django的urls.py。它根據(jù)websocket請求的url地址觸發(fā)consumers.py里定義的方法。 consumers.py:相當于django的視圖views.py,負責處理通過websocket路由轉(zhuǎn)發(fā)過來的請求和數(shù)據(jù)。

在chat應(yīng)用下新建routing.py, 添加如下代碼。它的作用是將發(fā)送至ws/chat/<room_name>/的websocket請求轉(zhuǎn)由ChatConsumer處理。

# chat/routing.py from django.urls import re_path from . import consumers websocket_urlpatterns = [ re_path(r’ws/chat/(?P<room_name>w+)/$’, consumers.ChatConsumer.as_asgi()), ]

注意:定義websocket路由時,推薦使用常見的路徑前綴 (如/ws) 來區(qū)分 WebSocket 連接與普通 HTTP 連接, 因為它將使生產(chǎn)環(huán)境中部署 Channels 更容易,比如nginx把所有/ws的請求轉(zhuǎn)給channels處理。

與Django類似,我們還需要把這個app的websocket路由加入到項目的根路由中去。編輯myproject/asgi.py, 添加如下代碼:

# myproject/asgi.py import os from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application import chat.routing os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') application = ProtocolTypeRouter({ # http請求使用這個 'http': get_asgi_application(), # websocket請求使用這個 'websocket': AuthMiddlewareStack( URLRouter( chat.routing.websocket_urlpatterns) ), })

在這里,channels的ProtocolTypeRouter會根據(jù)請求協(xié)議的類型來轉(zhuǎn)發(fā)請求。AuthMiddlewareStack將使用對當前經(jīng)過身份驗證的用戶的引用來填充連接的scope, 類似于 Django 的request對象,我們后面還會講到。

接下來在chat應(yīng)用下新建consumers.py, 添加如下代碼:

import json from asgiref.sync import async_to_sync from channels.generic.websocket import WebsocketConsumer import datetime class ChatConsumer(WebsocketConsumer): # websocket建立連接時執(zhí)行方法 def connect(self): # 從url里獲取聊天室名字,為每個房間建立一個頻道組 self.room_name = self.scope[’url_route’][’kwargs’][’room_name’] self.room_group_name = ’chat_%s’ % self.room_name # 將當前頻道加入頻道組 async_to_sync(self.channel_layer.group_add)( self.room_group_name, self.channel_name) # 接受所有websocket請求 self.accept() # websocket斷開時執(zhí)行方法 def disconnect(self, close_code): async_to_sync(self.channel_layer.group_discard)( self.room_group_name, self.channel_name) # 從websocket接收到消息時執(zhí)行函數(shù) def receive(self, text_data): text_data_json = json.loads(text_data) message = text_data_json[’message’] # 發(fā)送消息到頻道組,頻道組調(diào)用chat_message方法 async_to_sync(self.channel_layer.group_send)( self.room_group_name, { ’type’: ’chat_message’, ’message’: message }) # 從頻道組接收到消息后執(zhí)行方法 def chat_message(self, event): message = event[’message’] datetime_str = datetime.datetime.now().strftime(’%Y-%m-%d %H:%M:%S’) # 通過websocket發(fā)送消息到客戶端 self.send(text_data=json.dumps({ ’message’: f’{datetime_str}:{message}’}))

每個自定義的Consumer類一般繼承同步的WebsocketConsumer類或異步的AysncWebSocketConsumer類,它自帶 self.channel_name 和self.channel_layer 屬性。前者是獨一無二的長連接頻道名,后者提供了 send(), group_send()和group_add() 3種方法, 可以給單個頻道或一個頻道組發(fā)信息,還可以將一個頻道加入到組。

每個頻道(channel)都有一個名字。擁有頻道名稱的任何人都可以向頻道發(fā)送消息。

一個組(group)有一個名字。具有組名稱的任何人都可以按名稱向組添加/刪除頻道,并向組中的所有頻道發(fā)送消息。

注意:雖然異步Consumer類性能更優(yōu),channels推薦使用同步consumer類 , 尤其是調(diào)用Django ORM或其他同步程序時,以保持整個consumer在單個線程中并避免ORM查詢阻塞整個event。調(diào)用channel_layer提供的方法時需要用async_to_sync轉(zhuǎn)換一下。

除此以外,我們還使用了self.scope[’url_route’][’kwargs’][’room_name’]從路由中獲取了聊天室的房間名,在channels程序中,scope是個很重要的對象,類似于django的request對象,它代表了當前websocket連接的所有信息。你可以通過scope[’user’]獲取當前用戶對象,還可以通過scope[’path’]獲取當前當前請求路徑。

第四步 運行看效果

如果不出意外,你現(xiàn)在的項目布局應(yīng)該如下所示:

Django使用channels + websocket打造在線聊天室

連續(xù)運行如下命令,就可以看到我們文初的效果啦。

python manage.py makemigrations

python manage.py migrate

python manage.py runserver

小結(jié)

我們已經(jīng)使用django + channels 寫了個在線聊天小應(yīng)用了,現(xiàn)在來總結(jié)下我們所學的知識吧。

websocket屬于全雙工通訊的協(xié)議,可以在服務(wù)器和客戶端之間保持長連接,實現(xiàn)雙向數(shù)據(jù)傳輸。 前端創(chuàng)建websocket對象后可以通過onmessage監(jiān)聽并處理后端返回的數(shù)據(jù),可以通過send方法向后端發(fā)送數(shù)據(jù)。 channels對應(yīng)websocket的路由和處理方法分別寫在routing.py和consumers.py文件里,相當于django的urls.py和views.py。 每個頻道(channel)都有一個名字,擁有頻道名稱的任何人都可以向頻道發(fā)送消息。一個組(group)有一個名字,可以包含多個頻道。 每個自定義的Consumer類自帶 self.channel_name 和self.channel_layer 屬性。前者是獨一無二的頻道名,后者提供了 send(), group_send()和group_add() 3種方法。 在channels程序中,scope是個很重要的對象,類似于django的request對象,它代表了當前websocket連接的所有信息,比如scope[’user’], scope[’path’]。

本文的知識你學會了嗎? 學到了就點個贊吧!下期我們將利用channels + celery + redis打造個聊天機器人,歡迎關(guān)注!

以上就是Django使用channels + websocket打造在線聊天室的詳細內(nèi)容,更多關(guān)于Django 在線聊天室的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Django
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品欧美视频 | 欧美一区二区三区在线视频观看 | 毛片免费视频 | 午夜欧美一区二区三区在线播放 | 一区二区免费视频观看 | 亚洲一二视频 | 国产精品三级在线 | 伊人激情网| 中文字幕国产视频 | 国产成人精品一区二区三区视频 | av手机在线播放 | 天天操综合网 | 午夜精品久久久久久久久 | 午夜影视在线观看 | 日韩一区中文 | 亚洲日本欧美 | 中文字幕在线一区二区三区 | 91网站在线看 | 日韩一区二区三区精品 | 亚洲天堂一区 | 国产成人精品高清久久 | 一区二区视频 | 日韩激情二区 | 国产免费无遮挡 | 天天操天天舔天天爽 | 老司机狠狠爱 | 一区二区三区视频在线 | 日日干夜夜干 | 中文字幕在线观看 | 国产免费一区二区三区 | 国产色 | 台湾佬亚洲色图 | 亚洲网站在线观看 | 欧美一区二区三区精品 | 日韩成人精品视频在线观看 | 中文字幕国产一区 | 久草新免费 | 欧美亚洲视频 | 欧美一级二级视频 | 日韩成人小视频 | 久操成人 | 久久精品网 | 毛片大全 | 国产精品一区二区无线 | 成人h动漫免费观看网站 | 成人午夜免费视频 | 亚洲国产精品成人 | 国产高清在线看 | 成人欧美日韩一区二区三区 | 亚洲v日韩v综合v精品v | 欧美在线观看视频 | 精品国产高清一区二区三区 | 91亚洲国产精品 | 特a级片 | 97视频久久| 久久亚洲一区二区三区四区五区高 | 亚洲视频免费在线 | 免费视频一区 | www.788.com色淫免费 | 成人福利影院 | 亚洲精品二三区 | 夜夜草天天干 | 日韩欧美国产电影 | 成人免费视频网站在线观看 | 久久亚洲综合 | 特级丰满少妇一级aaaa爱毛片 | 999视频在线免费观看 | 日韩成人高清电影 | 最新中文字幕久久 | 国产日韩视频 | 精品国产一区二区三区久久久 | 色玖玖综合 | 女人夜夜春高潮爽av片 | 成人av片在线观看 | 一区二区在线免费观看 | 国产精品777 | 视频在线一区二区三区 | 久久国内精品 | 不卡视频一区 | 96久久久| 羞羞视频免费观看 | 精品国产一区二区三区久久影院 | 国内精品视频一区二区三区 | 一级免费黄视频 | 亚洲伊人成人 | 欧美一区二区三区在线看 | 狠狠操天天干 | 亚洲电影在线 | 欧美久久成人 | 中文字幕加勒比 | 午夜影院a | 欧美日韩激情四射 | 高清国产一区二区三区四区五区 | 在线播放一级片 | 欧美一区二区三区 | 亚洲高清一区二区三区 | 亚洲三级不卡 | 最新久久精品 | 特级淫片女子高清视频在线观看 | 国产欧美日韩 | 国产日韩亚洲欧美 | 免费看的毛片 | 精品久久中文字幕 | 综合伊人久久 | 久久免费视频观看 | 色精品| 欧美久草 | 九九久久精品视频 | 国产精品久久久久久 | 亚洲日韩欧美一区二区在线 | 亚洲色域网 | 久久久国产一区二区三区四区小说 | 亚洲一区二区三区四区的 | 国产一区二区三区视频在线观看 | 九九热精 | 亚洲三级免费观看 | 国产精品久久久久久久久福交 | 欧美日韩高清在线一区 | 中文字幕成人 | 黄色资源网站 | 性色av一区二区三区免费看开蚌 | 久久久久网站 | 精品无码久久久久久国产 | 久草日本 | 天天爱天天操 | 中文字幕影院 | 国产精品高潮呻吟久久av黑人 | 综合久久综合久久 | 日本久久综合 | 欧美人人 | 欧美一级一 | 欧美成在线视频 | 欧美视频在线免费 | 日韩欧美亚洲 | 亚洲视频在线观看免费 | 亚洲精品国产综合区久久久久久久 | 羞羞网页 | 色综合天天综合网国产成人网 | 国产一区二区在线视频观看 | 久久精品免费观看 | 蜜桃精品久久久久久久免费影院 | 日韩欧美一二三区 | 羞羞网页| 欧美激情一区二区 | 日韩精品三区 | www国产亚洲精品久久网站 | 国产高清在线精品 | 成人免费crm在线观看 | 国产h视频在线观看 | 精品一区二区三区免费 | 午夜在线观看视频网站 | 日韩成人影院 | 久久综合九色综合欧美狠狠 | 九九99九九 | 毛片一区二区三区 | 美女视频黄色片 | 精品99在线| 色婷婷亚洲 | 中文字幕成人 | 亚洲一区国产精品 | 在线区 | 久久a国产 | 伊人网站 | 人人看人人射 | 一区二区三区精品 | 四虎新网站 | 成人黄色在线视频 | 综合久久久久 | 有码在线 | av影音在线 | 韩国精品一区二区 | 久久久国产一区二区 | 国产中文字幕在线观看 | 精品久久久久久久久久久久久久久 | 精品无码久久久久国产 | 九九热精品视频 | 欧美成人一区二区三区片免费 | 亚洲一区二区三 | 欧美成人精品一区二区男人看 | 国产视频精品在线 | 欧美黄色一区 | av中文在线 | 国产精品一区二区三区四区 | 伊人网av| 亚洲欧美在线播放 | 免费在线看a | 久久r免费视频 | 久久久日本 | 在线观看免费av网 | 中文字幕99 | av一区二区三区在线观看 | 在线免费黄色小视频 | 99精品欧美一区二区三区 | www.国产| 日日视频| 精品久久久久久一区二区 | 日本不卡一区二区 | 日本不卡一区 | 国产伦精品一区二区三区四区视频 | 一区二区三区视频 | 国产精品一区二区视频 | 欧洲成人一区 | 日本精品一区二 | 美女h视频 | 久久婷婷国产麻豆91天堂 | 久久噜噜噜精品国产亚洲综合 | 天天干天天摸 | 欧美精品久久久 | 日韩视频在线观看 | 性色av一二三杏吧传媒 | 国产日韩91 | 精品免费国产 | 夏同学福利网 | 日韩在线成人 | 极品久久 | 国产伦精品一区二区三区四区视频 | 亚洲免费a | 亚洲网站在线免费观看 | 青青草视频免费观看 | 久久久蜜桃一区二区人 | www伊人 | 亚洲精品视频在线播放 | www中文字幕在线观看 | 国产精品一区在线看 | 日本一区二区三区四区 | 亚洲成人免费网址 | 亚洲国产精品99久久久久久久久 | 欧美日韩一区二区在线 | 黄色手机在线观看 | 黑人巨大精品欧美黑白配亚洲 | 国产男女做爰免费网站 | 国产一级片 | 国产精品成人一区二区三区夜夜夜 | 亚洲激情久久 | 久久九 | 亚洲精品电影在线观看 | 国产成人精品一区二区三区四区 | 在线观看日韩精品 | 久久久久久九九 | 高清国产午夜精品久久久久久 | 国产三级一区二区 | 国产目拍亚洲精品99久久精品 | 国产欧美一区二区视频 | 伊人春色成人 | 欧美日韩在线视频观看 | 亚洲aaa| 91久久精品国产91久久 | 日韩电影中文字幕 | 日日骚 | www.久久.com | 亚洲欧美在线播放 | 亚洲精品久久久 | 久久久久网站 | 亚洲精品福利视频 | 国产精品一区二区在线 | 日韩欧美一级片 | 免费的日本网站 | 一区二区三区欧美 | 91黄在线观看 | 黄色资源在线观看 | 国产美女永久免费无遮挡 | 久在线视频| 国产在线成人 | 久久91| 亚洲欧美视频在线 | 精品一区二区在线观看 | 一区二区三区免费 | 久久国内精品 | 久久久久成人精品 | 在线看免费观看日本 | 精品久久久久久久久久久久 | 国产精品福利一区 | 国产欧美日韩在线 | 亚洲国产一区二区三区四区 | 极品女神高潮呻吟av久久 | h在线免费 | 欧洲视频一区二区 | 九九国产精品视频 | 91精品久久 | 欧美xxxx在线 | 久久久久久久一区 | 操操操操操 | 在线观看精品91福利 | 国产午夜精品久久 | 91麻豆精品国产91久久久更新时间 | 国产在线精品二区 | 91传媒在线播放 | 超碰国产在线 | 国产久| 午夜天堂精品久久久久 | 亚洲欧美另类久久久精品2019 | 国产欧美日韩在线观看 | 91久久久久 | 国产精品成人在线 | 日韩成人av在线 | 污色视频在线观看 | 波多野结衣 一区二区三区 精品精品久久 | 亚洲一区二区在线 | 欧美一级三级 | 中文字幕一二三区 | 欧美在线一区二区三区 | 香蕉视频91| 日本伊人网站 | 久草热8精品视频在线观看 亚洲区在线 | 国产一区 | 成人欧美一区二区三区在线播放 | 6080yy午夜一二三区久久 | 国产成人午夜高潮毛片 | 国产大学生一区 | 亚洲视频在线视频 | 亚洲精品一区二区 | 成人不卡 | 天堂√在线观看一区二区 | 国产精品久久久久久久久久久杏吧 | 伊人久久艹 | 欧美1区| 日韩在线二区 | 亚洲欧美激情在线 | 偷拍做爰吃奶视频免费看 | 国产精品99 | √新版天堂资源在线资源 | 国产亚洲精品精品国产亚洲综合 | 午夜成人在线视频 | www.嫩草 | 欧美日韩一级视频 | 白浆在线播放 | 日韩一区二区视频 | 精品国产一区二区 | 久久久久国产精品午夜一区 | h片在线免费观看 | 日韩精品一区二区在线观看视频 | 99精品国产在热久久 | 亚洲高清一区二区三区 | 男女视频在线免费观看 | 小草av| 亚州精品成人 | 日韩在线中文字幕视频 | 黄色成人免费看 | 久久成人精品一区二区三区 | 瑟瑟视频在线看 | 亚洲欧美中文字幕 | 国产精品无码久久久久 | 色吧av| 亚洲成av人影片在线观看 | 精品入口麻豆88视频 | 精品国产依人香蕉在线精品 | 成人午夜在线视频 | 国产ts人妖另类 | 日韩精品成人 | 国产一区二区三区免费在线 | 国产一区精品电影 | 二区三区 | 欧美一级艳情片免费观看 | 国产欧美精品区一区二区三区 | 久久99国产精品 | 国产日韩av在线 | 欧亚视频在线观看 | 久在线观看| 一区二区免费 | 成人精品鲁一区一区二区 | www伊人| 国产欧美精品 | 天堂在线视频 | 国产精品中文字幕在线播放 | 日本一区二区高清不卡 | 波多野结衣中文字幕在线视频 | 国产一区二区在线免费 | 欧美天天| 一区二区三区高清不卡 | 国产精品亚洲第一 | 国产精品高潮呻吟久久av黑人 | 欧美日韩视频在线第一区 | 成人亚洲视频在线观看 | 一区二区视频 | 亚洲精品久久久久久一区二区 | a一级片在线观看 | 国外成人在线视频网站 | 成人三区| 中文字幕av高清 | 久久久久黄 | 国产高清自拍 | 精品久久久久久国产 | 久久精品 | 久久久久久久成人 | 视频一区二区三区在线观看 | 成人精品视频一区二区三区 | 黄色毛片在线观看 | 黑人巨大精品欧美一区免费视频 | 国产一区二区三区视频 | 视频精品一区二区三区 | 五月婷婷综合网 | 亚洲国产aⅴ成人精品无吗 一区视频在线 | 午夜不卡视频 | 国产亚洲一区二区三区在线观看 | 欧美狠狠操 | 在线第一页 | 亚洲精品一区二区三区蜜桃久 | 欧美成年网站 | 日本久久国产 | 毛片免费在线 | 国产91成人在在线播放 | 国产在线观看欧美 | 成人免费av | 91精品国产91久久久久久 | 日韩中文字幕在线观看 | 亚洲精品欧美视频 | 成人在线一区二区 | 日韩中文字幕在线视频 | 黑人巨大精品欧美黑白配亚洲 | 亚洲视频在线一区 | 91在线精品一区二区三区 | 亚洲精品国产第一综合99久久 | 亚洲性在线 | 97免费在线观看视频 | 日韩成人免费视频 | 免费成人毛片 | 亚洲日本午夜 | 成人五月网| 欧美电影一区 | 亚洲男人天堂网 | 国产欧美一区二区精品忘忧草 | 99视频在线| 在线观看一区二区三区四区 | 国产二区三区 | 中文字幕日韩一区二区三区 | 全黄大全大色全免费大片 | 亚洲人成在线观看 | 97视频精品 | 久久久天堂国产精品女人 | 亚洲国产精品一区二区久久 | 亚洲视频中文字幕 | 人人人人澡 | 日本不卡免费新一二三区 | 亚洲国产视频一区 | 欧美成人一区二区三区片免费 | av网站观看 | 夜夜操天天干, | 成人精品一区二区三区中文字幕 | 国产传媒毛片精品视频第一次 | 亚洲一区在线日韩在线深爱 | 国产精品揄拍一区二区久久国内亚洲精 | av永久免费| 国产精品综合 | 欧美久久视频 | 天堂国产 | 国产网站在线 | 天堂视频中文字幕 | 久久视频精品 | 中文字幕一区二区三区四区不卡 | 手机看片在线 | 国产午夜精品久久 | 国产亚洲精品久久久优势 | 日韩在线免费 | www久久久| 国产美女精品一区二区三区 | 国产欧美日韩综合精品一区二区 | 精品久久久久久久久久久 | 波多野吉衣网站 | 欧美一区二区大片 | 国产精品中文 | 日韩精品一区二区三区在线观看 | 国产免费亚洲 | 黄色av网站在线免费观看 | 国产免费自拍 | 毛片一区二区三区 | 欧美一级一区 | 日本精品视频网站 | 久久久久久久99精品免费观看 | 国产精品久久久一区二区三区 | 精品人成 | 久草综合网| 精品久久久久久久久久久久久久 | 热99这里只有精品 | 国产成人午夜高潮毛片 | 国产精品久久777777 | 欧美一级在线免费观看 | 香蕉久久久| 日韩国产欧美一区 | 欧美精品一区自拍a毛片在线视频 | 中文字幕不卡在线 | 亚洲高清av | 一区二区三区国产精品 | 亚洲激情在线 | 欧美日韩中文字幕 | а天堂中文最新一区二区三区 | www欧美| 最新国产精品 | 日本免费一区二区三区 | www日本在线 | 国产欧美一区二区三区国产幕精品 | 国产三级在线 | 国产综合久久久 | 呦一呦二在线精品视频 | 国产伦精品一区二区 | 午夜tv免费观看 | 国产精品高清在线 | 亚洲综合二区 | 亚洲成人黄色 | 丁香婷婷在线 | 成年片| 视频一区二区三区中文字幕 | 日韩免费一区二区 | 久久这里只有精品免费 | 亚洲一区二区精品在线观看 | 亚洲视频在线观看 | www.99日本精品片com | 久久不卡日韩美女 | 91社区在线播放 | 欧美日本高清视频 | 成人无遮挡毛片免费看 | 性视屏 | 视频1区2区| 成人在线观看免费 | 亚洲综合一二区 | 国产一区二区资源 | 91中文视频 | 日本高清视频网站www | 欧美激情欧美激情在线五月 | www.99热| 欧美国产在线观看 | 精品久久一二三区 | 九色国产| 在线视频 中文字幕 | 国产在视频一区二区三区吞精 | 日韩一区二区在线观看视频 | 国产午夜视频 | 日韩视频在线免费观看 | 一色一黄视频 | 国产色黄视频 | 欧日韩不卡在线视频 | 日本三级在线观看中文字 | 国产精久久一区二区三区 | 一区二区免费 | 久草久| 国产精品久久久久久无遮挡 | 国产精品国产a级 | 亚洲影视一区 | 中文在线视频 | 免费毛片a线观看 | 免费观看视频毛片 | 伊人二区| 日本视频黄| 欧美a级成人淫片免费看 | 四虎影院在线免费播放 | 亚洲三区在线观看 | 一区二区三区亚洲 | 亚洲高清av| 精品国产一区二区三区性色av | 久热精品视频 | 精品中文字幕在线观看 | 亚洲自拍一区在线 | 国产精品99久久久久久动医院 | 秋霞av电影| 国产一区二区三区四 | 国产污视频在线 | 偷偷干夜夜拍 | 中文字幕在线视频免费播放 | 久久亚洲精品中文字幕 | 欧美一二区| 国产精品一码二码三码在线 | 久草在线在线精品观看 | 精品在线一区二区三区 | 午夜国产精品视频 | 91精品久久久久久久久久久 | 一区二区三区视频 | 亚洲毛片| av一区在线观看 | 欧美日韩精品一区二区在线播放 | 免费观看毛片 | 日韩欧美在线视频 | 手机看片369 | 精品国产黄a∨片高清在线 激情网站免费 | 中字幕视频在线永久在线观看免费 | 亚洲成人精品在线观看 | 日韩在线免费视频 | 欧美成人一区二免费视频软件 | 国产高清精品在线 | 欧美精品日韩 | 免费高清一级毛片 | 日韩在线中文字幕 | 精品亚洲网 | 色婷婷一区二区三区 | 婷婷久久综合 | 国产欧美中文字幕 | 欧美精品成人一区二区三区四区 | 色av一区 | 91国在线高清视频 | 国产欧美精品一区二区三区四区 | 亚洲国产精品久久久久久久 | 国产一区二区三区四区视频 | 欧美综合一区 | 欧美日韩在线视频免费 | 精品久久一二三区 | 黄网在线免费观看 | 国产一区久久 | 中文一区二区 | 手机看片1 | 中文字幕一级毛片 | 精品久久一区二区三区 | 91在线视频免费观看 | 天天干天天操天天舔 | 黄视频在线播放 | 日韩精品一区二区三区 | 综合久草 | 国产做a爱片久久毛片 | 亚洲精品第一页 | 欧美国产日韩一区 | 日韩精品免费 | 久久国产高清 | 国产小视频在线看 | 免费国产黄色大片 | 午夜精品视频在线观看 | 国产一区二区视频在线观看 | 亚洲精品国产第一综合99久久 | 天天插天天干 |