精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

攜程后臺低代碼平臺的探究與實踐

開發 新聞
本文將主要介紹團隊采用低代碼平臺的背景、方案調研、落地過程中遇到的問題以及解決方案,同時也大致介紹了該低代碼平臺提供的能力。

作者簡介

ck,攜程后端開發專家,關注技術架構、高并發、性能調優等領域;

Geralt,攜程前端開發專家,關注前端框架及性能優化;

Kaoru,攜程資深前端開發工程師,關注前端性能及開發工具;

概述

PGClowcode平臺是攜程市場內容PGC團隊搭建的主要用于后臺頁面開發的低代碼平臺,第一版于23年3月上線,截至10月平臺已經擁有100+用戶,在平臺上開發了130+個應用和180+個頁面。本文將主要介紹團隊采用低代碼平臺的背景、方案調研、落地過程中遇到的問題以及解決方案,同時也大致介紹了該低代碼平臺提供的能力。

一、研究背景

1.1 為什么需要低代碼平臺

軟件產品通常由客戶端(App、小程序、網頁)和運營后臺組成,其整個生命周期需要不斷地更新迭代,而在實際的迭代開發中經常會出現以下問題:

  • 后臺需求優先級低,排期經常被延期,通常使用配置中心等簡易數據操作平臺替代,不僅對運營人員不友好,而且產生了極大的生產風險
  • 迭代需求涉及的前后端開發工作量不均衡,經常面臨后臺需求較多,但前端資源不足,服務端資源即便有空閑也沒法幫忙支持后臺的需求
  • 不同業務間后臺技術和組件大同小異,各業務反復造輪子,浪費時間和資源
  • 開發人員開發工具類站點時,頁面部分的工作需要付出較大的代價

針對這些問題我們也嘗試了很多的解決方案,如要求開發人員全棧、剝離公共組件等,但結果都不太理想,經過充分的了解和分析,搭建低代碼或零代碼平臺能在很大程度上解決這些問題。

1.2 需要什么樣的低代碼平臺

低代碼平臺分為很多種,我們究竟需要哪種呢?經過將以上問題拆分細化和充分調研后,我們的低代碼平臺應該滿足以下要求:

頁面搭建方面:

  • 界面友好、可視化,可以讓研發和相關人員能通過拖拽的簡單方式快速搭建UI
  • 頁面邏輯僅需寫少量簡單的代碼或無需代碼
  • 支持滿足日常需求的組件庫

部署運維方面:

具有開發、部署、運維等完整的持續交付功能,最好能一鍵或自動化完成

安全合規方面:

  • 支持權限管理機制,保證系統安全
  • 具備完善的發布審批機制,能嚴格保證開發質量和生產安全

兼容性方面:

能嵌入已有后臺頁面,已有后臺盡量少改動的嵌入其開發的頁面

可擴展性方面:

支持用戶自助化組件開發,并且能在平臺上推廣

二、現狀分析

2.1 行業現狀

目前國內外低代碼或零代碼產品不下百種,既有商業平臺,也有開源項目,它們在企業內部用于各種運營后臺、數據面板、辦公系統等內部系統的開發,在B端提供商品管理、廣告投放、商鋪搭建等企業服務,在C端廣泛用于活動頁面、促銷頻道、廣告頻道等類型產品的搭建,不僅為企業節省了大量的開發成本、產生巨大的商業價值,同時也為用戶提供了豐富多彩的軟件產品。

雖然低代碼種類繁多,但是每類低代碼項目往往具有特定的業務屬性,在不同的行業,不同的公司可能需要定制不同的組件,不同的流程,因此市場上很少有能適用于所有場景的平臺,也很少有企業愿意去做通用平臺。下面分析了目前比較流行的產品:

2.2 產品分析

阿里低代碼引擎

LowCodeEngine(阿里低代碼引擎)是國內最知名的低代碼類產品之一,其完整的實現了《低代碼引擎搭建協議規范》和《低代碼引擎物料協議規范》,它通過完整的協議棧約定了各種物料的開發、使用、擴展、流通,并且提煉了企業級低代碼平臺的特性,遵循面向擴展設計的理念,奉行最小內核、最強生態的設計原則而設計的內核引擎。

目前其生態已經相當完備,并且提供了非常詳細的文檔和使用案例,也有大量的demo開源,其使用起來相對比較便捷。但它并沒有提供完整的平臺代碼,使用者需要在其內核的基礎上搭建面向用戶的平臺和服務系統,具有相當的開發成本。

騰訊低代碼平臺

騰訊的低代碼產品包括搭建生成移動端H5頁面的tmagic-editor開源項目和搭建管理端頁面的無極低代碼商業平臺,其中tmagic-editor提供了完整的平臺代碼,使用者可以在開源社區將整個項目pull到本地部署使用,它具備自定義組件、插件、編輯器等擴展能力,內置了豐富的組件,提供了友好的可視化界面,通過拖拽+配置的方式開發頁面。

但其限定于移動端H5頁面的搭建,無法適用pc端頁面開發的需求,大大限制了使用范圍。無極低代碼平臺是商業化的面向企業付費使用的產品,具備管理端強大的開發能力,甚至結合了AI能力,能供面向企業豐富的解決方案,但它目前并沒有開源。

開源低代碼平臺

在github上搜索lowcode關鍵詞可以看到非常多的項目,他們所使用的技術、項目的形態、star數量、活躍的層度、使用場景各不相同,有些提供了完整的可視化界面,有些則需要通過配置文件或調用接口的方式生成頁面或項目,總之需要花費較多的時間對比分析才能找到符合自身需求的項目。

總結

綜上所述,我們最終決定選擇一款開源程度比較高的項目(appsmith)作為藍本,然后經過改造、開發搭建了PGClowcode平臺。?

三、平臺功能介紹

PGClowcode平臺功能主要包含頁面搭建、組件開發平臺兩大部分。

圖片

頁面搭建包含開發、預覽、測試、發布、回滾、備份、恢復等常用功能。在這些功能的基礎上,增加了"可視化拖拽"、"多用戶協同開發"、"導入導出"、"多數據源"、"通知"等功能,形成了一個相當完善的開發體系。搭建的產物可以通過將平臺上的應用或頁面嵌入到已有的后臺,或者反過來將已有的后臺頁面嵌入到平臺,實現組合使用。

組件開發平臺是對頁面搭建能力的擴展,支持通過CLI構建本地項目,自定義開發新的組件以滿足更復雜的業務需求。(此功能正在開發中,將在不久之后開放)

由于篇幅有限,下面將介紹幾個主要功能。

3.1 用戶和權限管理

平臺擁有自己的用戶管理體系,為了與攜程的賬號體系打通,接入了OIDC域賬號認證,使用者無需額外注冊賬號,只需要使用攜程域賬號登錄即可。

用戶的權限做了充分的拆分,平臺的所有功能對每個用戶開放,只是對于用戶私有的數據做了權限控制,權限定義的最小單位是工作空間(workspace),用戶可以擁有多個workspace,每個workspace 定義了管理員(admin)、開發者(developer)、使用者(viewer)、測試者(tester)、審核者(reviewer)五個權限組。其中每個權限組對workspace下面的資源擁有不同的管理權限,這些資源包括數據源、應用、頁面等,admin可以對workspace內的用戶分配不同的權限組,從而對應用的開發、發布等流程上進行管理。具體各權限組的權限分配參考下表:

圖片

 3.2 可視化應用開發

傳統后臺開發與采用低代碼平臺進行后臺開發的流程區別如下圖所示:

圖片

傳統后臺開發過程中需要開發者自身搭建開發環境,引入前端組件庫如Ant Design,相同的功能需要自己提取組件,開發效率低效。

PGClowcode低代碼平臺提供了可視化拖拽的面板,支持頁面復雜布局。組件欄支持40+種通用組件,并可以組合使用。

在頁面繪制方面,通過將其拖入畫板,調整位置布局,簡單幾步完成界面的設計,做到了所見即所得。相同功能可以在畫布中復制粘貼,應用本身也支持導入導出功能,方便項目復制。開發變得靈活高效,避免了一些基本構建所產生的bug,達到了降本增效的效果。

在組件的屬性值設定方面,可以通過可視化的輸入或者通過自定義JS代碼的方式進行復雜的邏輯綁定,并且也支持編寫js代碼完成復雜的交互邏輯。平臺內置了多種js庫,可以將數據綁定到組件上,在開發狀態下能立即看到數據渲染的效果,使得在預覽狀態下可以邊開發邊自測。

圖片

3.3 流程管理

應用從開發態->測試態->發布態的流轉十分便利。平臺設計了不同角色,將測試、審核的流程精簡化,各角色登錄后可以看到應用的不同狀態,應用在開發和審批后自動流轉至下一狀態,只需要簡單幾個流程即可完成。

1)開發人員(開發態):根據需求搭建、開發頁面,然后發布到測試環境;

圖片 

2)測試人員(測試態):在頁面測試,保證其能滿足需求,且不存在質量問題后點擊Publish提交發布申請;

圖片 

3)審核人員(發布態):在“待我審核”列表中找到審核申請。審批通過,應用自動完成發布。

圖片

3.4 備份與還原

開發平臺支持了應用數據的備份和歷史版本數據的還原。在開發狀態下平臺采用了自動保存的設計方案,由于多人同時開發時容易出現相互覆蓋或操作沖突的情況,為了減少這種問題導致的返工成本,我們設計了備份和還原的功能。

和正常普通的應用一樣,用戶可以將每個穩定版本的開發態備份到系統,在之后的操作中需要回到某個穩定版本則直接選中目標版本還原即可。

下圖展示了備份還原的操作界面。

圖片

四、架構和技術

PGClowcode平臺采用了前后端分離架構。前端使用了react技術棧,并且集成了攜程的多種公共框架和組件,依托于攜程的CI/CD平臺,實現了持續開發和交付的能力。服務端采用spring webflux框架,集成了cat、clog(攜程日志系統)、mongo、credis(攜程redis client)、qconfig(攜程配置中心中間件,下文簡稱QC)、qmq(攜程MQ中間件)等技術框架,完全融入了攜程的服務技術棧,可以通過gitlab自動化編譯打包,在captain(攜程發布平臺)上發布。

4.1 架構

圖片

如上圖所示,PGClowcode平臺的整體架構分為應用層、基礎設施、服務層、數據層。

應用層是終端的兩套平臺系統,主要包括面向用戶的低代碼開發平臺和面向開發人員的組件開發平臺。

基礎設施主要包含前端的基礎框架、數據流控制以及抽象出來的前端可視的組件、頁面和編輯器等概念。基礎框架主要依托于React App和canvas技術通過axios庫和服務端進行數據交互,通過Redux及相關插件來控制整個平臺的數據流,最終展示成用戶可見的組件、頁面、編輯器等UI模塊。

服務層主要由web層、service層和數據訪問層組成,主要提供權限驗證、流程管控、插件管理、消息通知、數據訪問等服務。服務采用了微服務架構的設計,按照不同的領域和功能拆分成領域服務、通知服務和插件服務。

領域服務又根據不同的model細分為不同的模塊,各自完成獨立單一的功能;通知服務主要用于email、trippal、sms等消息通知;插件服務主要提供插件的加載、初始化、調用、卸載等相關功能的服務。數據訪問在核心服務的下層,實現了針對多種數據源的訪問和數據處理、校驗的功能。 

數據層主要用于存儲元數據、應用數據、插件數據等,應用的備份數據存儲于QC,并且通過QC實現跨環境發布。

下面兩節主要對平臺“組件的可視化拖拽實現”和“應用的開發-部署實現”兩項比較核心的技術詳細闡述。

4.2 組件的可視化拖拽實現

圖片

可視化拖拽組件是低代碼平臺的基本功能,在本平臺中,用戶可以在左側組件庫里選擇任意組件拖拽到中間的編輯區域,并更改其大小。

在實現上述的拖拽功能時,我們會面臨幾個問題:

1)拖拽組件的過程中,組件的位置會實時變更,大量嵌套在一起的dom元素同時變更位置,會頻繁觸發瀏覽器的重繪制,導致性能的消耗。

2)人為的拖拽排布,很難保證組件之間的對齊和排版,頁面最終效果難以達到代碼實現頁面的規整程度。

對于上述的問題1,平臺的解決方案是依托canvas技術,在組件變更位置或者大小時,隱藏實際渲染在頁面上的組件,并在編輯區域最上層渲染一層canvas,在原組件位置畫出一個同等大小的色塊來代替原組件,并用以示意用戶,利用canvas畫布的特性來處理組件位置及大小的變更,在用戶結束拖拽動作后,根據色塊在canvas中的最終位置及大小,重繪制一次組件,并隱藏canvas,展示出組件的最終效果。

在上述描述中可以看到,利用canvas可以極大程度的削減瀏覽器重繪制的次數,達到減少性能消耗的目的;選擇色塊來作為繪制對象而非原組件,既降低了技術實現的難度,又進一步降低了canvas繪制圖形的性能消耗。

對于問題2,平臺的解決方案是陣點系統,當用戶拖拽組件到編輯區域觸發渲染canvas的同時,頁面上會繪制一層陣點并均勻的平鋪在canvas上,當用戶在canvas上拖拽色塊變更其位置或者大小時,在色塊的周邊會繪制出同等大小的虛線邊框,邊框會根據色塊當前的位置及大小動態的定位到合適的臨近陣點上。陣點系統中,橫向及縱向兩個相鄰陣點的間隔即為組件長寬的最小單位,組件的四角位置只能定位在陣點上。由此可見,在拖拽過程中,組件的位置及大小都在一定的限制之內,這可以保證最終繪制出來的頁面的規整性。

以下為一次完整的組件拖拽流程示意圖:

圖片 

1)頁面無拖拽操作,主編輯區域僅展示組件的靜態狀態,此時為展示態。

2)當用戶開始拖拽組件以期改變其位置及大小的動態狀態,為操作態。操作態又可以細化為拖拽開始、拖拽中、拖拽結束,三個狀態。

當用戶開始拖拽組件時,頁面會從展示態變更為操作態。拖拽開始時,編輯區域內繪制canvas并鋪設陣點,原組件變為不可見,在canvas內原組件的相同位置繪制同等大小的色塊以及虛線邊框;在拖拽過程中,色塊會隨著鼠標移動變更位置或者大小,其外部虛線邊框也會隨色塊移動或變更大小,并實時定位在色塊當前位置的最相鄰陣點上;拖拽結束時,根據當前邊框的最終大小及位置,重新繪制原組件,并隱藏canvas、陣點系統、色塊以及虛線邊框;頁面由操作態變更為展示態,展示出組件的最新狀態。

4.3 應用的開發-部署實現

應用的開發和部署的技術實現主要分為應用的數據結構、數據流轉和多種角色協同三個部分,最后針對應用的數據備份與還原也做了簡單的介紹。

4.3.1 數據結構

當前大多數主流的低代碼平臺最終的產物可能是代碼,但PGClowcode平臺最終的產物是數據,包括應用信息、頁面信息、組件、組件之間的關系、action、數據源等都是以數據的形式存儲在db上,由于頁面的布局、組件嵌套、函數的綁定等各種實體間關系非常復雜,使用傳統的關系型數據庫無法保證數據結構穩定,因此采用了mongodb作為數據庫。應用相關的collection主要包括了plugin、workspace、datasource、application、page、action、actioncollection,它們通過下圖的關系構成了整個應用體系。

圖片

plugin主要用于定義平臺支持插件的元數據信息,包括類型、插件包路徑、參數、狀態等屬性。

workspace是應用開發的工作空間,它定義了空間內的用戶組成、用戶權限、數據源以及支持的插件集合。

application定義了應用的名稱、主題、icon、狀態等基本信息,另外為了查詢便捷,也冗余了部分頁面的信息。

page定義了頁面的名稱、布局、組件、組件的關系、組件與函數的綁定關系等。

datasource定義了外部數據訪問的基礎信息,如restapi、es、mongodb等外部數據訪問的必要屬性,為了避免重復配置,它的作用范圍是workspace級別。

action定義了外部數據訪問的具體配置數據,它必須依托于datasource,如restapi接口調用,datasource配置了服務的域名和是否需要實時鑒權,而action則配置路徑、參數、運行方式,與datasouce不同的是它的作用范圍是頁面。

actionCollection是action或js函數的集合。

4.3.2 數據流轉

應用數據主要是在不同的存儲介質和不同的環境間流轉,平臺目前設計了三套環境FAT、UAT、PRO,平臺通過QC的跨環境機制實現數據流轉。

圖片

如上圖所示,開發者在FAT上開發應用,應用數據以草稿態存儲于DB,開發完成后將草稿態數據導出到QC的FAT環境,服務監聽到QC的數據變更將草稿態copy到發布態,測試則可以在測試頁面上看到開發提交的應用,測試完成后提交UAT發布申請,服務將發布態的數據導出到QC的UAT環境,此時審核者將收到待審核通知。

進入平臺將待發布申請審核通過后,UAT環境的服務監聽到QC數據變更將數據導入到DB,并且將應用數據狀態置為發布態,然后可以在UAT的測試頁面看到發布態的應用,當UAT測試完成后申請發布到生產(PRO),UAT服務將發布態應用數據導出到QC PRO環境,當審核者通過申請后則QC PRO的應用文件被發布,PRO服務監聽到數據變更就將應用數據導入到DB,并置為發布態,此時應用的開發-部署流程結束,用戶可以在生產環境的用戶平臺正常使用了。

4.3.3 多角色協同

對于應用的開發、測試、交付平臺設計了多個角色,在整個需求開發的過程中每個角色能各司其責,保證應用能持續、穩定、高效迭代交付,如下圖所示。

圖片

平臺通過定義多個權限組來區分每個角色,當workspace被創建時這些權限組就會被創建出來,每個權限組定義了各自的權限,在每個受權限管理的資源中都有policies字段,它存儲了能被操作的類型和權限組id的集合,當用戶查詢和操作時都會經過權限校驗。

圖片 

有了角色的定義,應用開發人員的協同就變得簡單多了,如當應用發布測試時可以自動通知測試人員介入,提交發布生產申請時可以自動通知審核人員參與審核。

4.3.4 備份與還原

為了方便開發過程中多人同時開發,平臺設計了備份還原功能,當用戶點擊備份時,服務將當前草稿態數據導出到QC,點擊還原則將QC的數據導入到服務,覆蓋當前DB中草稿態數據,得益于QC的版本管理功能,每次備份的數據都將存儲起來,因此用戶可以還原到歷史的任意版本。

圖片

如上圖所示,T1時刻新增一個備份v1,T2時刻QC中存在v1版本的備份數據,如果T2時刻再增加一個備份v2,到T3時刻QC存在v1和v2兩個版本,如果在T3時刻將DB中的版本還原成v1,則DB中的數據會被還原成v1,與此同時會上傳一個v3版本到QC,實際上v3和v1數據是一樣的,相當于將當前數據的基準切換到了最新版本,之后的操作都是在這個版本的基礎上做的,如果再需要還原到這個基準就可以快速完成。

五、規劃與展望

目前PGC低代碼平臺已經具備了非常完整的功能,基本上完成了預期的目標,也產生較大的價值,但我們對于它的期望絕非只限于此,并且組建了穩定的支持團隊,制定了明確規劃,在之后的迭代開發中會不斷地完善已有的功能和流程,而且會根據實際的需求和業內平臺的調研繼續增加更強大、便捷的功能。

5.1 搭建組件擴展平臺

平臺原有的組件是比較基本的組件庫,未來會難以滿足日漸復雜的業務需求,因此自定義組件的需求就會逐漸凸顯出來,本平臺基于Appsmith框架是支持自定義組件的,但是原有的自定義功能有如下幾個問題:

1)原有的自定義組件功能,需要依托于完整的平臺項目,在其widget文件夾下開發新組件,項目代碼體量大,啟動慢,且以開發組件為目的頻繁更改提交平臺項目并不利于平臺項目的發布及管理。

2)原有的自定義組件功能并不適合多部門自定義組件的場景,沒有相關的權限管理系統,所有自定義組件都會展示在頁面上,隨著時間的推移會造成組件庫的臃腫以及增加編輯頁面時查找使用組件的費力度。

為了解決以上問題,我們會從主項目中抽離出相關代碼,搭建一套獨立的組件開發項目,以達到和平臺主項目分離、代碼純凈、項目快速啟動的目的。同時也會構建一套自定義組件的權限管理系統以便更好的管理各部門開發的自定義組件。

5.2 建立模板庫

Ctrl+C和Ctrl+V可能是開發人員使用頻率最高的按鍵組合,致使一些鍵盤不是“面目全非”就是“半身不遂”,試想一下,如果我們拿出來一鍵生成部署頁面的功能,是否能讓“久經磨難”的鍵盤依然“歷久彌新”呢?沒錯,這是我們接下來的目標。

低代碼平臺的模板是指根據長期積累的經驗,總結一些具有共性的通用方案,并且提煉成所有用戶都能直接使用的頁面或應用,收錄到模板庫中,當平臺上的其他用戶需要使用類似應用或頁面時,只需要找到合適的模板,一鍵即可生成頁面或應用,甚至能拿來即可用,無需做任何修改。后期可以允許建立團隊自己的模板庫,各成員可以搭建自己的模板專門供團隊使用。

責任編輯:張燕妮 來源: 攜程技術
相關推薦

2024-03-22 15:09:32

2024-04-18 09:41:53

2022-12-22 08:51:40

vivo代碼

2016-09-04 15:14:09

攜程實時數據數據平臺

2024-07-05 15:05:00

2023-08-18 10:49:14

開發攜程

2022-03-30 18:39:51

TiDBHTAPCDP

2020-12-04 14:32:33

AndroidJetpackKotlin

2024-01-12 09:31:08

Java代碼

2022-07-15 12:58:02

鴻蒙攜程華為

2022-05-13 09:27:55

Widget機票業務App

2014-12-25 17:51:07

2023-07-07 12:19:43

攜程技術

2025-06-24 09:44:41

2023-07-07 12:26:39

攜程開發

2022-08-20 07:46:03

Dynamo攜程數據庫

2024-04-26 09:38:36

2022-08-12 08:34:32

攜程數據庫上云

2023-02-08 16:34:05

數據庫工具

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合
點贊
收藏

51CTO技術棧公眾號

成人国产精品一区二区| 亚洲毛片在线观看.| 一道本在线观看视频| www.国产.com| 国产日韩欧美| 中文字幕日韩av综合精品| 99九九99九九九99九他书对| 黄色小说在线播放| 久久九九国产精品| 国产日韩av高清| 青青草原在线免费观看视频| 女同一区二区三区| 欧美精品三级日韩久久| 国产精品成人久久电影| 久久伊伊香蕉| 国产成人av一区二区三区在线| 97视频国产在线| 日本一道本视频| 欧洲精品99毛片免费高清观看 | 一区二区三区.www| 欧美日韩国产综合视频在线| 国产裸体无遮挡| 亚洲精品麻豆| 久久香蕉国产线看观看av| 看全色黄大色黄女片18| 久久福利在线| 亚洲视频资源在线| 欧美二区在线看| 精品人妻一区二区三区三区四区 | 日本在线播放一二三区| 中文字幕一区二区三区av| 韩国成人av| 国产欧美综合视频| 99热精品在线| 欧美理论电影在线播放| 小早川怜子久久精品中文字幕| 国产人与zoxxxx另类91| 欧美性色视频在线| 男人天堂成人网| 久青青在线观看视频国产| 成人黄色在线网站| 亚洲a级在线播放观看| 国产字幕在线观看| 亚洲免费影视| 国内伊人久久久久久网站视频 | 亚洲激情在线激情| 亚洲成人在线视频网站| 国产高中女学生第一次| 美女脱光内衣内裤视频久久影院| 欧美一级bbbbb性bbbb喷潮片| 国产成人av免费在线观看| 国内精品伊人久久久| 日韩成人激情在线| 国产调教打屁股xxxx网站| 四虎国产精品成人免费影视| 欧美日韩国产小视频| 国产一级特黄a大片免费| 亚洲欧美在线成人| 欧美美女喷水视频| 日本人妻一区二区三区| 国产精品超碰| 亚洲欧美日韩图片| 手机看片日韩av| 欧美成人直播| 九九精品视频在线| 亚洲天堂日韩av| 久久精品女人| 国产精品中文在线| 99在线精品视频免费观看20| 成人久久18免费网站麻豆| 狠狠色噜噜狠狠色综合久| 欧美日韩伦理片| 国产精品美女久久久久久久久| 中文字幕中文字幕在线中一区高清| 黄色片网站在线观看| 亚洲一区二区欧美| 午夜精品久久久内射近拍高清| 成人免费在线观看视频| 91精品国产入口在线| 制服丝袜第一页在线观看| 九色精品91| 久久五月天综合| 天天爽夜夜爽夜夜爽精品| 男人的天堂亚洲一区| 91九色极品视频| 天堂中文在线资| 中文字幕色av一区二区三区| 福利视频一二区| 97成人超碰| 亚洲高清色综合| gv天堂gv无码男同在线观看| 欧美xxx在线观看| 热re91久久精品国99热蜜臀| 亚洲中文字幕在线一区| 成人免费视频网站在线观看| 亚洲美女网站18| 国产精品电影| 欧美性猛交一区二区三区精品 | 精品一区二区三区亚洲| 日韩经典第一页| 中文字幕在线观看成人| 久久婷婷亚洲| 国产成人精品日本亚洲11 | 欧美激情精品在线| wwwwww在线观看| 成人av电影免费在线播放| 夜夜爽99久久国产综合精品女不卡 | 欧美黄色一级片视频| 日本一区影院| 日韩在线免费视频| 美女又爽又黄免费视频| 国产精品12区| 一级日韩一区在线观看| 成人国产二区| 亚洲第一网站男人都懂| 极品久久久久久| 免费在线视频一区| 欧美激情专区| 精品丝袜在线| 日韩三级高清在线| www.4hu95.com四虎| 亚洲欧美日本视频在线观看| 国产98在线|日韩| 国产日产一区二区三区| 欧美日韩一卡二卡三卡| 香蕉视频久久久| 麻豆成人在线| 欧美日韩无遮挡| 男人的天堂免费在线视频| 日韩美女视频一区二区在线观看| 大地资源高清在线视频观看| 麻豆成人免费电影| 色女人综合av| www.精品国产| 中文字幕av日韩| 黄色污污视频软件| 久久久精品国产免大香伊 | 久久99久久99| 综合视频在线观看| 一区在线不卡| 欧美精品日韩三级| 性做久久久久久久| 亚洲电影激情视频网站| www.四虎在线| 亚洲每日更新| 韩日午夜在线资源一区二区| а√天堂资源官网在线资源| 亚洲精品大尺度| 亚洲精品1区2区3区| 91亚洲精品一区二区乱码| 国产极品尤物在线| 色天下一区二区三区| 欧美亚洲一级片| 少妇荡乳情欲办公室456视频| 亚洲成av人片一区二区| 久久人人妻人人人人妻性色av| 日韩一级精品| 日本精品一区二区| 国产美女久久| 久久成人精品一区二区三区| 成人av手机在线| 性做久久久久久久免费看| 亚洲国产精品成人综合久久久| 免费亚洲婷婷| 亚洲国产精品毛片| 精品国产亚洲一区二区三区大结局| 久久香蕉国产线看观看网| 丰满肥臀噗嗤啊x99av| 亚洲高清一区二区三区| 中文字幕一区二区三区人妻不卡| 日韩国产在线观看| 中文字幕中文字幕在线中心一区| 欧美日韩国产一区二区在线观看| 久久噜噜噜精品国产亚洲综合 | 最近中文字幕2019免费| 亚洲成a人片在线| 欧美性高跟鞋xxxxhd| 91社区视频在线观看| 丁香婷婷综合激情五月色| 男人天堂1024| 日韩欧美中字| 国产在线播放一区二区| 超薄肉色丝袜脚交一区二区| 操91在线视频| 青青视频在线观| 欧美一区二区三区四区高清| 日本在线播放视频| 自拍偷拍国产亚洲| 制服丝袜第二页| 激情av综合网| 国产二区视频在线播放| 婷婷伊人综合| 日本不卡久久| 波多野结衣欧美| 国产免费亚洲高清| 国产直播在线| 欧美成人中文字幕| 成人高清免费在线播放| 亚洲国产精彩中文乱码av在线播放| 亚洲免费视频二区| 亚洲不卡一区二区三区| 免费看特级毛片| 国产日韩欧美综合在线| 波多野结衣一二三区| 国产一区二区在线观看免费| 一本色道无码道dvd在线观看| 国内视频精品| 自拍偷拍一区二区三区| 红桃成人av在线播放| 狠狠色综合色区| 中文字幕视频精品一区二区三区| 国产精品久久久久免费a∨| 日本蜜桃在线观看视频| 欧美黑人国产人伦爽爽爽| 免费黄色网址在线观看| 亚洲欧美中文日韩v在线观看| 亚洲第一天堂在线观看| 欧美酷刑日本凌虐凌虐| 欧美另类高清videos的特点| 欧美日韩黄色大片| 国产精品7777777| 亚洲电影第三页| 久久久久久久久久久久久久免费看 | 国产一区二区精品免费| 日韩成人在线观看视频| 成人信息集中地欧美| 成人精品国产亚洲| 国产精品久久久久久久一区探花| 亚洲天堂一区二区| 日本欧美在线视频| 婷婷丁香久久五月婷婷| 1024av视频| 在线精品福利| 国产资源在线免费观看| 欧美~级网站不卡| 超碰成人在线免费观看| 日韩国产一区| 在线天堂一区av电影| 久久综合国产| 亚洲欧美电影在线观看| 日韩精品诱惑一区?区三区| 天堂一区二区三区| 91日韩免费| 黄色免费高清视频| 亚洲成av人片乱码色午夜| 自拍视频一区二区三区| 综合久久综合| 成年人视频网站免费| 亚洲手机视频| 日本一道本久久| 久久精品午夜| 黄色在线视频网| 激情综合一区二区三区| 九九热视频免费| 成人一级片网址| 国产成人av无码精品| 久久婷婷一区二区三区| 一区二区三区伦理片| 中文字幕中文字幕在线一区 | 欧美性受xxxx黒人xyx性爽| 国产一级精品在线| 欧美日韩人妻精品一区在线| 91在线视频网址| 我不卡一区二区| 国产视频一区二区在线| h色网站在线观看| 亚洲国产日韩a在线播放| aaa人片在线| 欧美日韩在线播放三区四区| 99精品在线看| 日韩精品在线私人| 日韩免费啪啪| 久久久亚洲影院你懂的| 成人做爰视频www| 51国偷自产一区二区三区| 日韩高清影视在线观看| 亚洲精品电影在线一区| 欧美特黄一级| 女人另类性混交zo| 国产精品一级片| 亚洲欧美视频在线播放| 亚洲欧洲三级电影| 精品成人av一区二区在线播放| 欧美日韩中文国产| 色欲久久久天天天综合网| 在线精品91av| 国产又色又爽又黄刺激在线视频| 日韩免费观看在线观看| 亚洲精品在线播放| 日韩精品第一页| 国内自拍一区| 15—17女人毛片| 99riav一区二区三区| 欧美特级一级片| 色偷偷一区二区三区| 国产成年妇视频| 色老头一区二区三区| 两个人看的在线视频www| 成人黄色网免费| 久久av影视| 无码粉嫩虎白一线天在线观看 | 久久一二三四| 日本成人在线免费| 中文字幕精品在线不卡| 日韩特黄一级片| 日韩女同互慰一区二区| 在线看av的网址| 日本久久亚洲电影| 激情视频极品美女日韩| 午夜在线视频免费观看| 日韩成人一级大片| 亚洲国产果冻传媒av在线观看| 亚洲欧美日韩在线不卡| 中文字幕人妻精品一区| 日韩精品高清在线| 91在线三级| 操一操视频一区| 天天综合国产| 污视频网址在线观看| 国产欧美日韩激情| 免费看污视频的网站| 亚洲精品综合久久中文字幕| 国产啊啊啊视频在线观看| 97视频中文字幕| 欧美激情精品久久久六区热门| 午夜免费福利视频在线观看| 国产欧美一区二区精品性色| 国产91精品看黄网站在线观看| 亚洲激情视频网站| 欧美6一10sex性hd| 91传媒视频在线观看| 欧美aa国产视频| 中文字幕第10页| 亚洲影院久久精品| 亚洲av无码专区在线| 欧美www在线| 永久免费精品视频| 日本阿v视频在线观看| 国产盗摄视频一区二区三区| 成人免费毛片东京热| 日韩精品专区在线影院重磅| 神马午夜伦理不卡 | 国产欧美一区二区精品久久久| 欧美老熟妇喷水| 91网站黄www| 少妇高潮av久久久久久| 亚洲色图35p| 国产精品久久久久久吹潮| 亚洲精品视频一二三| 久久er精品视频| 国产少妇在线观看| 精品剧情在线观看| 色偷偷色偷偷色偷偷在线视频| 欧美日韩精品免费观看视一区二区| 日日噜噜夜夜狠狠视频欧美人| 天天躁日日躁aaaa视频| 欧美日韩成人一区二区| a免费在线观看| 国产在线播放一区二区| 久久三级视频| 日韩视频在线观看免费视频| 制服丝袜亚洲色图| heyzo在线播放| 欧美一区亚洲二区| 韩日av一区二区| 国产乡下妇女做爰毛片| 亚洲女人天堂av| 国产国产一区| 无码人妻精品一区二区蜜桃网站| av在线不卡免费看| 中文字幕av片| 久久久久国色av免费观看性色| 欧美成a人免费观看久久| 欧美三级午夜理伦三级| 亚洲欧美日韩电影| 香蕉久久国产av一区二区| 国产精品亚洲美女av网站| 欧美日韩岛国| 我不卡一区二区| 精品美女在线播放| 成人亚洲综合| 久久久久久久久久久99| 中文av一区特黄| 四虎在线视频免费观看| 国产精品丝袜视频| 国产一区二区精品| 天天操天天操天天操天天操天天操| 亚洲国产精品电影在线观看| 国产福利一区二区三区在线播放| 成人午夜视频在线观看免费| 中文字幕av一区二区三区高| www.激情五月| 国产精品欧美一区二区三区奶水 | 青青在线免费观看视频| 亚洲精品乱码久久久久久 | 亚洲欧洲成人自拍| 日韩精品123| 国产精品9999久久久久仙踪林| 日本女优在线视频一区二区| 国产在线观看你懂的|