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

您的位置:首頁技術文章
文章詳情頁

如何使用Celery和Docker處理Django中的定期任務

瀏覽:159日期:2024-10-09 09:30:02

在構建和擴展Django應用程序時,不可避免地需要定期在后臺自動運行某些任務。

一些例子:

生成定期報告

清除緩存

發送批量電子郵件通知

執行每晚維護工作

這是構建和擴展不屬于Django核心的Web應用程序所需的少數功能之一。幸運的是,Celery提供了一個強大的解決方案,該解決方案非常容易實現,稱為Celery Beat。

在下面的文章中,我們將向您展示如何使用Docker設置Django,Celery和Redis,以便通過Celery Beat定期運行自定義Django Admin命令。

依存關系:

Django v3.0.5

Docker v19.03.8

Python v3.8.2

芹菜v4.4.1

Redis v5.0.8

Django + Celery系列:

Django和Celery的異步任務

使用Celery和Docker處理Django中的定期任務(本文!)

目標

在本教程結束時,您應該能夠:

使用Docker容器化Django,Celery和Redis

將Celery集成到Django應用中并創建任務

編寫自定義Django Admin命令

安排自定義Django Admin命令以通過Celery Beat定期運行

項目設置

從django-celery-beat存儲庫中克隆基礎項目,然后簽出基礎分支:

$ git clonehttps://github.com/testdrivenio/django-celery-beat --branch base --single-branch$ cd django-celery-beat

由于我們總共需要管理四個流程(Django,Redis,worker和Scheduler),因此我們將使用Docker通過連接起來簡化它們的工作流程,從而使它們都可以通過一個命令從一個終端窗口運行 。

從項目根目錄創建映像,并啟動Docker容器:

$ docker-compose up -d --build$ docker-compose exec web python manage.py migrate

構建完成后,導航至http:// localhost:1337以確保該應用程序能夠按預期運行。 您應該看到以下文本:

Orders No orders found!

項目結構:

├── .gitignore├── docker-compose.yml└── project ├── Dockerfile ├── core │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── entrypoint.sh ├── manage.py ├── orders │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── requirements.txt └── templates└── orders └── order_list.html

Celery和Redis

現在,我們需要為Celery,Celery Beat和Redis添加容器。

首先,將依賴項添加到requirements.txt文件中:

Django==3.0.5celery==4.4.1redis==3.4.1

docker-compose.yml文件內容:

redis: image: redis:alpinecelery: build: ./project command: celery -A core worker -l info volumes: - ./project/:/usr/src/app/ environment: - DEBUG=1 - SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on: - rediscelery-beat: build: ./project command: celery -A core beat -l info volumes: - ./project/:/usr/src/app/ environment: - DEBUG=1 - SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on: - redis

我們還需要更新Web服務的depends_on部分:

web: build: ./project command: python manage.py runserver 0.0.0.0:8000 volumes: - ./project/:/usr/src/app/ ports: - 1337:8000 environment: - DEBUG=1 - SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on: - redis # NEW

完整的docker-compose文件如下:

version: ’3.7’ services: web: build: ./project command: python manage.py runserver 0.0.0.0:8000 volumes: - ./project/:/usr/src/app/ ports: - 1337:8000 environment: - DEBUG=1 - SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on: - redis redis: image: redis:alpine celery: build: ./project command: celery -A core worker -l info volumes: - ./project/:/usr/src/app/ environment: - DEBUG=1 - SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on: - redis celery-beat: build: ./project command: celery -A core beat -l info volumes: - ./project/:/usr/src/app/ environment: - DEBUG=1 - SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on: - redis

在構建新容器之前,我們需要在Django應用中配置Celery。

芹菜配置

設定

在“核心”目錄中,創建一個celery.py文件并添加以下代碼:

import osfrom celery import Celeryos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings') app = Celery('core')app.config_from_object('django.conf:settings', namespace='CELERY')app.autodiscover_tasks()

這里發生了什么事?

首先,我們為DJANGO_SETTINGS_MODULE環境變量設置一個默認值,以便Celery知道如何找到Django項目。

接下來,我們創建了一個名稱為core的新Celery實例,并將該值分配給名為app的變量。

然后,我們從django.conf的settings對象中加載了celery配置值。 我們使用namespace =“ CELERY”來防止與其他Django設置發生沖突。 換句話說,Celery的所有配置設置必須以CELERY_為前綴。

最后,app.autodiscover_tasks()告訴Celery從settings.INSTALLED_APPS中定義的應用程序中查找Celery任務。

將以下代碼添加到core / __ init__.py:

from .celery import app as celery_app __all__ = ('celery_app',)

最后,使用以下Celery設置更新core / settings.py文件,使其可以連接到Redis:

CELERY_BROKER_URL = 'redis://redis:6379'CELERY_RESULT_BACKEND = 'redis://redis:6379'

build:

$ docker-compose up -d --build

查看日志:

$ docker-compose logs ’web’$ docker-compose logs ’celery’$ docker-compose logs ’celery-beat’$ docker-compose logs ’redis’

如果一切順利,我們現在有四個容器,每個容器提供不同的服務。

現在,我們準備創建一個示例任務,以查看其是否可以正常工作。

創建一個任務

創建一個新文件core / tasks.py并為僅打印到控制臺的示例任務添加以下代碼:

from celery import shared_task@shared_taskdef sample_task(): print('The sample task just ran.')

安排任務

在settings.py文件的末尾,添加以下代碼,以使用Celery Beat將sample_task安排為每分鐘運行一次:

CELERY_BEAT_SCHEDULE = { 'sample_task': { 'task': 'core.tasks.sample_task', 'schedule': crontab(minute='*/1'), },}

在這里,我們使用CELERY_BEAT_SCHEDULE設置定義了定期任務。 我們給任務命名了sample_task,然后聲明了兩個設置:

任務聲明要運行的任務。

時間表設置任務應運行的時間間隔。 這可以是整數,時間增量或crontab。 我們在任務中使用了crontab模式,告訴它每分鐘運行一次。 您可以在此處找到有關Celery日程安排的更多信息。

確保添加導入:

from celery.schedules import crontab import core.tasks

重啟容器,應用變更:

$ docker-compose up -d --build

查看日志:

$ docker-compose logs -f ’celery’celery_1 | -------------- [queues]celery_1 | .> celery exchange=celery(direct) key=celerycelery_1 |celery_1 |celery_1 | [tasks]celery_1 | . core.tasks.sample_task

我們可以看到Celery獲得了示例任務core.tasks.sample_task。

每分鐘,您應該在日志中看到一行以“示例任務剛剛運行”結尾的行:

celery_1 | [2020-04-15 22:49:00,003: INFO/MainProcess] Received task: core.tasks.sample_task[8ee5a84f-c54b-4e41-945b-645765e7b20a]celery_1 | [2020-04-15 22:49:00,007: WARNING/ForkPoolWorker-1] The sample task just ran.

自定義Django Admin命令

Django提供了許多內置的django-admin命令,例如:

遷移

啟動項目

startapp

轉儲數據

移民

除了內置命令,Django還為我們提供了創建自己的自定義命令的選項:

自定義管理命令對于運行獨立腳本或從UNIX crontab或Windows計劃任務控制面板定期執行的腳本特別有用。

因此,我們將首先配置一個新命令,然后使用Celery Beat自動運行它。

首先創建一個名為orders / management / commands / my_custom_command.py的新文件。 然后,添加運行它所需的最少代碼:

from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): help = 'A description of the command' def handle(self, *args, **options): pass

BaseCommand有一些可以被覆蓋的方法,但是唯一需要的方法是handle。 handle是自定義命令的入口點。 換句話說,當我們運行命令時,將調用此方法。

為了進行測試,我們通常只添加一個快速打印語句。 但是,建議根據Django文檔使用stdout.write代替:

當您使用管理命令并希望提供控制臺輸出時,應該寫入self.stdout和self.stderr,而不是直接打印到stdout和stderr。 通過使用這些代理,測試自定義命令變得更加容易。 另請注意,您無需以換行符結束消息,除非您指定結束參數,否則它將自動添加。

因此,添加一個self.stdout.write命令:

from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): help = 'A description of the command' def handle(self, *args, **options): self.stdout.write('My sample command just ran.') # NEW

測試:

$ docker-compose exec web python manage.py my_custom_commandMy sample command just ran.

這樣,讓我們將所有內容捆綁在一起!

使用Celery Beat安排自定義命令

現在我們已經啟動并運行了容器,已經過測試,可以安排任務定期運行,并編寫了自定義的Django Admin示例命令,現在該進行設置以定期運行自定義命令了。

設定

在項目中,我們有一個非常基本的應用程序,稱為訂單。 它包含兩個模型,產品和訂單。 讓我們創建一個自定義命令,該命令從當天發送確認訂單的電子郵件報告。

首先,我們將通過此項目中包含的夾具將一些產品和訂單添加到數據庫中:

$ docker-compose exec web python manage.py loaddata products.json

創建超級用戶:

$ docker-compose exec web python manage.py createsuperuser

出現提示時,請填寫用戶名,電子郵件和密碼。 然后在您的Web瀏覽器中導航到http://127.0.0.1:1337/admin。 使用您剛創建的超級用戶登錄,并創建幾個訂單。 確保至少有一個日期為今天。

讓我們為我們的電子郵件報告創建一個新的自定義命令。

創建一個名為orders / management / commands / email_report.py的文件:

from datetime import timedelta, time, datetime from django.core.mail import mail_adminsfrom django.core.management import BaseCommandfrom django.utils import timezonefrom django.utils.timezone import make_aware from orders.models import Order today = timezone.now()tomorrow = today + timedelta(1)today_start = make_aware(datetime.combine(today, time()))today_end = make_aware(datetime.combine(tomorrow, time())) class Command(BaseCommand): help = 'Send Today’s Orders Report to Admins' def handle(self, *args, **options): orders = Order.objects.filter(confirmed_date__range=(today_start, today_end)) if orders: message = '' for order in orders: message += f'{order} n' subject = ( f'Order Report for {today_start.strftime(’%Y-%m-%d’)} ' f'to {today_end.strftime(’%Y-%m-%d’)}' ) mail_admins(subject=subject, message=message, html_message=None) self.stdout.write('E-mail Report was sent.') else: self.stdout.write('No orders confirmed today.')

在代碼中,我們向數據庫查詢了日期為Confirmed_date的訂單,將訂單合并為電子郵件正文的單個消息,然后使用Django內置的mail_admins命令將電子郵件發送給管理員。

添加一個虛擬管理員電子郵件,并將EMAIL_BACKEND設置為使用控制臺后端,以便將該電子郵件發送到設置文件中的stdout:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'DEFAULT_FROM_EMAIL = 'noreply@email.com'ADMINS = [('testuser', 'test.user@email.com'), ]

運行:

$ docker-compose exec web python manage.py email_reportContent-Type: text/plain; charset='utf-8'MIME-Version: 1.0Content-Transfer-Encoding: 7bitSubject: [Django] Order Report for 2020-04-15 to 2020-04-16From: root@localhostTo: test.user@email.comDate: Wed, 15 Apr 2020 23:10:45 -0000Message-ID: <158699224565.85.8278261495663971825@5ce6313185d3> Order: 337ef21c-5f53-4761-9f81-07945de385ae - product: Rice -------------------------------------------------------------------------------E-mail Report was sent.

Celery Beat

現在,我們需要創建一個定期任務來每天運行此命令。

向core / tasks.py添加一個新任務:

from celery import shared_taskfrom django.core.management import call_command # NEW @shared_taskdef sample_task(): print('The sample task just ran.') # NEW@shared_taskdef send_email_report(): call_command('email_report', )

因此,首先我們添加了一個call_command導入,該導入用于以編程方式調用django-admin命令。 在新任務中,然后將call_command與自定義命令的名稱一起用作參數。

要安排此任務,請打開core / settings.py文件,并更新CELERY_BEAT_SCHEDULE設置以包括新任務。

CELERY_BEAT_SCHEDULE = { 'sample_task': { 'task': 'core.tasks.sample_task', 'schedule': crontab(minute='*/1'), }, 'send_email_report': { 'task': 'core.tasks.send_email_report', 'schedule': crontab(hour='*/1'), },}

在這里,我們向CELERY_BEAT_SCHEDULE添加了一個名為send_email_report的新條目。 正如我們對上一個任務所做的那樣,我們聲明了該任務應運行的任務-例如core.tasks.send_email_report-并使用crontab模式設置重復性。

重新啟動容器,以確保新設置處于活動狀態:

$ docker-compose up -d --build看日志:$ docker-compose logs -f ’celery’celery_1 | -------------- [queues]celery_1 | .> celery exchange=celery(direct) key=celerycelery_1 |celery_1 |celery_1 | [tasks]celery_1 | . core.tasks.sample_taskcelery_1 | . core.tasks.send_email_report

一分鐘后郵件發出:

celery_1 | [2020-04-15 23:20:00,309: WARNING/ForkPoolWorker-1] Content-Type: text/plain; charset='utf-8'celery_1 | MIME-Version: 1.0celery_1 | Content-Transfer-Encoding: 7bitcelery_1 | Subject: [Django] Order Report for 2020-04-15 to 2020-04-16celery_1 | From: root@localhostcelery_1 | To: test.user@email.comcelery_1 | Date: Wed, 15 Apr 2020 23:20:00 -0000celery_1 | Message-ID: <158699280030.12.8934112422500683251@42481c198b77>celery_1 |celery_1 | Order: 337ef21c-5f53-4761-9f81-07945de385ae - product: Ricecelery_1 | [2020-04-15 23:20:00,310: WARNING/ForkPoolWorker-1] -------------------------------------------------------------------------------celery_1 | [2020-04-15 23:20:00,312: WARNING/ForkPoolWorker-1] E-mail Report was sent.

結論

在本文中,我們指導您為Celery,Celery Beat和Redis設置Docker容器。 然后,我們展示了如何使用Celery Beat創建自定義Django Admin命令和定期任務以自動運行該命令。

原文:https://testdriven.io/blog/django-celery-periodic-tasks/

到此這篇關于如何使用Celery和Docker處理Django中的定期任務的文章就介紹到這了,更多相關Celery Docker 處理Django定期任務內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
主站蜘蛛池模板: 天天操操 | 亚洲精品日韩激情在线电影 | 精品国产污网站污在线观看15 | 91精品久久久久久久久久 | 午夜久久久久 | 国产精品久久久久国产a级 国产精品欧美一区二区三区不卡 | 成人精品一区二区三区中文字幕 | av中文字幕在线播放 | 一本色道久久综合狠狠躁篇的优点 | 99在线观看 | 性色av网 | 一区免费看 | 久久精品国产视频 | 色综合久久久久 | 精品一区二区三区四区五区 | 三区中文字幕 | 国产主播福利 | 日韩电影专区 | 欧美一级全黄 | 久久久91精品国产一区二区三区 | 国产精品久久久久久福利一牛影视 | 日韩在线视频观看 | 久草热8精品视频在线观看 黄色片网站视频 | 欧美一区二区久久 | 一区二区三区国产好 | 国产精品久久久久久久久久东京 | 华丽的挑战在线观看 | 91久草视频 | 久久久国产一区二区三区 | 一区二区欧美视频 | 少妇久久久 | 亚洲综合在线一区 | 91亚洲国产成人久久精品网站 | 精品免费视频 | 99精品一区二区 | 日韩av一区二区三区在线观看 | 操片 | 中文字幕在线亚洲 | 91精品国产一区二区三区蜜臀 | 日日干夜夜操 | 在线视频日韩 | 国产一区二区精品久久岳 | 欧美 亚洲 另类 激情 另类 | 久久久久久1| 精品久久久久香蕉网 | 99久久日韩精品视频免费在线观看 | 婷婷久久五月天 | 欧美精品成人 | 欧美一区二区三区国产精品 | 97在线超碰| 精品国产乱码久久久久久1区2区 | 涩涩久久 | 日韩精品在线一区 | 亚洲激情精品 | 亚洲cb精品一区二区三区 | 日日久| 久久综合九色综合欧美狠狠 | 欧美视频在线播放 | 国产乱码精品一区二区三区手机版 | 日韩一区二区三区在线播放 | 国产精品久久99 | 日本视频黄 | 日韩色视频 | 精品一二三区 | 亚洲一区二区三区久久 | 国产精品久久国产精品 | 成年人毛片视频 | 亚洲不卡视频 | 久久韩国 | 国产精品视频播放 | 日韩欧在线 | 亚洲国产精品久久久 | 国产一区成人 | ririsao亚洲国产中文 | 久久一区 | a∨色狠狠一区二区三区 | 国产成人在线视频 | 日韩在线观看网站 | 中文字幕精品一区二区三区精品 | 国产高清免费 | 亚洲欧洲精品一区二区 | 麻豆.蜜桃.91.天美入口 | 日韩一级免费观看 | 亚洲 欧美 日韩在线 | 色婷婷国产精品久久包臀 | 99av| 黄色av网站在线免费观看 | 日日综合| 成人免费视频网址 | 男女全黄一级一级高潮免费看 | 91国内产香蕉 | 成人免费淫片aa视频免费 | 欧美一区二区三区精品免费 | 在线免费看黄视频 | 99视频这里有精品 | 成人在线高清视频 | 国产精品婷婷久久久久 | 一区二区福利 | 天天干干干干 | 亚洲精品女人久久 | 伊人欧美在线 | av网站有哪些 | 中文字幕成人在线 | 精品天堂 | av影片在线 | 91精品免费 | 91视频大全 | 91一区二区在线 | 国产人久久人人人人爽 | 日韩在线观看 | 国产精品99久久久久久久vr | 91在线精品一区二区三区 | 精品超碰 | 一区二区亚洲 | 欧美日韩一级电影 | 精品国产乱码久久久久久久软件 | 亚洲国产成人精品女人久久久 | www日批 | 日韩精品极品视频在线 | jizz在线看片 | 国内精品久久久久久中文字幕 | 国产福利片在线观看 | 在线日本中文字幕 | 欧美视频在线一区 | 天天精品 | 国产色在线观看 | 久久免费视频网 | 国产视频久久精品 | 日韩亚洲在线 | 亚洲精品综合在线 | 欧美综合婷婷 | 午夜午夜精品一区二区三区文 | 超碰97人人人人人蜜桃 | 国产中文字幕一区 | 欧美一二三四成人免费视频 | 99re免费视频精品全部 | 亚洲色图一区二区三区 | 亚洲成熟少妇视频在线观看 | 亚洲a网| 成人在线视频免费观看 | 99精品久久久 | 在线天堂视频 | 欧美亚洲一 | 色偷偷噜噜噜亚洲男人 | 久久久艹 | jizz欧美最大| 日韩福利视频 | 免费在线观看av的网站 | 久久精品一区二区 | 日韩亚洲视频 | 国产乱码精品一区二区三区五月婷 | 伊人精品| 欧美成人一区二区三区片免费 | 久久久欧美 | 久久99国产精品久久99果冻传媒 | 精品成人免费一区二区在线播放 | 国产免费自拍av | 毛片一级片 | 蜜月久久99静品久久久久久 | 欧美一区二区在线 | 久久久人成影片一区二区三区 | 亚洲精品三级 | 亚洲v在线 | se69色成人网wwwsex | 国产精品视频播放 | 欧美在线观看一区 | 无码日韩精品一区二区免费 | av片在线观看 | 欧美中文字幕一区 | 精品一区二区免费视频 | 亚洲综合区 | 国产一区二区三区免费 | 一区二区三区在线播放视频 | 九九99九九| 亚洲视频在线一区 | 日韩色在线 | 特级毛片在线 | 中文字幕亚洲一区二区三区 | 中文字幕一区二区三区乱码图片 | 日日精品| 日本a在线 | 国产真实精品久久二三区 | 男女视频免费在线观看 | 欧美一区二区三区视频 | 国产日韩欧美一区二区 | 天天干狠狠干 | 欧美日韩中文 | 男女视频免费 | 精品国产区| 中文字幕一区二区三区乱码图片 | 成人久久久 | 91免费看 | 天堂免费在线观看视频 | 久久久久一区二区三区 | 亚洲黄色免费 | www.久久| 国产高清中文字幕 | 国产精品亚洲综合 | 亚洲一区二区在线 | 日韩视频不卡 | 午夜精品久久久久久久久久久久 | www亚洲成人| 亚洲精品日韩精品 | 久久69| 日日操天天操 | 久久精品免费观看视频 | 色黄视频在线看 | 日韩国产一区二区三区 | 成人高清视频在线观看 | 免费黄色电影在线观看 | h免费在线 | 最新中文字幕视频 | 国产精品久久久久久久午夜 | 成人看片在线观看 | 啊啊啊网站 | 国产精品久久国产精品 | 久久成人精品 | www.xxx在线观看| 亚洲第一区在线 | 欧美成人一区二区三区片免费 | 欧美大片一区 | 黄色日批视频 | 黄色成人在线 | 国产.com| 亚洲精品视频在线播放 | 日本一区二区三区四区视频 | 国产91富婆养生按摩会所 | 国产精品久久在线观看 | 不用播放器的免费av | 久久久精品一区二区 | 日韩综合 | 一级片在线观看网站 | 欧美一区二区在线免费观看 | 无码国模国产在线观看 | 国产欧美精品一区二区色综合朱莉 | 在线观看欧美一区 | 国产精品毛片久久久久久久 | 一级毛片网| 欧美精品成人 | 国产成人精品午夜视频' | 91xx在线观看 | 91麻豆精品国产91久久久资源速度 | 在线观看中文字幕 | 99riav在线| 欧美精品在线一区 | 三级免费毛片 | 国产精品高清在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 精品久久久一区 | 日本小视频网站 | 日韩在线中文字幕 | 国产精品久久久久久 | 欧美国产日韩一区二区 | 色呦呦网站在线观看 | 婷婷丁香综合 | 日韩在线中文字幕 | 欧美日韩在线视频观看 | 一区在线视频 | 北条麻妃一区二区三区在线 | 99热国产在线观看 | 二区免费视频 | 日韩国产在线观看 | 天天操天天舔天天爽 | 91免费在线视频 | 99免费精品| 亚洲精品免费在线观看 | 久久精品久久综合 | 综合久久综合 | 91福利网址 | 亚洲精品自在在线观看 | 天堂中文网 | 亚洲毛片在线 | 在线成人av | 精品一区视频 | 亚洲精选久久 | 亚洲视频一区在线 | 欧美日韩国产在线观看 | 亚洲第一免费视频网站 | 99re在线观看 | 国产精品免费看 | 午夜在线观看 | 国产一区二区三区高清 | 亚洲一区国产视频 | 国产精品视频 | 免费av在线网站 | 久久黄网| 性欧美大战久久久久久久免费观看 | 欧美精品在线一区 | 亚洲一区二区黄 | 久久久夜夜夜 | 国产91av视频在线观看 | 国产精品伊人影院 | 草比网站 | 欧美亚洲啪啪 | 亚洲视频在线观看免费 | 精品影院 | 欧美成人精品一区二区男人看 | 日韩免费一区二区 | 中文字幕 国产精品 | 成全视频免费观看在线看黑人 | 欧美成年黄网站色视频 | 亚洲色图p| 免费日韩成人 | 卡通动漫第一页 | 国产精品欧美一区二区三区不卡 | 久久久久久久成人 | 成人av在线看 | 中文精品一区二区三区 | 91国产精品入口 | 欧美日韩中文字幕 | 久久国产亚洲精品 | 日日操天天爽 | 国产精品久久久久久影院8一贰佰 | 99免费视频 | 中文字幕久久久 | 日韩成人影视 | 国产视频导航 | 国产视频福利一区 | 91在线观看视频 | 美女视频一区二区三区 | 亚洲成人一区二区三区 | 日本不卡一二三 | 日韩一区二区三区在线观看 | 国产一区在线视频 | 国产精品一区二区三区免费视频 | www.av在线| 北条麻妃一区二区三区在线观看 | 国产精品一区二区av | 中文久久| 九九香蕉视频 | 国产在线一级视频 | 男女视频在线观看 | 亚洲精品一区二区三区精华液 | 欧洲一区在线 | 黄色毛片在线观看 | 黄色成人在线观看视频 | 一二三四区视频在线观看 | a视频在线免费观看 | 日韩一区二区福利 | 污污视频免费网站 | 国产精品免费视频一区 | 久久久久国产视频 | 国产男人天堂 | 国产欧美精品区一区二区三区 | 天天射天天干 | 亚洲一区 | 99久久免费看视频 | 国产精品久久久久久福利一牛影视 | 草草视频在线免费观看 | 99久久精品国产一区二区成人 | 国产精品九九九 | 高清国产午夜精品久久久久久 | 国产精品11 | 特级黄一级播放 | 亚洲不卡免费视频 | 毛片免费在线观看 | 91国内精品| 欧美精品久久久久久久久久丰满 | a免费在线 | 亚洲午夜在线 | 欧洲毛片 | 中文无码日韩欧 | 啪啪tv网站免费入口 | 亚洲久久一区 | 欧美成人高清视频 | 在线免费观看成年人视频 | 一区二区在线看 | 日韩精品久久久 | 狠狠综合久久av一区二区老牛 | 欧美一级欧美三级在线观看 | 国内精品国产三级国产在线专 | www.久| 亚洲看片| 国产成人精品一区二区三区 | 欧美日韩中文字幕 | 91福利视频导航 | 自拍视频在线观看 | 精品久久久久久国产 | 99视频在线播放 | 一级性视频| 亚洲欧美激情精品一区二区 | 日本jizz在线观看 | 国产一级片免费观看 | 国产第一亚洲 | 91精品国产乱码久久久久久久久 | 国产不卡一区 | 91美女在线观看 | 亚洲三级在线观看 | 在线国产视频 | 天天操,夜夜操 | 成人亚洲一区二区 | av手机电影| 国产欧美精品一区二区三区四区 | 在线视频这里只有精品 | 国产精品久久免费视频 | 精品国产青草久久久久福利 | 嫩草视频入口 | 日韩一区二 | 欧美日韩在线播放 | 亚洲精品在线播放 | 91亚洲国产成人久久精品网站 | 国产精品美女久久久久久免费 | 亚洲欧美国产毛片在线 | 污视频在线观看免费 | 三级av网站 | 国产精产国品一二三产区视频 | 国产成人一区 | 成年人黄色免费视频 | 欧美成人黑人xx视频免费观看 | 久久国产成人 | 91精品国产综合久久久久 | 91亚洲国产精品 | 久久99视频精品 | 欧美一区二区三区在线观看视频 | 午夜精品一区二区三区在线 | 精品免费国产视频 | 天天久久婷婷 | 久久精品网| 欧美视频免费在线 | 丁香在线 | 麻豆一区一区三区四区 | 一区二区精品视频 | 日韩网站免费观看 | 日韩国产欧美精品 | 国产.com| 日韩国产欧美 | 欧美激情一区二区三区蜜桃视频 | 欧美午夜一区二区三区 | 综合网亚洲 | 99re6热只有精品免费观看 | 久草免费在线 | 久久亚洲国产精品 | 精品九九 | 成人精品视频99在线观看免费 | 在线视频中文字幕 | 日韩三级在线免费观看 | 欧美日本韩国一区二区 | 一级毛片在线播放 | 玖草资源 | 国产精品三级久久久久久电影 | 免费中文字幕 | 九九99九九| 男女视频免费 | 久久久美女| 国产精品久久九九 | 我爱操 | 天天干网 | 狠狠操一区二区三区 | 亚洲av毛片一区二二区三三区 | 国产精品一区二区不卡 | 国产馆一区二区 | 91久久久久| 日本成人在线看 | www国产亚洲精品久久网站 | a级在线观看免费 | 天天天天综合 | 免费av播放| 亚洲午夜精品一区二区三区他趣 | 国产一区二区av | 久久久久女人精品毛片九一韩国 | 91精品国产自产精品男人的天堂 | 亚洲激情av| www亚洲成人 | 日韩在线视频资源 | 日本中文字幕电影 | 一级毛片在线播放 | 天天射影院 | 久久久精品综合 | 国产三级日本三级美三级 | 成人在线观看免费视频 | 在线色网站 | 日本一区二区高清视频 | 日韩免费精品 | 日韩视频精品在线 | 日韩亚洲视频 | 久久久免费 | 亚洲综合色自拍一区 | 一本一道久久a久久精品综合蜜臀 | 亚洲欧美在线一区二区 | 91精品国产99久久久 | 日韩中文字幕一区二区 | 国产精品自产拍在线观看 | 亚洲午夜在线 | 久久九精品 | av网站观看 | 国产精品久久久久久久久久久不卡 | www.日韩在线观看 | 国产亚洲一区二区在线 | 躁躁躁日躁夜夜躁 | 国产精品久久久久久久久久久小说 | 国产精品欧美久久久久一区二区 | 久久99精品久久久久久琪琪 | 人人看人人插 | 天天操天天干视频 | 最新日韩在线观看视频 | 亚洲视频一区二区三区 | 看全黄大色黄大片老人做 | 玖玖色资源 | 超碰人人干 | 欧美国产视频一区 | 国产精品成人在线观看 | 成人免费视频网站在线观看 | 日韩视频国产 | 蜜桃av一区二区三区 | 亚洲午夜视频在线观看 | 日韩一区在线视频 | 精品久久久久久久久久久久 | 日韩欧美自拍 | 日韩在线中文字幕 | 久久精品免费国产 | 久久99亚洲精品 | 精品久久久久久久久久久久久久 | 日本不卡高字幕在线2019 | 日本a v在线播放 | 久久精品一区二区三区四区毛片 | 日韩av免费 | 国产精品久久久久久久电影 | 美女视频一区二区三区 | 欧美国产日韩一区二区 | 久久精品成人 | 欧美精品一区二 | 欧美一区二区三区四区不卡 | 亚洲国产91| 美女视频黄的免费 | 天天舔日日干 | 嫩草懂你 | 91伊人网 | 日韩蜜桃 | 日日操视频 | 新91在线视频| 欧美亚洲视频 | 98精品国产高清在线xxxx天堂 | 国产精品久久久久久久久久久久久久 | 亚洲午夜av | 男人天堂视频网 | 日韩欧美二区 | 欧美视频在线观看不卡 | 精品国产不卡一区二区三区 | 在线视频日韩 | 国产精品成人在线观看 | 一区二区免费视频 | 欧美高清视频一区 | 成人免费一区二区三区视频网站 | 午夜国产精品视频 | 国产精品一二 | 99精品欧美一区二区蜜桃免费 | 毛片在线免费 | 亚洲乱码国产乱码精品精98午夜 | 国产一级毛片国语一级 | 欧美一区二区三区电影 | 国产视频欧美 | 国产精品a一区二区三区网址 | 99久久国产| www.日本精品 | 三级黄色在线视频 | 91高清免费看 | 国产精品久久久一区二区三区 | 日韩精品视频免费在线观看 | 精品一区二区三 | 日韩一区二区在线观看 | 久久久久国产一区二区三区 | 国产日韩欧美一区二区 | 亚洲成人av一区二区三区 | а√天堂中文在线资源8 | 国产日韩亚洲欧美 | 欧美日韩一区二区三区在线观看 | 午夜性电影 | 中文字幕av网| 日韩一二三区 | 国产毛片一区二区 | 99久热在线精品视频观看 | 精品国产色 | 五月激情站 | 国产视频一区二区 | 久久久亚洲 | 中文字幕视频在线观看 | 成人av网站在线观看 | 91精品综合久久久久久五月天 | 国产韩国精品一区二区三区 | 亚洲欧美视频 | 国产成人久久精品一区二区三区 | 国产精品视频久久 | 亚洲综合精品 | 91综合网| 国产福利视频在线观看 | 在线看免费黄色片 | 亚洲 欧美 另类 综合 偷拍 | 亚洲国产成人精品久久 | 亚洲精品乱码 | 欧美日韩一区在线 | 91看片 | 精一区二区 | 免费观看一级特黄欧美大片 | 亚洲精品视频在线 | 男女免费视频 | 国产探花在线精品一区二区 | 亚洲在线播放 | 亚洲综合99 | 国产黄色大片免费观看 | 91麻豆精品国产91久久久久久久久 | 一区在线视频 | 亚洲午夜视频在线观看 | 天堂资源最新在线 | 精品久久久中文字幕 | 国产精品99久久久久久宅男 | 一区三区视频 | 亚洲不卡 | 日本乱偷中文字幕 | 中文字幕高清 | 天天看片天天干 | 午夜精品视频在线观看 | 久久99精品久久久久久按摩秒播 | 亚洲国产精品99久久久久久久久 | www.日韩| 久久之精品|