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

使用Laravel和Angular創建一個單頁的評論應用

開發 前端
目前,Laravel和Angular均已經成為了Web發展世界里非常著名的工具。Laravel以給PHP社區引入的偉大內容著稱,Angular以其驚人的前端工具及簡單著稱。組合這兩大框架似乎是合乎邏輯的下一步。

完整代碼:https://github.com/scotch-io/laravel-angular-comment-app

目前,Laravel和Angular均已經成為了Web發展世界里非常著名的工具。Laravel以給PHP社區引入的偉大內容著稱,Angular以其驚人的前端工具及簡單著稱。組合這兩大框架似乎是合乎邏輯的下一步。

在我們的使用環境下,我們將使用Laravel作為后端的RESTful APIAngular作為前端,以創建一個簡單的單頁的評論應用。

下面是一個簡單的例子,展示了如何開始使用這兩種技術,所以不用害怕什么額外的數據庫性的東西、如何處理子評論什么的。

我們將創建什么

這將是一個簡單的單頁評論應用程序:

  • RESTful Laravel API處理獲取、創建和刪除評論;

  • Angular前端負責顯示我們創建的表單和評論;

  • 能夠新建評論并把它添加到我們的W/O頁面刷新列表;

  • 能夠刪除評論并把它從W/O頁面刷新列表移除。

總體上,這些都是非常簡單的概念。我們重點是關注Laravel與Angular如何一起協作的錯綜復雜關系。

laravel-angular-single-page-application 

Laravel后端

設置Laravel

繼續設置好你的Laravel,我們將做一些基礎工作使我們的后端實現評論的增刪改查:

  • 創建一個數據庫遷移

  • 將樣本評論植入數據庫

  • 為我們的API創建路由表

  • 創建一個“全部獲取”路由表讓Angular出來路由

  • 為評論創建一個資源控制器

準備數據庫遷移

我們要一個簡單的、存儲評論的結構體,只需要包括內容和作者。讓我們創建Laravel遷移來創建評論。

我們來運行artisan命令創建評論遷移,這樣就可以在我們的數據庫里建立評論表:

    php artisan migrate:make create_comments_table --create=comments

我們將使用Laravel模式構建器創建所需的“內容”和“作者”域。Laravel也會創建id和timestamps列,這樣我們可以知道這條評論是什么時候添加的。以下是評論表的代碼:

  1. // app/database/migrations/####_##_##_######_create_comments_table.php  
  2. ...  
  3.  
  4.     /**  
  5.      * Run the migrations.  
  6.      *  
  7.      * @return void  
  8.      */ 
  9.     public function up()  
  10.     {  
  11.         Schema::create('comments', function(Blueprint $table)  
  12.         {  
  13.             $table->increments('id');  
  14.  
  15.             $table->string('text');  
  16.             $table->string('author');  
  17.  
  18.             $table->timestamps();  
  19.         });  
  20.     }  
  21. ...  

確定你在“app/config/database.php”文件中用正確的憑證調整了數據庫設置。現在我們運行遷移,這樣就能用所需的列創建這張表:

   php artisan migrate

laravel-angular-migrate 

評論模型

我們將用Laravel Eloquent模型與數據庫進行交互。這很容易做到,讓我們來創建一個模型:“app/models/Comment.php”:

  1. <?php  
  2.  
  3. // app/models/Comment.php  
  4.  
  5. class Comment extends Eloquent {  
  6.         // let eloquent know that these attributes will be available for mass assignment  
  7.     protected $fillable = array('author''text');   
  8. }  

現在有了表和模型,讓我們通過Laravel Seeding向表中添加一個樣本數據。

播種數據庫

我們需要一些評論來測試幾件事。讓我們創建一個種子文件并插入三個樣本評論到數據庫。

創建一個文件:“app/database/seeds/CommentTableSeeder.php”,并添加以下代碼:

  1. <?php  
  2. // app/database/seeds/CommentTableSeeder.php  
  3.  
  4. class CommentTableSeeder extends Seeder   
  5. {  
  6.  
  7.     public function run()  
  8.     {  
  9.         DB::table('comments')->delete();  
  10.  
  11.         Comment::create(array(  
  12.             'author' => 'Chris Sevilleja',  
  13.             'text' => 'Look I am a test comment.' 
  14.         ));  
  15.  
  16.         Comment::create(array(  
  17.             'author' => 'Nick Cerminara',  
  18.             'text' => 'This is going to be super crazy.' 
  19.         ));  
  20.  
  21.         Comment::create(array(  
  22.             'author' => 'Holly Lloyd',  
  23.             'text' => 'I am a master of Laravel and Angular.' 
  24.         ));  
  25.     }  
  26.  
  27. }  

要調用這個播種機文件,我們要修改“app/database/seeds/DatabaseSeeder.php”并添加以下代碼:

  1. // app/database/seeds/DatabaseSeeder.php  
  2.  
  3.  
  4. /**  
  5.  * Run the database seeds.  
  6.  *  
  7.  * @return void  
  8.  */ 
  9. public function run()  
  10. {  
  11.     Eloquent::unguard();  
  12.  
  13.     $this->call('CommentTableSeeder');  
  14.     $this->command->info('Comment table seeded.');  
  15. }  

現在我們通過artisan命令來運行我們的播種機。

  php artisan db:seed

laravel-angular-database-seed

現在我們擁有一個包含評論表的數據庫、一個Eloquent模型和一些數據庫樣本。一天的工作還不算糟。。。但我們還遠沒有結束。

#p#

評論資源控制器(app/controllers/CommentController.php)

我們將使用Laravel資源控制器處理評論的API函數。因為使用Angular顯示一個資源以及創建和更新表單,在沒有創建和編輯函數的情況下,我們將通過artisan命令創建一個資源控制器。

讓我們用artisan創建資源控制器。

    php artisan controller:make CommentController --only=index,store,destroy

對于示例應用,我們只會在資源控制器中使用這三個函數。為了擴展,你要包含所有的諸如更新、顯示等函數,來實現一個更成熟的應用。

laravel-angular-create-controller

我們已經創建了控制器,就不需要創建和編輯函數啦,因為Angular,而不是Laravel會處理顯示表單的工作。Laravel只負責把數據返回給前端。只為了想讓事情簡單化,我們也從實例應用提出了更新函數。我們將處理創建、顯示和刪除評論。

要回傳數據,我們想以JSON形式返回數據。我們來瀏覽一下新建的控制器并添加相應的函數。

  1. <?php  
  2. // app/controllers/CommentController.php  
  3.  
  4. class CommentController extends \BaseController {  
  5.  
  6.     /**  
  7.      * Send back all comments as JSON  
  8.      *  
  9.      * @return Response  
  10.      */ 
  11.     public function index()  
  12.     {  
  13.         return Response::json(Comment::get());  
  14.     }  
  15.  
  16.     /**  
  17.      * Store a newly created resource in storage.  
  18.      *  
  19.      * @return Response  
  20.      */ 
  21.     public function store()  
  22.     {  
  23.         Comment::create(array(  
  24.             'author' => Input::get('author'),  
  25.             'text' => Input::get('text')  
  26.         ));  
  27.  
  28.         return Response::json(array('success' => true));  
  29.     }  
  30.  
  31.     /**  
  32.      * Remove the specified resource from storage.  
  33.      *  
  34.      * @param  int  $id  
  35.      * @return Response  
  36.      */ 
  37.     public function destroy($id)  
  38.     {  
  39.         Comment::destroy($id);  
  40.  
  41.         return Response::json(array('success' => true));  
  42.     }  
  43.  
  44. }  

你可以看到用Laravel和Eloquent處理增刪改查多么容易。處理我們所需的函數簡直難以置信的簡單。

隨著控制器的準備完成,我們后端最后要做的一件事就是路由。

補充閱讀:Simple Laravel CRUD with Resource Controllers

我們的路由表(app/routes.php)

隨著數據庫的準備就緒,我們來處理Laravel應用的路由表吧。既然它有自己的路由,我們將會用到路由表發送數據給前端。我們也要給后臺API提供路由表,從而可以讓人訪問我們的評論數據。

讓我們創建Angular指向路由表。我們需要一個主頁路由表和一個發送用戶給Angular的“全部獲取”路由表。這保證了用戶無論怎樣都能訪問我們的網站,它們會被路由到Angular前端。

我們將以...(請擊鼓)...api作為API路由表前綴。通過這種方式,如果有人想獲取所有的評論,他們將使用URL:http://example.com/api/comments 。這只是有意義的前進和一些基礎API創建的好策略。

  1. <?php  
  2. // app/routes.php  
  3.  
  4. // =============================================  
  5. // HOME PAGE ===================================  
  6. // =============================================  
  7. Route::get('/'function()  
  8. {  
  9.     // we dont need to use Laravel Blade  
  10.     // we will return a PHP file that will hold all of our Angular content  
  11.     // see the "Where to Place Angular Files" below to see ideas on how to structure your app  
  12.     return View::make('index'); // will return app/views/index.php  
  13. });  
  14.  
  15. // =============================================  
  16. // API ROUTES ==================================  
  17. // =============================================  
  18. Route::group(array('prefix' => 'api'), function() {  
  19.  
  20.     // since we will be using this just for CRUD, we won't need create and edit  
  21.     // Angular will handle both of those forms  
  22.     // this ensures that a user can't access api/create or api/edit when there's nothing there  
  23.     Route::resource('comments''CommentController',   
  24.         array('only' => array('index''store''destroy')));  
  25. });  
  26.  
  27. // =============================================  
  28. // CATCH ALL ROUTE =============================  
  29. // =============================================  
  30. // all routes that are not home or api will be redirected to the frontend  
  31. // this allows angular to route them  
  32. App::missing(function($exception)  
  33. {  
  34.     return View::make('index');  
  35. });  

我們現在有路由表來處理Laravel要做的三件主要事情。

處理“全部獲取”路由表:在Laravel里,你可以用幾種方式實現這個。通常,用以上代碼并得到整個應用的“全部獲取”不太理想。另一種選擇是,你可以使用Laravel控制器的丟失方法來獲取路由表。

測試所有的路由表 讓我們確保所需的路由表都有了。我們會用到artisan查看所有的路由表:

   php artisan routes

這個命令讓我們看到所有的路由表以及一個自上而下的應用視圖。

laravel-angular-artisan-routes

從上圖我們能看到HTTP動詞和獲取所有評論,獲取、創建和銷毀一條評論的路由表。在API路由表的頂部,可以看到一個用戶如何通過主頁路由表路由到Angular的。

后臺完成

終于!我們Laravel API的后臺也完成了。我們已經做了很多,但還有很多工作要做。我們已經建立并播種了數據庫,創建了模型和控制器,也建好了路由表。我們來繼續完成Angular前端的工作。

將Angular文件放在哪

我看到這個問題很多次被問到了。我到底應該把Angular文件放在哪呢,還有如何使Laravel和Angular一起工作。這有一篇文章講怎樣使Laravel Blade和Angular一起工作。本文假設我們從未使用過Blade。

讓Angular來處理前端,我們需要Laravel將用戶導向到index.php文件。我們可以把它放在幾個不同的地方。默認情況下,當你使用:

  1. // app/routes.php  
  2. Route::get('/'function() {  
  3.  
  4.     return View::make('index');      
  5.  
  6. });  

這將返回app/views/index.php。Laravel默認情況下將在app/views文件夾查找。

一些人想要將Angular文件和Laravel 文件完全分開。他們想要讓他們的整個應用程序放在public文件夾中。這樣做很簡單:只需要將默認的View的位置設置為public文件夾即可。可以通過修改app/config/view.php文件來完成設置。

  1. // app/config/view.php  
  2. ...  
  3.       
  4.     // make laravel look in public/views for view files  
  5.     'paths' => array(__DIR__.'/../../public/views'),  
  6.  
  7. ...  

現在,return View::make('index') 將會查找public/views/index.php文件。你完全可以配置你想如何組織你的app。一些人認為將整個Angular應用程序放在public文件夾中好處比較多,這樣可以很容易的處理路由并且如果將來有需要的話,可以完全的將后端的RESTful API 和前端的Angular區分開來。

為了Angular能進行路由,那么你的部分文件需被放置在public 文件夾中,但是這已經超出了本文的范圍。 如果你需更多單頁Angular 路由的信息,請查看  單頁Angular 應用路由

讓我們假設所有東西都使用默認,并且我們的主視圖文件是在我們的app/ views 文件夾下,然后我們繼續。 

使用Laravel和Angular 路由 如果使用Laravel和Angular 路由時沖突了,會導致很多的問題。Laravel將作為主路由掌控你的應用程序。Angular 路由只會發生在, 當Laravel路由我們的用戶, 到Angular主路由(index.php)這種情況。 這就是為什么我們使用Laravel掌控所有的路由。Laravel將處理API路由和將任意不知如何路由發送到Angular。然后,你可以為你的Angular 應用設置所有的路由來處理出不同的視圖。

#p#

前端的Angular

準備我們的應用程序

我們的Angular程序中的每一件事都要在public文件夾中處理。這可以有助于我們將它和后端的app文件夾中的文件很好的區分開來。

讓我們看一下我們的public文件夾中的組織結構。我們創建了模塊化的Angular程序,因為這是最佳實踐。現在,我們程序分成的各個部分很容易進行測試和處理。

  1. public/  
  2. ----- js/  
  3. ---------- controllers/                // where we will put our angular controllers  
  4. --------------- mainCtrl.js   
  5. ---------- services/                 // angular services  
  6. --------------- commentService.js   
  7. ---------- app.js 

Angular Service public/js/services/commentService.js

  1. // public/js/services/commentService.js  
  2. angular.module('commentService', [])  
  3.  
  4.     .factory('Comment'function($http) {  
  5.  
  6.         return {  
  7.             // get all the comments  
  8.             get : function() {  
  9.                 return $http.get('/api/comments');  
  10.             },  
  11.  
  12.             // save a comment (pass in comment data)  
  13.             save : function(commentData) {  
  14.                 return $http({  
  15.                     method: 'POST',  
  16.                     url: '/api/comments',  
  17.                     headers: { 'Content-Type' : 'application/x-www-form-urlencoded' },  
  18.                     data: $.param(commentData)  
  19.                 });  
  20.             },  
  21.  
  22.             // destroy a comment  
  23.             destroy : function(id) {  
  24.                 return $http.delete('/api/comments/' + id);  
  25.             }  
  26.         }  
  27.  
  28.     });  

這就是我們的Angular service,包含了3個不同的函數。這些是我們唯一所需要的函數,因為它們將會和我們Laravel中的路由api相對應。

我們的service將會返回一個promise對象。這些將會用來處理我們的控制器。這里的命名約定同樣也和我們的Laravel控制器保持一致。

完成了我們的Angular service,讓我們開始著手我們的控制器并使用它。

Angular控制器public/js/controllers/mainCtrl.js

該控制器實現了我們應用的絕大部分功能。我們在這里面創建處理提交表單和刪除評論的函數。

  1. // public/js/controllers/mainCtrl.js  
  2. angular.module('mainCtrl', [])  
  3.  
  4.     // 在控制器中諸如Comment服務  
  5.     .controller('mainController'function($scope$http, Comment) {  
  6.         // 持有新評論所有表單數據的對象  
  7.         $scope.commentData = {};  
  8.  
  9.         // 調用顯示加載圖標的變量  
  10.         $scope.loading = true;  
  11.  
  12.         // 先獲取所有的評論,然后綁定它們到$scope.comments對象         // 使用服務中定義的函數  
  13.         // GET ALL COMMENTS ====================================================  
  14.         Comment.get()  
  15.             .success(function(data) {  
  16.                 $scope.comments = data;  
  17.                 $scope.loading = false;  
  18.             });  
  19.  
  20.         // 處理提交表單的函數  
  21.         // SAVE A COMMENT ======================================================  
  22.         $scope.submitComment = function() {  
  23.             $scope.loading = true;  
  24.  
  25.             // 保存評論。在表單間傳遞評論  
  26.             // 使用在服務中創建的函數  
  27.             Comment.save($scope.commentData)  
  28.                 .success(function(data) {  
  29.  
  30.                     // 如果成功,我們需要刷新評論列表  
  31.                     Comment.get()  
  32.                         .success(function(getData) {  
  33.                             $scope.comments = getData;  
  34.                             $scope.loading = false;  
  35.                         });  
  36.  
  37.                 })  
  38.                 .error(function(data) {  
  39.                     console.log(data);  
  40.                 });  
  41.         };  
  42.  
  43.         // 處理刪除評論的函數  
  44.         // DELETE A COMMENT ====================================================  
  45.         $scope.deleteComment = function(id) {  
  46.             $scope.loading = true;   
  47.  
  48.             // 使用在服務中創建的函數  
  49.             Comment.destroy(id)  
  50.                 .success(function(data) {  
  51.  
  52.                     // 如果成功,我們需要刷新評論列表  
  53.                     Comment.get()  
  54.                         .success(function(getData) {  
  55.                             $scope.comments = getData;  
  56.                             $scope.loading = false;  
  57.                         });  
  58.  
  59.                 });  
  60.         };  
  61.  
  62.     });  

正如你在控制器中看到的,我們已經注入了Comment服務并使用它來實現主要的功能:獲得,保存以及刪除。使用這樣的服務避免用$http get或put來污染我們的控制器。

連接到我們的應用public/js/app.js

在Angular方面,我們已經創建了服務和控制器。現在讓我們將一起連接起來,這樣我們可以使用ng-app和ng-controller將它應用到我們的應用中。

這就是創建Angular應用的代碼。我們將把服務和控制器注入。這是最佳實踐的做法,這能夠使我們的應用程序模塊化,且各個不同部分都是可測可擴展的。

  1. // public/js/app.js  
  2. var commentApp = angular.module('commentApp', ['mainCtrl''commentService']);  

就這樣,沒有太多工作。現在我們切實實現了我們的觀點,我們可以看Angular的各部分是如何一起工作的。

#p#

我們的主視圖app/views/index.php

到目前為止,在做完一切準備工作后,我們仍然不能從瀏覽器中看到任何內容。因為Laravel控制著我們的主路由,我們需要定義我們的視圖文件,且將所有路由請求返回return View::make('index');。

讓我們先創建視圖。我們將使用我們已創建的所有Angular內容。我們已已使用Angular創建的主要部分將是我們將在index.php中主要使用的部件:

  • ng-app和ng-controller:通過將它們附加到body標簽上來應用它們

  • ng-repeat:通過循環將評論顯示到模板中

  • submitComment():使用ng-submit將這個函數附加到表單上

  • Loading Icons:我們將創建一個稱作loading的變量。如果它被設為true,我們將顯示一個加載圖標并隱藏評論

  • deleteComment():我們將附加這個函數到一個刪除鏈接,以便我們刪除評論

現在讓我們來寫實現我們觀點的實際代碼。我們將對主要重要的部分做注釋,這樣我們就能夠看到一切是如何正常工作的。

  1. <!-- app/views/index.php -->  
  2. <!doctype html>  
  3. <html>  
  4. <head>  
  5.     <meta charset="UTF-8">  
  6.     <title>Laravel and Angular Comment System</title>  
  7.  
  8.     <!-- CSS -->  
  9.     <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css"> <!-- load bootstrap via cdn -->  
  10.     <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css"> <!-- load fontawesome -->  
  11.     <style>  
  12.         body         { padding-top:30px; }  
  13.         form         { padding-bottom:20px; }  
  14.         .comment     { padding-bottom:20px; }  
  15.     </style>  
  16.  
  17.     <!-- JS -->  
  18.     <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>  
  19.     <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.min.js"></script> <!-- load angular -->  
  20.  
  21.     <!-- ANGULAR -->  
  22.     <!-- all angular resources will be loaded from the /public folder -->  
  23.         <script src="js/controllers/mainCtrl.js"></script> <!-- load our controller -->  
  24.         <script src="js/services/commentService.js"></script> <!-- load our service -->  
  25.         <script src="js/app.js"></script> <!-- load our application -->  
  26.  
  27. </head>  
  28. <!-- declare our angular app and controller -->  
  29. <body ng-app="commentApp" ng-controller="mainController">  
  30. <div class="col-md-8 col-md-offset-2">  
  31.  
  32.     <!-- PAGE TITLE =============================================== -->  
  33.     <div>  
  34.         <h2>Laravel and Angular Single Page Application</h2>  
  35.         <h4>Commenting System</h4>  
  36.     </div>  
  37.  
  38.     <!-- NEW COMMENT FORM =============================================== -->  
  39.     <form ng-submit="submitComment()"> <!-- ng-submit will disable the default form action and use our function -->  
  40.  
  41.         <!-- AUTHOR -->  
  42.         <div>  
  43.             <input type="text" class="form-control input-sm" name="author" ng-model="commentData.author" placeholder="Name">  
  44.         </div>  
  45.  
  46.         <!-- COMMENT TEXT -->  
  47.         <div>  
  48.             <input type="text" class="form-control input-lg" name="comment" ng-model="commentData.text" placeholder="Say what you have to say">  
  49.         </div>  
  50.           
  51.         <!-- SUBMIT BUTTON -->  
  52.         <div class="form-group text-right">      
  53.             <button type="submit" class="btn btn-primary btn-lg">Submit</button>  
  54.         </div>  
  55.     </form>  
  56.  
  57.     <!-- LOADING ICON =============================================== -->  
  58.     <!-- show loading icon if the loading variable is set to true -->  
  59.     <p ng-show="loading"><span class="fa fa-meh-o fa-5x fa-spin"></span></p>  
  60.  
  61.     <!-- THE COMMENTS =============================================== -->  
  62.     <!-- hide these comments if the loading variable is true -->  
  63.     <div ng-hide="loading" ng-repeat="comment in comments">  
  64.         <h3>Comment #{{ comment.id }} <small>by {{ comment.author }}</h3>  
  65.         <p>{{ comment.text }}</p>  
  66.  
  67.         <p><a href="#" ng-click="deleteComment(comment.id)">Delete</a></p>  
  68.     </div>  
  69.  
  70. </div>  
  71. </body>  
  72. </html>  

laravel-angular-single-page-application

現在我們終于實現了我們的觀點,將所有已創造的部分組合了起來。你可以去試玩一下這個應用。所有部件都應很好地結合在一起,評論的創建和刪除也應該不用刷新頁面。

測試

確保你測試了 Github repo 的應用.下面是做好這一過程的步驟

  1. 復制 repo:git clone git@github.com:scotch-io/laravel-angular-comment-app

  2. 安裝Laravel:composer install --prefer-dist

  3. 修改數據庫連接 inapp/config/database.php

  4. 數據遷移 database:php artisan migrate

  5. 打好種子 database:php artisan db:seed

  6. 瀏覽你的應用!

結論

以往本文在介紹使用 Laravel 和Angular上為你提供了幫助. 你可以在此基礎上創建使用更多API的 Laravel 應用, 甚至創建自己的 Angular routing .

如果有什么提議請告知. 我們會及時更新這篇文章.

英文原文:Create a Laravel and Angular Single Page Comment Application

譯文來自:http://www.oschina.net/translate/create-a-laravel-and-angular-single-page-comment-application

責任編輯:林師授 來源: 開源中國社區 編譯
相關推薦

2014-09-09 10:49:59

AngularJS單頁應用

2016-11-01 21:02:47

javascriptreact.jsreact-route

2022-02-18 08:43:19

Spring Boo應用程序RabbitMQ

2018-08-26 22:39:08

單頁應用HATEOAS

2011-05-11 10:58:39

iOS

2023-05-10 08:05:41

GoWeb應用

2012-04-19 17:42:46

Titanium布局

2014-09-19 10:54:47

用戶體驗單頁面

2017-09-18 09:03:36

線程安全單例

2019-07-16 16:05:51

PythonScribusRGB

2020-09-01 20:53:26

DocsifyGitHub Page文檔網站

2011-03-15 19:45:27

Windows Azu

2017-09-18 09:17:07

線程安全單例

2010-08-13 13:05:30

Flex應用程序

2023-11-03 11:57:04

2015-05-27 07:44:34

日歷控件 jQueryCSS3

2018-11-14 19:00:24

PythonRedis共享單車

2023-03-30 13:22:45

nginxweb服務器

2017-08-08 14:15:24

2009-08-19 04:14:00

線性鏈表
點贊
收藏

51CTO技術棧公眾號

久久久久天天天天| 亚洲精美色品网站| 亚洲黄色网址在线观看| 免费av网站观看| 久久精品人人| 久久久精品久久久| 久久久无码人妻精品一区| 91国拍精品国产粉嫩亚洲一区| 亚洲欧洲av在线| 国产美女精品久久久| 91麻豆精品在线| 国产专区一区| 日韩在线视频网站| 538国产视频| 在线免费成人| 色美美综合视频| 欧美日韩福利在线| 免费av不卡| 26uuu精品一区二区| 97se亚洲综合| 中文字字幕在线观看| 99精品国产一区二区青青牛奶| 日韩在线观看免费高清| 一本色道久久综合亚洲精品图片| 国产免费av国片精品草莓男男| 一本大道av伊人久久综合| 日韩精品一区二区三区四| 成人精品福利| 久久嫩草精品久久久精品| 亚洲已满18点击进入在线看片| 亚洲欧美日韩激情| 亚洲欧美bt| 国内精品久久久久影院 日本资源| 亚洲欧美卡通动漫| 日韩黄色大片| 一本大道久久加勒比香蕉| 91精品小视频| 久久超级碰碰| 亚洲а∨天堂久久精品9966 | 青青青视频在线播放| 色老板在线视频一区二区| 精品欧美一区二区在线观看 | 久久婷婷国产综合国色天香| av一区二区三区免费| 怡红院男人天堂| 青草国产精品久久久久久| 2025国产精品视频| 国产做受高潮漫动| 国产精品一国产精品k频道56| 韩国欧美亚洲国产| 精品成人av一区二区在线播放| 欧美久色视频| 欧美大片在线影院| 黄色一级片在线| 精品动漫3d一区二区三区免费| 久久99国产综合精品女同| 激情五月少妇a| 亚洲午夜一级| 国语自产在线不卡| 99热在线观看免费精品| 国产精品亚洲产品| 国产精品观看在线亚洲人成网| 久久久久在线视频| 日日夜夜精品视频免费| 日本精品免费观看| 午夜一区二区三区四区| 久久精品国产一区二区三区免费看| 国产精品一区二区久久| 国产欧美一级片| 国产.欧美.日韩| 久久精品99| 国产人成在线视频| 亚洲三级在线观看| 大陆av在线播放| 国模套图日韩精品一区二区| 欧美午夜片在线看| 免费看的av网站| 巨人精品**| 亚洲最新av在线| 国产免费久久久久| 亚洲精选一区| 国产精品久久国产精品99gif| 亚洲天堂网在线观看视频| 国产精品正在播放| 久久久久久久久久久久久久久久av | 亚洲三区在线| 日本h片在线观看| 欧美性69xxxx肥| 波多野结衣国产精品| 91麻豆精品激情在线观看最新 | 幼a在线观看| 一区二区免费看| 国产在线观看福利| 精品一区二区三区视频在线播放| 亚洲精品电影久久久| 亚洲色图100p| 亚洲久色影视| 91亚洲永久免费精品| 肉丝一区二区| 亚洲三级免费电影| 激情网站五月天| 九九九九九九精品任你躁| 精品亚洲夜色av98在线观看| 欧美另类69xxxx| 99亚洲精品| 91成人理论电影| 超碰国产在线| 黄色成人在线播放| 91pony九色| 欧美日韩激情在线一区二区三区| 欧美激情aaaa| 一女二男一黄一片| 国产欧美一区二区在线观看| www插插插无码免费视频网站| 精品欧美日韩精品| 亚洲精品电影网在线观看| 69夜色精品国产69乱| 久久久久久穴| 国产一区再线| av免费看在线| 欧美日韩午夜影院| 国产在线观看h| 亚洲精品视频啊美女在线直播| 91牛牛免费视频| 日本韩国在线视频爽| 一本大道av伊人久久综合| 制服丝袜第一页在线观看| 欧美成人一区二免费视频软件| 国产精品美女免费视频| 牛牛澡牛牛爽一区二区| 五月激情综合婷婷| 大尺度做爰床戏呻吟舒畅| 综合一区av| 91精品视频免费| 毛片免费不卡| 欧美日韩不卡在线| 网爆门在线观看| 美国欧美日韩国产在线播放| 性欧美.com| 国产成人a视频高清在线观看| 国产亚洲欧美aaaa| 69视频免费在线观看| 26uuu国产电影一区二区| 美女日批免费视频| 精品久久97| 88xx成人精品| 色资源在线观看| 欧美日韩中文字幕综合视频| 玖玖爱在线观看| 久久久天天操| 日韩欧美一区二区三区四区| 另类中文字幕国产精品| 在线看欧美日韩| 91肉色超薄丝袜脚交一区二区| 国产精品乱人伦| 亚洲第一天堂久久| 欧美日韩精品| 国产一区二区精品免费| 亚洲风情在线资源| 国产一区二区动漫| 在线观看免费中文字幕| 国产精品成人一区二区三区夜夜夜 | 欧美日韩亚洲免费| 成人精品国产亚洲| 久久精品视频网站| 黑人精品一区二区三区| 精品magnet| 69视频在线观看免费| 久久精品免费观看| www.欧美黄色| 综合干狼人综合首页| 国产欧美一区二区三区视频| 岛国中文字幕在线| 亚洲第一区在线| 亚洲中文字幕无码爆乳av | 国产无精乱码一区二区三区| 久久―日本道色综合久久| 视频二区在线播放| 欧美精品啪啪| 久久精品成人一区二区三区蜜臀| 国产韩日精品| 久久久久久18| chinese偷拍一区二区三区| 欧美一级夜夜爽| 国产精品国产三级国产专区52| 中文字幕乱码久久午夜不卡| 日日夜夜精品视频免费观看 | 亚洲最大成人网4388xx| 人人妻人人澡人人爽人人精品 | 欧美日韩欧美| 日韩成人久久久| 中文字幕日韩三级| 亚洲第一激情av| 国产视频123区| 成人av资源在线| 日日干夜夜操s8| 午夜在线精品偷拍| 黄色网在线视频| 日韩精品免费一区二区在线观看 | 三级a三级三级三级a十八发禁止| 亚洲无吗在线| 中国人体摄影一区二区三区| 一区三区在线欧| 99国产盗摄| 欧美a视频在线| 7777精品视频| 国产盗摄一区二区| 伊人久久久久久久久久久久久 | 91丝袜美腿高跟国产极品老师 | 久久中文字幕电影| 香蕉视频在线观看黄| 日韩国产欧美在线观看| 免费看黄在线看| 欧美日韩一区二区高清| 亚洲毛片aa| 欧美女王vk| 精品国产aⅴ麻豆| 中文字幕久久精品一区二区| 国产精品永久在线| 精品国产免费人成网站| 欧美精品激情视频| www在线观看播放免费视频日本| 亚洲日韩欧美视频一区| 亚洲 欧美 精品| 亚洲成人国产精品| 亚洲男人天堂久久| 日韩一二三四区| 国产精品热久久| 欧美性感一区二区三区| 99re国产在线| 色狠狠一区二区| 欧美h在线观看| 精品毛片网大全| 久久久久久久久久免费视频| 亚洲国产精品欧美一二99| 劲爆欧美第一页| 亚洲精品视频免费观看| 97成人资源站| 亚洲激情第一区| www.av成人| 亚洲啪啪综合av一区二区三区| 天堂网中文在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 国产三级av在线播放| 久久先锋影音av| 97人妻精品一区二区三区免 | 欧美不卡在线一区二区三区| 日韩成人动漫在线观看| 久久人人97超碰人人澡爱香蕉| 国内视频在线精品| 麻豆传媒一区| 久久99蜜桃| 亚洲精品一区二| 香蕉国产精品| 久久人人爽人人爽人人av| 亚洲大胆视频| 无码播放一区二区三区| 美女视频一区免费观看| 爱情岛论坛成人| 激情综合五月天| 无码人妻一区二区三区精品视频| 成人国产免费视频| 添女人荫蒂视频| 中文字幕不卡在线观看| 欧美丰满熟妇bbbbbb| 亚洲一区二区三区不卡国产欧美 | 久久免费高清| 色噜噜狠狠一区二区| 国产精品资源网| 亚洲中文字幕无码av| 国产丝袜欧美中文另类| 欧美做爰啪啪xxxⅹ性| 亚洲一区二三区| 亚洲国产精品无码久久久| 欧美日韩国产综合一区二区| 精品国产乱码久久久久久蜜臀网站| 精品免费国产二区三区| 久久手机免费观看| xxxxx成人.com| 51av在线| 国产精品丝袜高跟| 中文在线综合| 亚洲v国产v在线观看| 欧美不卡一区| 不要播放器的av网站| 极品少妇xxxx精品少妇| 中文字幕一区二区久久人妻网站| 久久久精品国产免大香伊| 国产少妇在线观看| 日韩欧美第一页| av中文字幕在线免费观看| 亚洲精品短视频| 成人黄色网址| 国产www精品| 一区二区三区免费在线看| 日韩视频在线播放| 亚洲日本黄色| 久久精品亚洲天堂| 国产日韩视频一区二区三区| 免费看一级一片| 欧美性欧美巨大黑白大战| 欧性猛交ⅹxxx乱大交| 色999日韩欧美国产| 美女搞黄视频在线观看| 亚洲一区二区三区久久| 欧美色爱综合| 久久久久久久中文| 国产在线精品免费| 日韩视频在线观看免费视频| 午夜不卡av在线| 国内老熟妇对白hdxxxx| 综合久久五月天| 黑人巨大精品欧美一区二区桃花岛| 亚洲综合第一页| 68国产成人综合久久精品| 日韩欧美在线免费观看视频| 成人动漫在线一区| 青青草免费av| 欧美一级理论性理论a| 在线看黄色av| 国产精品久久久久久久久久东京| 农村少妇一区二区三区四区五区| 992tv快乐视频| 国产一区二区三区在线看麻豆| 美国黄色特级片| 欧美亚洲日本国产| 电影av在线| 国产成人综合精品在线| 国产传媒欧美日韩成人精品大片| av免费观看网| 久久影院午夜论| 在线能看的av| 亚洲精品第一页| 中文在线а√在线8| 久久国产精品-国产精品| 亚洲麻豆av| 亚洲精品中文字幕在线播放| 亚洲成av人**亚洲成av**| 丰满人妻熟女aⅴ一区| 欧美日韩国产成人在线观看| 久久99成人| 2018中文字幕第一页| 成熟亚洲日本毛茸茸凸凹| 久久久久久国产精品免费播放| 日韩欧美精品在线视频| 亚洲小说区图片区都市| 懂色一区二区三区av片| 一区精品久久| theav精尽人亡av| 色偷偷久久人人79超碰人人澡| 可以直接在线观看的av| 国产精品美女在线| 国产精品99一区二区三区| 日韩av片免费观看| 亚洲专区一二三| 欧美一区二区公司| 51视频国产精品一区二区| 九九视频免费观看视频精品| 超碰在线播放91| 亚洲人成网站在线| 免费a级片在线观看| 欧美亚洲国产视频小说| 国产精品一区二区99| 欧美成年人视频在线观看| 国产精品不卡一区二区三区| 国产乱人乱偷精品视频a人人澡| 欧美成人免费小视频| 另类图片第一页| 亚洲一二三区av| 亚洲三级免费电影| 国产91久久久| 国产精品高精视频免费| 亚洲欧美综合久久久| 中文字幕第九页| 色94色欧美sute亚洲线路一ni| 免费在线观看黄色网| 国产视频一区二区不卡| 日韩国产成人精品| 久久国产精品国语对白| 国产偷国产偷亚洲清高网站| 久久女人天堂| 国产成人永久免费视频| 久久久精品国产免大香伊 | 国产91在线|亚洲| 丁香社区五月天| 欧美日韩成人免费| 精品国产99| 久久久久国产免费| 在线观看网站黄不卡| 亚洲区欧洲区| 日韩av电影免费观看| 国产suv一区二区三区88区| 久久久精品视频网站| 久99九色视频在线观看| 久久91麻豆精品一区| 亚洲成a人片在线www| 欧美色综合影院| 美女91在线看| 国产性生活免费视频| 欧美国产精品v|