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

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

Django DRF路由與擴(kuò)展功能的實(shí)現(xiàn)

瀏覽:214日期:2024-09-29 18:34:57

一. 視圖集與路由的使用

使用視圖集ViewSet,可以將一系列邏輯相關(guān)的動(dòng)作放到一個(gè)類中:

list() 提供一組數(shù)據(jù) retrieve() 提供單個(gè)數(shù)據(jù) create() 創(chuàng)建數(shù)據(jù) update() 保存數(shù)據(jù) destory() 刪除數(shù)據(jù)

ViewSet視圖集類不再實(shí)現(xiàn)get()、post()等方法,而是實(shí)現(xiàn)動(dòng)作 action 如 list() 、create() 等。

視圖集只在使用as_view()方法的時(shí)候,才會(huì)將action動(dòng)作與具體請(qǐng)求方式對(duì)應(yīng)上。

1. 常用的視圖集父類

1.ViewSet

繼承自APIView 與 ViewSetMixin作用也與APIView基本類似,提供了身份認(rèn)證、權(quán)限校驗(yàn)、流量管理等。

ViewSet主要通過繼承ViewSetMixin來實(shí)現(xiàn)在調(diào)用as_view()時(shí)傳入字典(如{’get’:’list’})的映射處理工作。

在ViewSet中,沒有提供任何動(dòng)作action方法,需要我們自己實(shí)現(xiàn)action方法。

2.GenericViewSet

使用ViewSet通常并不方便,因?yàn)閘ist、retrieve、create、update、destory等方法都需要自己編寫,而這些方法與前面講過的Mixin擴(kuò)展類提供的方法同名,所以我們可以通過繼承Mixin擴(kuò)展類來復(fù)用這些方法而無需自己編寫。但是Mixin擴(kuò)展類依賴與GenericAPIView,所以還需要繼承GenericAPIView。

GenericViewSet就幫助我們完成了這樣的繼承工作,繼承自GenericAPIView與ViewSetMixin,在實(shí)現(xiàn)了調(diào)用as_view()時(shí)傳入字典(如{’get’:’list’})的映射處理工作的同時(shí),還提供了GenericAPIView提供的基礎(chǔ)方法,可以直接搭配Mixin擴(kuò)展類使用。

3.ModelViewSet

繼承自GenericViewSet,同時(shí)包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

4.ReadOnlyModelViewSet

繼承自GenericViewSet,同時(shí)包括了ListModelMixin、RetrieveModelMixin。

下面我們還是通過案例,為大家演示吧!

首先,先創(chuàng)建一個(gè)子應(yīng)用。

python3 manage.py startapp collect

5. 在collect下新建序列化器類

# collect下的serializers.py文件from students.models import Studentfrom rest_framework import serializersclass StudentModelSerializer(serializers.ModelSerializer): class Meta: model = Student fields = ['id', 'name', 'age', 'sex'] extra_kwargs = { 'name': {'max_length': 10, 'min_length': 4}, 'age': {'max_value': 150, 'min_value': 0}, } def validate_name(self, data): if data == 'root': raise serializers.ValidationError('用戶名不能為root!') return data def validate(self, attrs): name = attrs.get(’name’) age = attrs.get(’age’) if name == 'alex' and age == 22: raise serializers.ValidationError('alex在22時(shí)的故事。。。') return attrsclass StudentInfoModelSerializer(serializers.ModelSerializer): class Meta: model = Student fields = ['id', 'name']

6. collect下的urls.py

from django.urls import path, re_pathfrom collect import viewsurlpatterns = [ # 不要在同一個(gè)路由的as_view中書寫兩個(gè)同樣的鍵的http請(qǐng)求,會(huì)產(chǎn)生覆蓋!!! # ViewSet path(’student1/’, views.Student1ViewSet.as_view({'get': 'get_5'})), path(’student1/get_5_girl/’, views.Student1ViewSet.as_view({'get': 'get_5_girl'})), re_path(r’^student1/(?P<pk>d+)/$’, views.Student1ViewSet.as_view({'get': 'get_one'})), # GenericViewSet path(’student2/’, views.Student3GenericViewSet.as_view({'get': 'get_5'})), path(’student2/get_5_girl/’, views.Student3GenericViewSet.as_view({'get': 'get_5_girl'})), # GenericViewSet,可以和模型類進(jìn)行組合快速生成基本的API接口 path('students3/', views.Student4GenericViewSet.as_view({'get': 'list', 'post': 'create'})), # ModelViewSet 默認(rèn)提供了5個(gè)API接口 path('students4/', views.Student5ModelViewSet.as_view({'post': 'create', 'get': 'list'})), re_path(r'^students4/(?P<pk>d+)/$', views.Student5ModelViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})), # ReadOnlyModelViewSet path('students5/', views.Student6ReadOnlyModelViewSet.as_view({'get': 'list'})), re_path(r'^students5/(?P<pk>d+)/$', views.Student6ReadOnlyModelViewSet.as_view({'get': 'retrieve'})), # 一個(gè)視圖類中調(diào)用多個(gè)序列化器 path('student8/', views.Student8GenericAPIView.as_view()), # 一個(gè)視圖集中調(diào)用多個(gè)序列化器 path('student9/', views.Student9ModelViewSet.as_view({'get': 'list'})), re_path(r'^student9/(?P<pk>d+)/$', views.Student9ModelViewSet.as_view({'get': 'retrieve'})),]'''有了視圖集以后,視圖文件中多個(gè)視圖類可以合并成一個(gè),但是,路由的代碼就變得復(fù)雜了,需要我們經(jīng)常在as_view方法 ,編寫http請(qǐng)求和視圖方法的對(duì)應(yīng)關(guān)系,事實(shí)上,在路由中,DRF也提供了一個(gè)路由類給我們對(duì)路由的代碼進(jìn)行簡(jiǎn)寫。當(dāng)然,這個(gè)路由類僅針對(duì)于 視圖集 才可以使用。'''# 路由類默認(rèn)只會(huì)給視圖集中的基本5個(gè)API生成地址[ 獲取一條,獲取多條,添加.刪除,修改數(shù)據(jù) ]from rest_framework.routers import DefaultRouter# 實(shí)例化路由類router = DefaultRouter()# router.register('訪問地址前綴','視圖集類','訪問別名')# 注冊(cè)視圖視圖集類router.register('student7', views.Student7ModelViewSet)# 把路由列表注冊(cè)到django項(xiàng)目中urlpatterns += router.urls

7. collect下的views.py

'''ViewSet視圖集,繼承于APIView,所以APIView有的功能,它都有,APIView沒有的功能,它也沒有'''from rest_framework.viewsets import ViewSetfrom students.models import Studentfrom .serializers import StudentModelSerializerfrom rest_framework.response import Responseclass Student1ViewSet(ViewSet): def get_5(self, request): student_list = Student.objects.all()[:5] serializer = StudentModelSerializer(instance=student_list, many=True) return Response(serializer.data) def get_one(self, request, pk): student = Student.objects.get(pk=pk) serializer = StudentModelSerializer(instance=student) return Response(serializer.data) def get_5_girl(self, request): student_list = Student.objects.filter(sex=False)[:5] serializer = StudentModelSerializer(instance=student_list, many=True) return Response(serializer.data)'''如果希望在視圖集中調(diào)用GenericAPIView的功能,則可以采用下面方式'''from rest_framework.generics import GenericAPIViewclass Student2ViewSet(ViewSet, GenericAPIView): queryset = Student.objects.all() serializer_class = StudentModelSerializer def get_5(self, request): student_list = self.get_queryset()[:5] serializer = StudentModelSerializer(instance=student_list, many=True) return Response(serializer.data) def get_one(self, request, pk): student = self.get_object() serializer = StudentModelSerializer(instance=student) return Response(serializer.data) def get_5_girl(self, request): student_list = self.get_queryset().filter(sex=False)[:5] serializer = StudentModelSerializer(instance=student_list, many=True) return Response(serializer.data)'''上面的方式,雖然實(shí)現(xiàn)視圖集中調(diào)用GenericAPIView,但是我們要多了一些類的繼承。所以我們可以直接繼承 GenericViewSet'''from rest_framework.viewsets import GenericViewSetclass Student3GenericViewSet(GenericViewSet): serializer_class = StudentModelSerializer queryset = Student.objects.all() def get_5(self, request): student_list = self.get_queryset()[:5] serializer = self.get_serializer(instance=student_list, many=True) return Response(serializer.data) def get_5_girl(self, request): student_list = self.get_queryset().filter(sex=False)[:5] serializer = self.get_serializer(instance=student_list, many=True) return Response(serializer.data)'''在使用GenericViewSet時(shí),雖然已經(jīng)提供了基本調(diào)用數(shù)據(jù)集(queryset)和序列化器屬性,但是我們要編寫一些基本的API時(shí),還是需要調(diào)用DRF提供的模型擴(kuò)展類 [Mixins]'''from rest_framework.viewsets import GenericViewSetfrom rest_framework.mixins import ListModelMixin, CreateModelMixinclass Student4GenericViewSet(GenericViewSet, ListModelMixin, CreateModelMixin): queryset = Student.objects.all() serializer_class = StudentModelSerializerfrom rest_framework.viewsets import ModelViewSetclass Student5ModelViewSet(ModelViewSet): queryset = Student.objects.all() serializer_class = StudentModelSerializer# 只讀模型視圖集from rest_framework.viewsets import ReadOnlyModelViewSetclass Student6ReadOnlyModelViewSet(ReadOnlyModelViewSet): queryset = Student.objects.all() serializer_class = StudentModelSerializer# 路由的使用from rest_framework.decorators import actionclass Student7ModelViewSet(ModelViewSet): queryset = Student.objects.all() serializer_class = StudentModelSerializer # methods 指定允許哪些http請(qǐng)求訪問當(dāng)前視圖方法 # detail 指定生成的路由地址中是否要夾帶pk值,True為需要 @action(methods=['GET'], detail=False) def get_6(self, request): serilizer = self.get_serializer(instance=self.get_queryset().get(pk=6)) return Response(serilizer.data)'''在多個(gè)視圖類合并成一個(gè)視圖類以后,那么有時(shí)候會(huì)出現(xiàn)一個(gè)類中需要調(diào)用多個(gè)序列化器''''''1. 在視圖類中調(diào)用多個(gè)序列化器''''''原來的視圖類中基本上一個(gè)視圖類只會(huì)調(diào)用一個(gè)序列化器,當(dāng)然也有可能要調(diào)用多個(gè)序列化器'''from .serializers import StudentInfoModelSerializerclass Student8GenericAPIView(GenericAPIView): queryset = Student.objects.all() # GenericAPI內(nèi)部調(diào)用序列化器的方法,我們可以重寫這個(gè)方法來實(shí)現(xiàn)根據(jù)不同的需求來調(diào)用不同的序列化器 def get_serializer_class(self): if self.request.method == 'GET': # 2個(gè)字段 return StudentInfoModelSerializer return StudentModelSerializer def get(self, request): '''獲取所有數(shù)據(jù)的id和name''' student_list = self.get_queryset() serializer = self.get_serializer(instance=student_list, many=True) return Response(serializer.data) def post(self, request): '''添加數(shù)據(jù)''' data = request.data serializer = self.get_serializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data)'''2. 在一個(gè)視圖集中調(diào)用多個(gè)序列化器'''class Student9ModelViewSet(ModelViewSet): queryset = Student.objects.all() '''要求: 列表數(shù)據(jù)list,返回2個(gè)字段, 詳情數(shù)據(jù)retrieve,返回所有字段, ''' def get_serializer_class(self): # 本次客戶端請(qǐng)求的視圖方法名 self.action if self.action == 'list': return StudentInfoModelSerializer return StudentModelSerializer

二. 擴(kuò)展功能

為了方便接下來的學(xué)習(xí),我們創(chuàng)建一個(gè)新的子應(yīng)用 opt

python3 manage.py startapp opt

因?yàn)榻酉聛淼墓δ苤行枰褂玫降卿浌δ埽晕覀兪褂胐jango內(nèi)置admin站點(diǎn)并創(chuàng)建一個(gè)管理員.

創(chuàng)建管理員以后,訪問admin站點(diǎn),先修改站點(diǎn)的語言配置,在settings里修改

LANGUAGE_CODE = ’zh-hans’

1. 認(rèn)證Authentication

可以在配置文件中配置全局默認(rèn)的認(rèn)證方案

REST_FRAMEWORK = { ’DEFAULT_AUTHENTICATION_CLASSES’: ( ’rest_framework.authentication.SessionAuthentication’, # session認(rèn)證 ’rest_framework.authentication.BasicAuthentication’, # 基本認(rèn)證 )}

也可以在每個(gè)視圖中通過設(shè)置authentication_classess屬性來設(shè)置

opt下的urls.py

from django.urls import pathfrom opt import viewsurlpatterns = [ path(’auth1/’, views.Demo1APIView.as_view()), path(’auth2/’, views.Demo2APIView.as_view()),]

opt下的views.py

from rest_framework.views import APIViewfrom rest_framework.response import Responsefrom rest_framework.permissions import IsAuthenticated, IsAdminUser'''用戶的認(rèn)證和權(quán)限識(shí)別'''class Demo1APIView(APIView): '''只允許登錄后的用戶訪問''' permission_classes = [IsAuthenticated] def get(self, request): '''個(gè)人中心''' return Response('個(gè)人中心')class Demo2APIView(APIView): '''只允許管理員訪問''' permission_classes = [IsAdminUser] def get(self, request): '''個(gè)人中心2''' return Response('個(gè)人中心2')

2. 權(quán)限Permissions

權(quán)限控制可以限制用戶對(duì)于視圖的訪問和對(duì)于具體數(shù)據(jù)對(duì)象的訪問。

在執(zhí)行視圖的dispatch()方法前,會(huì)先進(jìn)行視圖訪問權(quán)限的判斷 在通過get_object()獲取具體對(duì)象時(shí),會(huì)進(jìn)行模型對(duì)象訪問權(quán)限的判斷

內(nèi)置提供的權(quán)限:

AllowAny 允許所有用戶 IsAuthenticated 僅通過認(rèn)證的用戶 IsAdminUser 僅管理員用戶 IsAuthenticatedOrReadOnly 已經(jīng)登陸認(rèn)證的用戶可以對(duì)數(shù)據(jù)進(jìn)行增刪改操作,沒有登陸認(rèn)證的只能查看數(shù)據(jù)。

可以在配置文件中全局設(shè)置默認(rèn)的權(quán)限管理類,如:

REST_FRAMEWORK = { .... ’DEFAULT_PERMISSION_CLASSES’: ( ’rest_framework.permissions.IsAuthenticated’, )}

如果未指明,則采用如下默認(rèn)配置

’DEFAULT_PERMISSION_CLASSES’: ( ’rest_framework.permissions.AllowAny’,)

也可以在具體的視圖中通過permission_classes屬性來設(shè)置。

opt下的urls.py

urlpatterns = [ path(’auth1/’, views.Demo1APIView.as_view()), path(’auth2/’, views.Demo2APIView.as_view()), # 自定義權(quán)限 path(’auth3/’, views.Demo3APIView.as_view()),]

opt下的views.py

# 自定義權(quán)限from rest_framework.permissions import BasePermissionclass MyPermission(BasePermission): def has_permission(self, request, view): ''' 針對(duì)訪問視圖進(jìn)行權(quán)限判斷 :param request: 本次操作的http請(qǐng)求對(duì)象 :param view: 本次訪問路由對(duì)應(yīng)的視圖對(duì)象 :return: ''' if request.user.username == 'xiaoming': return True return Falseclass Demo3APIView(APIView): permission_classes = [MyPermission] def get(self, request): '''個(gè)人中心3''' return Response('個(gè)人中心3')

3. 限流Throttling

可以對(duì)接口訪問的頻次進(jìn)行限制,以減輕服務(wù)器壓力。

一般用于付費(fèi)購買次數(shù),投票等場(chǎng)景使用.

可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES進(jìn)行全局配置

REST_FRAMEWORK = { # 限流 ’DEFAULT_THROTTLE_CLASSES’: ( # 對(duì)全局進(jìn)行設(shè)置 ’rest_framework.throttling.AnonRateThrottle’, ’rest_framework.throttling.UserRateThrottle’ ), ’DEFAULT_THROTTLE_RATES’: { ’anon’: ’3/hour’, ’user’: ’3/minute’, }}

DEFAULT_THROTTLE_RATES 可以使用 second, minute, hour 或day來指明周期。

也可以在具體視圖中通過throttle_classess屬性來配置

opt下的urls.py

urlpatterns = [ path(’auth1/’, views.Demo1APIView.as_view()), path(’auth2/’, views.Demo2APIView.as_view()), # 自定義權(quán)限 path(’auth3/’, views.Demo3APIView.as_view()), # 限流 path(’auth4/’, views.Demo4APIView.as_view()),]

opt下的views.py

# 限流from rest_framework.throttling import UserRateThrottle, AnonRateThrottleclass Demo4APIView(APIView): # throttle_classes = [UserRateThrottle, AnonRateThrottle] # 全局配置后,這里就不用指定 def get(self, request): '''投票頁面''' return Response('投票頁面')

4. 過濾Filtering

對(duì)于列表數(shù)據(jù)可能需要根據(jù)字段進(jìn)行過濾,我們可以通過添加django-fitlter擴(kuò)展來增強(qiáng)支持。

pip3 install django-filter

在配置文件里進(jìn)行注冊(cè)

INSTALLED_APPS = [ ... ’django_filters’, # 需要注冊(cè)應(yīng)用,]REST_FRAMEWORK = { ... ’DEFAULT_FILTER_BACKENDS’: (’django_filters.rest_framework.DjangoFilterBackend’,)}

在視圖中添加filter_fields屬性,指定可以過濾的字段。

opt下的urls.py

urlpatterns = [ path(’auth1/’, views.Demo1APIView.as_view()), path(’auth2/’, views.Demo2APIView.as_view()), # 自定義權(quán)限 path(’auth3/’, views.Demo3APIView.as_view()), # 限流 path(’auth4/’, views.Demo4APIView.as_view()), # 過濾 path(’data5/’, views.Demo5APIView.as_view()),]

opt下的views.py

# 過濾from rest_framework.generics import GenericAPIView, ListAPIViewfrom students.models import Studentfrom .serializers import StudentModelSerializerfrom django_filters.rest_framework import DjangoFilterBackendclass Demo5APIView(ListAPIView): queryset = Student.objects.all() serializer_class = StudentModelSerializer filter_backends = [DjangoFilterBackend] # 全局配置后,這里就不用指定了。 filter_fields = [’age’, 'id'] # 聲明過濾字段

5. 排序Ordering

對(duì)于列表數(shù)據(jù),REST framework提供了OrderingFilter過濾器來幫助我們快速指明數(shù)據(jù)按照指定字段進(jìn)行排序。

使用方法:

在類視圖中設(shè)置filter_backends,使用rest_framework.filters.OrderingFilter過濾器,REST framework會(huì)在請(qǐng)求的查詢字符串參數(shù)中檢查是否包含了ordering參數(shù),如果包含了ordering參數(shù),則按照ordering參數(shù)指明的排序字段對(duì)數(shù)據(jù)集進(jìn)行排序。

前端可以傳遞的ordering參數(shù)的可選字段值需要在ordering_fields中指明。

opt下的urs.py

urlpatterns = [ path(’auth1/’, views.Demo1APIView.as_view()), path(’auth2/’, views.Demo2APIView.as_view()), # 自定義權(quán)限 path(’auth3/’, views.Demo3APIView.as_view()), # 限流 path(’auth4/’, views.Demo4APIView.as_view()), # 過濾 path(’data5/’, views.Demo5APIView.as_view()), # 排序 path(’data6/’, views.Demo6APIView.as_view()),]

opt下的views.py

# 排序from rest_framework.filters import OrderingFilterclass Demo6APIView(ListAPIView): queryset = Student.objects.all() serializer_class = StudentModelSerializer filter_backends = [DjangoFilterBackend, OrderingFilter] # 局部配置會(huì)覆蓋全局配置 filter_fields = [’id’, 'sex'] ordering_fields = [’id’, 'age']

6. 分頁P(yáng)agination

REST framework提供了分頁的支持。

我們可以在配置文件中設(shè)置全局的分頁方式,如:

REST_FRAMEWORK = { ’DEFAULT_PAGINATION_CLASS’: ’rest_framework.pagination.PageNumberPagination’, ’PAGE_SIZE’: 100 # 每頁數(shù)目}

也可通過自定義Pagination類,來為視圖添加不同分頁行為。在視圖中通過pagination_clas屬性來指明。

opt下的urls.py

urlpatterns = [ path(’auth1/’, views.Demo1APIView.as_view()), path(’auth2/’, views.Demo2APIView.as_view()), # 自定義權(quán)限 path(’auth3/’, views.Demo3APIView.as_view()), # 限流 path(’auth4/’, views.Demo4APIView.as_view()), # 過濾 path(’data5/’, views.Demo5APIView.as_view()), # 排序 path(’data6/’, views.Demo6APIView.as_view()), # 分頁 path(’data7/’, views.Demo7APIView.as_view()),]

opt下的views.py

# 分頁from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination'''1. 自定義分頁器,定制分頁的相關(guān)配置''''''# 頁碼分頁 PageNumberPagination前端訪問形式:GET http://127.0.0.1:8000/opt/data7/?page=4page=1 limit 0,10page=2 limit 10,20# 偏移量分頁 LimitOffsetPagination前端訪問形式:GET http://127.0.0.1:8000/opt/data7/?start=4&size=3start=0 limit 0,10start=10 limit 10,10start=20 limit 20,10'''class StandardPageNumberPagination(PageNumberPagination): '''分頁相關(guān)配置''' page_query_param = 'page' # 設(shè)置分頁頁碼關(guān)鍵字名 page_size = 3 # 設(shè)置每頁顯示數(shù)據(jù)條數(shù) page_size_query_param = 'size' # 設(shè)置指定每頁大小的關(guān)鍵字名 max_page_size = 5 # 設(shè)置每頁顯示最大值class StandardLimitOffsetPagination(LimitOffsetPagination): default_limit = 2 # 默認(rèn)限制,默認(rèn)值與PAGE_SIZE設(shè)置一致 limit_query_param = 'size' # limit參數(shù)名 offset_query_param = 'start' # offset參數(shù)名 max_limit = 5 # 最大limit限制class Demo7APIView(ListAPIView): queryset = Student.objects.all() serializer_class = StudentModelSerializer # 分頁 # 頁碼分頁類 pagination_class = StandardPageNumberPagination # 偏移量分頁類 # pagination_class = StandardLimitOffsetPagination

注意:如果在視圖內(nèi)關(guān)閉分頁功能,只需在視圖內(nèi)設(shè)置

pagination_class = None

到此這篇關(guān)于Django DRF路由與擴(kuò)展功能的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Django DRF路由與擴(kuò)展內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 国产天天操 | 久久国产精品久久精品 | 中文字字幕在线 | 国产一级黄色 | 天天曰天天曰 | 久在线视频 | 日本二区视频 | 国产日韩欧美精品一区二区三区 | 国产一区二区视频在线观看 | 国产精品欧美一区二区三区不卡 | 日韩一区电影 | 亚洲一区二区三区四区五区中文 | 国产一区欧美 | 欧美日韩三级在线 | 成人网久久 | 午夜精品久久久久久久 | 亚洲中午字幕 | 精品久久一区二区三区 | 精品毛片 | 在线观看v片 | 99免费在线观看视频 | www.毛片 | 国产综合一区二区 | 亚洲 欧美 精品 | 久草天堂| 日韩一区二区视频 | 成人免费福利视频 | 中文字幕综合 | 成人在线网址 | 91视频免费在线 | 久久久精品久久久久久 | 91免费看片 | 激情国产| 国产精品久久久久影院色老大 | 亚洲国产精品久久久久秋霞不卡 | 在线播放国产一区二区三区 | 中文字幕视频 | 成人高清视频在线观看 | 中文字幕第一页在线 | 91精品国产色综合久久不卡98口 | 99热婷婷| 国产精品原创av片国产免费 | 中文av在线免费观看 | 成人免费视频网站在线看 | 国产一区二区三区在线 | 日韩免费在线观看视频 | 一区二区三区免费看 | 成人久久18免费网站图片 | 中文字幕一区在线观看视频 | 日本不卡在线 | 狠狠视频 | 久久久久综合狠狠综合日本高清 | 欧美日本韩国在线 | 久久中文字幕一区 | 亚洲精品国产高清 | 特黄视频| 欧美在线观看禁18 | av黄色在线 | 亚洲影视一区二区 | 欧美激情精品久久久久 | 亚洲欧美精品 | 免费观看一级特黄欧美大片 | 人人爱夜夜爽日日视频 | 精品一区二区久久 | 一区二区视频网站 | 久久精品国产99国产 | 国产精品成人免费视频 | 日本久久精品视频 | 精品久久久久久久人人人人传媒 | 99精品久久久 | 精品久久久久久久久久久久久久 | 国产一区二区在线播放 | 亚洲国产福利一区 | 91精品国产综合久久国产大片 | 久久久精品综合 | www.久草| 黄色免费高清视频 | 国产精品99久久免费观看 | 亚洲理论电影在线观看 | 一级特黄色大片 | 久久99精品久久久水蜜桃 | 午夜视频网| 黄色a视频 | 二区欧美 | 91国视频 | 国产小视频在线观看 | 97精品视频在线 | 91麻豆精品国产91久久久久久久久 | 亚洲黄色国产 | 国产精品美女久久久久久久久久久 | 国产欧美高清在线观看 | 一区二区三区福利视频 | 国产精品久久久久久久久久妞妞 | 午夜精品一区二区三区免费视频 | 久久福利电影 | 综合久久综合久久 | 国内精品一区二区 | 国产婷婷久久 | 天天久久| www.久久久久久久久久久久 | 亚洲欧美高清 | 午夜精品一区二区三区在线观看 | 亚洲视频免费 | 亚洲成av人片在线观看 | 亚洲一区 国产 | 国产成人久久 | 亚洲激情在线 | 中国av在线 | 在线观看中文字幕亚洲 | 国产高清一区二区三区 | 成人欧美一区二区三区色青冈 | 欧美在线一区二区三区 | 日韩有码在线观看 | 精品一区二区av | 中文字幕免费在线观看 | 精品视频一区二区三区 | www.色综合| 久草久草久草 | 国产成人精品无人区一区 | 91视频免费看片 | 九九亚洲精品 | 中国电影黄色一级片免费观看 | 国产午夜精品一区二区三区嫩草 | 午夜tv| 日韩精品第一页 | 欧美日韩国产一级片 | 国产精品久久久久一区二区三区 | 日韩一区二区在线播放 | 国产欧美综合一区二区三区 | 久久二 | 97超碰免费 | 国产九九九 | 午夜爱视频 | 免费在线一区二区三区 | 国产精品一区二区三区四区 | 91亚洲国产精品 | 日韩av免费在线观看 | 怡红院成人影院 | 北条麻妃一区二区三区中文字幕 | 精品色区 | 成人免费视频视频在线观看 免费 | 国产专区一区二区三区 | 国产一区在线不卡 | 亚洲免费精品 | 国产一区二区三区免费视频 | 一级免费片 | 中文字幕视频在线观看 | 国产精品久久一区 | 一区二区精品视频 | 亚洲免费精品 | 国产婷婷精品av在线 | 老妇激情毛片免费 | 波多野结衣一二三区 | 精品久久久久久久人人人人传媒 | 欧美精品成人 | 日韩精品久久久久久 | 国产福利91精品一区二区 | 亚洲一区 | 性色视频在线 | 亚洲另类小视频 | 蜜桃视频在线观看www社区 | 国产精品久久国产精品 | 在线播放国产精品 | 亚洲无吗电影 | 91久久看片 | bxbx成人精品一区二区三区 | 国产二区三区 | 亚洲精品国产一区 | 欧美成人黑人xx视频免费观看 | 久久成人综合 | 中文字幕日韩欧美 | 太子妃好紧皇上好爽h | 91视频综合 | 青青久久久| 91精品国产色综合久久不卡98 | 在线不卡一区 | 久久亚洲美女 | 欧美猛交ⅹxxx乱大交视频 | 国产成人91 | 国产91久久精品一区二区 | 一区二区不卡视频在线观看 | www.久久久.com | 黄色毛片看看 | 中文字幕亚洲欧美精品一区四区 | 久久久久久久影院 | 成人在线精品视频 | 国产精品亚洲第一 | 欧美精品一区二区三区四区在线 | 亚洲电影在线观看 | 精品欧美乱码久久久久久 | 日本久久久久久久久 | 成人亚洲精品 | 亚洲一区中文字幕在线观看 | 中文字幕亚洲欧美 | 成年人黄色一级片 | 国产亚洲一区二区精品 | 国产精品永久免费自在线观看 | 中文字幕日韩欧美一区二区三区 | 国产精品一二 | 亚洲综合色自拍一区 | 波多野结衣一区二区三区高清 | 中文字幕在线网址 | 男女视频在线观看 | 亚洲综合在线视频 | 香蕉在线影院 | 伊人春色网 | 国产精品视频yy9299一区 | 视频1区2区 | 午夜精品视频在线观看 | 噜噜噜噜噜色 | 亚洲成人免费网站 | 久久国产精品精品国产 | 久久久久久综合 | 日韩一二三区 | 色呦呦日韩 | 欧美中文| 一区二区三区视频 | 国产乱码一区二区三区在线观看 | 亚洲a网| 国产一级特黄aaa大片 | 亚洲国产精品一区二区第一页 | 国产成人免费视频网站高清观看视频 | 91性高湖久久久久久久久_久久99 | 欧美 日韩 国产 一区 | 日本videos18高清hd下 | 人人精久 | 二区中文字幕 | 成人免费在线视频 | 久久精品国产99国产 | 亚洲精品一区二三区不卡 | 91天堂在线观看 | 91精品国产欧美一区二区 | a性片| 在线观看成人 | 一区二区日韩在线观看 | 日韩精品一区二区三区在线观看 | 黄色一级片视频播放 | 奇米影| 国产精品视频入口 | 成年人在线观看 | 在线成人av | 欧洲另类二三四区 | 久久小视频 | 亚洲精品一区二区三区 | 久久一| 黄色小视频在线免费观看 | 精品第一页 | 久久精品欧美一区二区三区不卡 | 欧美视频在线免费 | 精品久久久久久久久久久下田 | 欧美精品一区二区三区在线 | 国产亚洲精品久久久 | 国产一级片免费观看 | 亚洲欧洲精品一区二区 | 美女视频一区二区三区 | 亚洲国产视频一区 | 欧美日韩亚洲国产 | 日韩在线播放视频 | 国产精品久久久久久久一区探花 | 久久久亚洲一区二区三区 | 日韩欧美综合 | 欧美日韩在线看 | 日韩1区3区4区第一页 | 成年免费视频 | 午夜免费一区二区播放 | 精品欧美一区二区三区久久久 | 国产免费一区二区三区最新不卡 | 国产精品一区人伦免视频播放 | 成人午夜电影在线 | 成人午夜在线观看 | 97久久久国产精品 | 日韩一区二区在线播放 | 少妇久久久 | 欧美精品一区二区蜜臀亚洲 | 婷婷色国产偷v国产偷v小说 | 日本成人黄色网址 | 久久久久久久国产精品视频 | 亚洲精品国偷拍自产在线观看 | 亚洲免费在线视频 | 日韩一日 | 在线精品国产一区二区三区 | 国产乱视频网站 | 亚洲欧美v国产一区二区 | 久草天堂| 久久久久亚洲av毛片大全 | 性色av网| 国产精品永久免费视频 | 综合一区 | 午夜婷婷激情 | 黄色一级大片视频 | 日韩成人在线观看 | 性培育学校羞耻椅子调教h 欧美精品网站 | 欧美日韩国产一区 | 国产精品伦理一区 | 日韩电影免费在线观看中文字幕 | 欧美一级免费观看 | 成人高清视频在线 | 91精品国产乱码久久久久久久久 | 精品一区二区三区久久久 | 国产一级毛片在线视频 | 亚洲精品国产setv | 欧美精品在线免费观看 | 日韩欧美一区二区视频 | 看片地址| www.久久| 亚洲精品乱码久久久久久蜜桃91 | 午夜色电影 | 亚洲成人基地 | 国产精品久久久久9999 | 丝袜 亚洲 另类 欧美 综合 | 免费激情小视频 | 国产精品夜夜春夜夜爽久久电影 | 在线观看免费av的网址 | 91精品一区二区三区久久久久久 | 久久久久久亚洲精品 | 热久久国产 | 亚洲美女一区二区三区 | 国产免费一区二区 | 亚洲视频在线观看免费 | 久久久久国产一区二区三区四区 | 国内精品视频在线观看 | 福利视频网站 | 午夜在线电影 | 亚洲精品在线免费播放 | 成av人在线 | 欧美日韩高清一区 | 亚洲成av人片在线观看无码 | av一区二区三区四区 | 国产欧美一区二区精品性色 | 日本一区二区精品 | 国产乱码精品1区2区3区 | 午夜精品久久 | www国产亚洲精品久久网站 | 日韩成人影院在线观看 | 一级毛片视频播放 | 国产电影一区二区三区图片 | 北条麻妃99精品青青久久 | 欧美成人一区二免费视频软件 | 成人看的免费视频 | 性视频网 | 大香伊在人线免97 | 亚洲毛片网站 | 中文字幕亚洲欧美日韩在线不卡 | 中文字幕国产 | 精品亚洲一区二区三区 | 色精品视频 | 精品成人一区 | 中文字幕久久精品 | 午夜精品久久久久99蜜 | 一区二区三区在线 | 欧 | 久久久久无码国产精品一区 | 四季久久免费一区二区三区四区 | 精品视频一区二区三区在线观看 | 国产综合亚洲精品一区二 | 亚洲精品久久久 | 国产精品视频久久久 | 亚洲国产精品成人 | 免费午夜电影 | 视频网站免费观看 | 久久久av亚洲男天堂 | a免费在线 | 午夜影院免费观看视频 | 亚洲欧美电影 | 亚洲毛片在线 | 中文字幕大全 | 成人在线一区二区 | 国产综合视频在线观看 | japan护士性xxxⅹhd | 91丨九色丨国产在线 | 黄色片网站在线免费观看 | 国产日韩欧美一区二区 | 成人精品久久 | 黄色骚片| 亚洲精品久久久久久动漫 | 在线精品自拍 | 在线中文字幕av | 欧美一级免费在线观看 | 黄a在线| 午夜小电影 | 久久久久久网址 | 久久女人网 | 国产主播一区 | 51国产午夜精品免费视频 | 亚洲日韩欧美一区二区在线 | 国产毛片视频 | 色婷婷狠狠 | 色综合天天 | 日韩美女爱爱 | 久久99久久98精品免观看软件 | zzz444成人天堂7777 | 97久久精品 | 国产亚洲欧美在线 | 欧美亚洲高清 | 老司机午夜免费精品视频 | 久久国产一区二区三区 | 欧美日韩不卡在线 | 中文字幕在线第二页 | 国产一级片在线播放 | 久久蜜桃精品一区二区三区综合网 | 色欧美片视频在线观看 | 久久久精品免费观看 | 91中文字幕 | 午夜视频网址 | 凹凸日日摸日日碰夜夜爽孕妇 | 2019中文字幕在线观看 | 日本一级毛片免费看 | 奇米av| 日韩精品在线观看视频 | 午夜精品一区二区三区免费视频 | 久久久精品国产 | 欧美一区在线视频 | 日韩在线观看一区 | 噜噜噜天天躁狠狠躁夜夜精品 | 国产精品夜夜春夜夜爽久久电影 | 欧美日韩国产在线观看 | 一区二区三区视频在线观看 | 污视频免费网站观看 | 精品视频久久 | 免费的av网站 | 91xxx在线观看| 浴室洗澡偷拍一区二区 | 精品影院 | 精品免费国产视频 | 99精品一级欧美片免费播放 | 天堂在线视频 | 99re6在线视频精品免费 | 欧美一区二区另类 | 国产精品婷婷久久久久 | 久久久久久久国产精品 | 精品国内| 亚洲综合第一页 | www.久久伊人 | 亚洲永久免费 | 日韩在线资源 | 另类免费视频 | 国产精品毛片久久久久久久 | 黄色片免费观看网站 | 中文字幕成人免费视频 | 久久精品久久精品国产大片 | 久久成人免费视频 | 精品欧美一区二区在线观看视频 | 亚洲精品久久久久久久久久久 | 国产片在线观看 | 日日干夜夜干 | 久久国产欧美日韩精品 | 成人精品一区二区三区中文字幕 | 国产成人精品免高潮在线观看 | 成人av网站在线观看 | 中文字幕高清 | 精品无码久久久久久国产 | 91久久久精品视频 | 黄色网在线 | 男女av在线| 午夜精品影院 | 国产精品久久久久永久免费观看 | 欧美aaa视频| 欧美激情一区二区三级高清视频 | 久久精品欧美一区二区三区不卡 | 久久噜噜噜精品国产亚洲综合 | 91在线免费视频 | 在线成人www免费观看视频 | 九色porny国模私拍av | 亚洲精品久久久久久一区二区 | 99这里只有精品视频 | 成人免费视频视频在线观看 免费 | 亚洲国产精久久久久久久 | 免费国产wwwwwww网站 | 天天操综 | 精品国产一区二区三区在线观看 | 香蕉三级 | 国产精品视频一二三区 | 国产精品影院在线观看 | 亚洲一区二区三区高清 | 国产美女高潮 | 丁香婷婷在线 | 久久人爽| 国产精品无码专区在线观看 | 伊人狠狠干 | 亚洲欧美一区二区三区在线 | 亚洲人成人一区二区在线观看 | 激情在线观看视频 | 日韩成人免费电影 | 日韩欧美在线看 | 中国大陆高清aⅴ毛片 | 香蕉久久一区二区不卡无毒影院 | 视频一区久久 | 欧美自拍视频 | 久久精品国产99国产 | 在线免费观看一区 | 超碰人人在线 | 中文在线观看www | 国产成人av在线 | 这里有精品在线视频 | 一级毛片视频播放 | 日本在线黄色 | 在线播放三级 | 欧美日韩中文 | 国产精品久久久久久久久小说 | www.久久| av国产精品 | 日韩成人精品在线观看 | www国产亚洲精品久久网站 | 一区二区日韩在线观看 | 国产高清av在线一区二区三区 | 亚洲视频一区二区三区 | 操网| 热久久这里只有精品 | 欧美一区在线视频 | 亚洲成人国产精品 | 国产精品美女视频 | 艹逼逼视频 | 免费的国产视频 | 在线观看欧美日韩 | 日韩精品在线网站 | 国产欧美一区二区精品忘忧草 | 国产精品美女久久久久久免费 | 精品日韩视频 | 免费一区二区 | 亚洲成人毛片 | 亚洲一区视频在线 | 欧美一区2区三区4区公司二百 | 免费在线成人av | 精品av| 久久久久久毛片免费播放 | 日韩视频免费在线播放 | 91久久精品国产91久久 | 亚洲综合第一页 | 免费日韩视频 | www.麻豆| 亚洲三区视频 | 中文字幕亚洲欧美 | 欧美成人在线影院 | 精品久久久成人 | 欧美日韩视频在线第一区 | 欧美精品色网 | 97国产精品| 亚洲欧美精品一区二区 | 成人av免费观看 | 日韩成人在线观看 | 国产精品美女久久久久久久久久久 | 国产精品国色综合久久 | 人人看超碰 | 草草网| 久久久久亚洲精品 | 影视在线观看 | 成人超碰在线 | 性高湖久久久久久久久 | 99精品久久 | 日韩中文字幕在线免费观看 | 色花av | 亚洲欧美第一页 | 天天操天天碰 | 亚洲第一色片 | 日韩精品久久 | 成人在线看片网站 | 国产男女爽爽爽免费视频 | 国产精品高潮呻吟久久av黑人 | 精品自拍视频 | 一级黄色片看看 | 羞羞视频在线播放 | 丝袜 亚洲 另类 欧美 综合 | 爱爱网址 | 一级毛片免费完整视频 | 亚洲人成人一区二区在线观看 | 日韩一区二区在线观看视频 | 久久综合激情 | 日本免费视频在线观看 | 伊人网站在线 | 亚洲精品一区久久久久久 | 久久99精品国产麻豆婷婷洗澡 | 求av网站| 国产人免费人成免费视频 | av电影手机在线看 | 亚洲综合电影 | 丝袜 亚洲 另类 欧美 综合 | 中文字幕av一区二区三区 | 日韩精品免费在线观看 | 免费看一区二区三区 | jizz在线观看 | 91 视频网站| 免费观看一级特黄欧美大片 | 国产精品91av | 中文字幕亚洲综合 | 国产高清视频在线 | 狠狠操一区二区三区 | 亚洲精品久久久一区二区三区 | 激情小视频在线观看 | 久久亚洲一区 | 99视频网站 | 国产一区精品视频 | 久久99视频这里只有精品 | 成年免费a级毛片 | 国产精品久久久久久久美男 | 这里只有精品视频 | 日韩一区二区不卡 | 在线免费黄色 | 中文字幕视频在线观看 | 欧美啊v | 欧美日韩专区 | 福利视频三区 | 一区二区精品 | 欧美日韩a v | 精品亚洲一区二区三区四区五区 | 欧美日韩大陆 | 四虎成人免费电影 | 性视频黄色| 国产成人激情 | 日韩精品一区二区三区在线观看 | 国产精品一任线免费观看 | 国产视频一区二区三区四区 | 91爱爱 | 欧美日韩一区二区三区在线观看 | 久久久久99精品国产片 | 精品久久久久久国产 | 欧美日韩视频 |