3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python计算机视觉:第九章 图像分割

發布時間:2025/3/21 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python计算机视觉:第九章 图像分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第九章 圖像分割

  • 9.1 更新用戶
  • 9.1.1 編輯表單
  • 9.1.2 編輯失敗
  • 9.1.3 編輯成功
  • 9.2 權限限制
  • 9.2.1 必須先登錄
  • 9.2.2 用戶只能編輯自己的資料
  • 9.2.3 更友好的轉向
  • 9.3 列出所有用戶
  • 9.3.1 用戶列表
  • 9.3.2 示例用戶
  • 9.3.3 分頁
  • 9.3.4 視圖重構
  • 9.4 刪除用戶
  • 9.4.1 管理員
  • 9.4.2 destroy 動作
  • 9.5 小結
  • 9.6 練習
  • 圖像分割是將一幅圖像分割成有意義區域的過程。區域可以是圖像的前景與背景或者單個對象。這些區域可以利用諸如顏色、邊線或近鄰相似性等特征構建。本章中,我們將看到一些不同的分割技術。

    from pygraph.classes.digraph import digraph from pygraph.algorithms.minmax import maximum_flowgr = digraph() gr.add_nodes([0,1,2,3]) gr.add_edge((0,1), wt=4) gr.add_edge((1,2), wt=3) gr.add_edge((2,3), wt=5) gr.add_edge((0,2), wt=3) gr.add_edge((1,3), wt=4) flows,cuts = maximum_flow(gr,0,3) print 'flow is:', flows print 'cut is:', cuts flow is: {(0, 1): 4, (1, 2): 0, (1, 3): 4, (2, 3): 3, (0, 2): 3} cut is: {0: 0, 1: 1, 2: 1, 3: 1} from scipy.misc import imresize from PCV.tools import graphcut from PIL import Image from pylab import *im = array(Image.open("../data/empire.jpg")) im = imresize(im, 0.07) size = im.shape[:2]# add two rectangular training regions labels = zeros(size) labels[3:18, 3:18] = -1 labels[-18:-3, -18:-3] = 1# create graph g = graphcut.build_bayes_graph(im, labels, kappa=1)# cut the graph res = graphcut.cut_graph(g, size)figure() graphcut.show_labeling(im, labels)figure() imshow(res) gray() axis('off') show()

    P203

    from PCV.tools import rof from pylab import * from PIL import Image import scipy.misc#im = array(Image.open('../data/ceramic-houses_t0.png').convert("L")) im = array(Image.open('../data/flower32_t0.png').convert("L")) figure() gray() subplot(131) axis('off') imshow(im)U, T = rof.denoise(im, im, tolerance=0.001) subplot(132) axis('off') imshow(U)#t = 0.4 # ceramic-houses_t0 threshold t = 0.8 # flower32_t0 threshold seg_im = U < t*U.max() #scipy.misc.imsave('ceramic-houses_t0_result.pdf', seg_im) scipy.misc.imsave('flower32_t0_result.pdf', seg_im) subplot(133) axis('off') imshow(seg_im)show()

    本章我們要完成表格 7.1所示的Users 資源,添加?edit、update、index?和?destroy?動作。首先我們要實現更新用戶個人資料的功能,實現這樣的功能自然要依靠安全驗證系統(基于第八章中實現的權限限制))。然后要創建一個頁面列出所有的用戶(也需要權限限制),期間會介紹示例數據和分頁功能。最后,我們還要實現刪除用戶的功能,從數據庫中刪除用戶記錄。我們不會為所有用戶都提供這種強大的權限,而是會創建管理員,授權他們來刪除用戶。

    在開始之前,我們要新建?updating-users?分支:

    $ git checkout -b updating-users

    9.1 更新用戶

    編輯用戶信息的方法和創建新用戶差不多(參見第七章),創建新用戶的頁面是在?new?動作中處理的,而編輯用戶的頁面則是在?edit?動作中;創建用戶的過程是在?create?動作中處理了?POST?請求,而編輯用戶要在?update?動作中處理?PUT?請求(HTTP 請求參見旁注 3.2)。二者之間最大的區別是,任何人都可以注冊,但只有當前用戶才能更新他自己的信息。所以我們就要限制訪問,只有授權的用戶才能編輯更新資料,我們可以利用第八章實現的身份驗證機制,使用”事前過濾器(before filter)“實現訪問限制。

    9.1.1 編輯表單

    我們先來創建編輯表單,其構思圖如圖 9.1 所示。1和之前一樣,我們要先編寫測試。注意構思圖中修改 Gravatar 頭像的鏈接,如果你瀏覽過 Gravatar 的網站,可能就知道上傳和編輯頭像的地址是 http://gravatar.com/emails,我們就來測試編輯頁面中有沒有一個鏈接指向了這個地址。2

    圖 9.1:編輯用戶頁面的構思圖

    對編輯用戶表單的測試和第七章練習中的代碼 7.31 類似,同樣也測試了提交不合法數據后是否會顯示錯誤提示信息,如代碼 9.1 所示。

    代碼 9.1?用戶編輯頁面的測試
    spec/requests/user_pages_spec.rb

    require 'spec_helper'describe "User pages" do...describe "edit" dolet(:user) { FactoryGirl.create(:user) }before { visit edit_user_path(user) }describe "page" doit { should have_selector('h1', text: "Update your profile") }it { should have_selector('title', text: "Edit user") }it { should have_link('change', href: 'http://gravatar.com/emails') }enddescribe "with invalid information" dobefore { click_button "Save changes" }it { should have_content('error') }endend end

    程序所需的代碼要放在?edit?動作中,我們在表格 7.1中列出了,用戶編輯頁面的地址是 /users/1/edit(假設用戶的 id 是 1)。我們介紹過用戶的 id 是保存在?params[:id]?中的,所以我們可以按照代碼 9.2 所示的方法查找用戶。

    代碼 9.2?Users 控制器的?edit?方法
    app/controllers/users_controller.rb

    class UsersController < ApplicationController...def edit@user = User.find(params[:id])end end

    要讓測試通過,我們就要編寫編輯用戶頁面的視圖,如代碼 9.3 所示。仔細觀察一下視圖代碼,它和代碼 7.17 中創建新用戶頁面的視圖代碼很相似,這就暗示我們要進行重構,把重復的代碼移入局部視圖。重構會留作練習,詳情參見?9.6 節。

    代碼 9.3?編輯用戶頁面的視圖
    app/views/users/edit.html.erb

    <% provide(:title, "Edit user") %> <h1>Update your profile</h1><div class="row"> <div class="span6 offset3"> <%= form_for(@user) do |f| %> <%= render 'shared/error_messages' %> <%= f.label :name %> <%= f.text_field :name %> <%= f.label :email %> <%= f.text_field :email %> <%= f.label :password %> <%= f.password_field :password %> <%= f.label :password_confirmation, "Confirm Password" %> <%= f.password_field :password_confirmation %> <%= f.submit "Save changes", class: "btn btn-large btn-primary" %> <% end %> <%= gravatar_for @user %> <a href="http://gravatar.com/emails">change</a> </div> </div>

    在這段代碼中我們再次使用了?7.3.2 節中創建的?error_messages?局部視圖。

    添加了視圖代碼,再加上代碼 9.2 中定義的?@user?變量,代碼 9.1 中的 "編輯頁面" 測試應該就可以通過了:

    $ bundle exec rspec spec/requests/user_pages_spec.rb -e "edit page"

    編輯用戶頁面如圖 9.2 所示,我們看到 Rails 會自動讀取?@user?變量,預先填好了名字和 Email 地址字段。

    圖 9.2:編輯用戶頁面,名字和 Email 地址字段已經自動填好了

    查看一下編輯用戶頁面的源碼,我們可以發現的確生成了一個?form?元素,參見代碼 9.4。

    代碼 9.4?編輯表單的 HTML

    <form action="/users/1" class="edit_user" id="edit_user_1" method="post"><input name="_method" type="hidden" value="put" />... </form>

    留意一下其中的一個隱藏字段:

    <input name="_method" type="hidden" value="put" />

    因為瀏覽器本身并不支持發送?PUT?請求(表格 7.1中列出的 REST 動作要用),所以 Rails 就在?POST?請求中使用這個隱藏字段偽造了一個?PUT?請求。3

    還有一個細節需要注意一下,代碼 9.3 和代碼 7.17 都使用了相同的?form_for(@user)?來構建表單,那么 Rails 是怎么知道創建新用戶要發送?POST?請求,而編輯用戶時要發送?PUT?請求的呢?這個問題的答案是,通過 Active Record 提供的new_record??方法可以檢測用戶是新創建的還是已經存在于數據庫中的:

    $ rails console >> User.new.new_record? => true >> User.first.new_record? => false

    所以在使用?form_for(@user)?構建表單時,如果?@user.new_record??返回?true?則發送?POST?請求,否則就發送?PUT?請求。

    最后,我們還要在導航中添加一個指向編輯用戶頁面的鏈接(“設置(Settings)”)。因為只有登錄之后才會顯示這個頁面,所以對“設置”鏈接的測試要和其他的身份驗證測試放在一起,如代碼 9.5 所示。(如果能再測試一下沒登錄時不會顯示“設置”鏈接就更完美了,這會留作練習,參見?9.6 節。)

    代碼 9.5?添加檢測“設置”鏈接的測試
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "with valid information" dolet(:user) { FactoryGirl.create(:user) }before { sign_in user }it { should have_selector('title', text: user.name) }it { should have_link('Profile', href: user_path(user)) }it { should have_link('Settings', href: edit_user_path(user)) }it { should have_link('Sign out', href: signout_path) }it { should_not have_link('Sign in', href: signin_path) }...endend end

    為了簡化,代碼 9.5 中使用?sign_in?幫助方法,這個方法的作用是訪問登錄頁面,提交合法的表單數據,如代碼 9.6 所示。

    代碼 9.6?用戶登錄幫助方法
    spec/support/utilities.rb

    . . . def sign_in(user)visit signin_pathfill_in "Email", with: user.emailfill_in "Password", with: user.passwordclick_button "Sign in"# Sign in when not using Capybara as well.cookies[:remember_token] = user.remember_token end

    如上述代碼中的注釋所說,如果沒有使用 Capybara 的話,填寫表單的操作是無效的,所以我們就添加了一行,在不使用 Capybara 時把用戶的記憶權標添加到 cookies 中:

    # Sign in when not using Capybara as well. cookies[:remember_token] = user.remember_token

    如果直接使用 HTTP 請求方法就必須要有上面這行代碼,具體的用法在代碼 9.47 中有介紹。(注意,測試中使用的?cookies對象和真實的 cookies 對象是有點不一樣的,代碼 8.19 中使用的?cookies.permanent?方法不能在測試中使用。)你可能已經猜到了,sing_in?在后續的測試中還會用到,而且還可以用來去除重復代碼(參見?9.6 節)。

    在程序中添加“設置”鏈接很簡單,我們就直接使用表格 7.1?中列出的?edit_user_path?具名路由,其參數設為代碼 8.22 中定義的?current_user?幫助方法:

    <%= link_to "Settings", edit_user_path(current_user) %>

    完整的代碼如代碼 9.7 所示。

    代碼 9.7?添加“設置”鏈接
    app/views/layouts/_header.html.erb

    <header class="navbar navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <%= link_to "sample app", root_path, id: "logo" %> <nav> <ul class="nav pull-right"> <li><%= link_to "Home", root_path %></li> <li><%= link_to "Help", help_path %></li> <% if signed_in? %> <li><%= link_to "Users", '#' %></li> <li id="fat-menu" class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> Account <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><%= link_to "Profile", current_user %></li> <li><%= link_to "Settings", edit_user_path(current_user) %></li> <li class="divider"></li> <li> <%= link_to "Sign out", signout_path, method: "delete" %> </li> </ul> </li> <% else %> <li><%= link_to "Sign in", signin_path %></li> <% end %> </ul> </nav> </div> </div> </header>

    9.1.2 編輯失敗

    本小節我們要處理編輯失敗的情況,讓代碼 9.1 中對錯誤提示信息的測試通過。我們要在 Users 控制器的?update?動作中使用?update_attributes?方法,傳入提交的?params?Hash,更新用戶記錄,如代碼 9.8 所示。如果提交了不合法的數據,更新操作會返回?false,交由?else?分支處理,重新渲染編輯用戶頁面。我們之前用過類似的處理方式,代碼結構和第一個版本的?create?動作類似(參見代碼 7.21)。

    代碼 9.8?還不完整的?update?動作
    app/controllers/users_controller.rb

    class UsersController < ApplicationController...def edit@user = User.find(params[:id])enddef update@user = User.find(params[:id])if @user.update_attributes(params[:user])# Handle a successful update.elserender 'edit'endend end

    提交不合法信息后顯示了錯誤提示信息(如圖 9.3),測試就可以通過了,你可以運行測試組件驗證一下:

    $ bundle exec rspec spec/

    圖 9.3:提交編輯表單后顯示的錯誤提示信息

    9.1.3 編輯成功

    現在我們要讓編輯表單能夠正常使用了。編輯頭像的功能已經實現了,因為我們把上傳頭像的操作交由 Gravatar 處理了,如需更換頭像,點擊圖 9.2 中的“change”鏈接就可以了,如圖 9.4 所示。下面我們來實現編輯其他信息的功能。

    圖 9.4:Gravatar 的剪切圖片界面,上傳了一個帥哥的圖片

    對?update?動作的測試和對?create?的測試類似。代碼 9.9 介紹了如何使用 Capybara 在表單中填寫合法的數據,還介紹了怎么測試提交表單的操作是否正確。測試的代碼很多,你可以參考第七章中的測試,試一下能不能完全理解。

    代碼 9.9?測試 Users 控制器的?update?動作
    spec/requests/user_pages_spec.rb

    require 'spec_helper'describe "User pages" do...describe "edit" dolet(:user) { FactoryGirl.create(:user) }before { visit edit_user_path(user) }...describe "with valid information" dolet(:new_name) { "New Name" }let(:new_email) { "new@example.com" }before dofill_in "Name", with: new_namefill_in "Email", with: new_emailfill_in "Password", with: user.passwordfill_in "Confirm Password", with: user.passwordclick_button "Save changes"endit { should have_selector('title', text: new_name) }it { should have_selector('div.alert.alert-success') }it { should have_link('Sign out', href: signout_path) }specify { user.reload.name.should == new_name }specify { user.reload.email.should == new_email }endend end

    上述代碼中出現了一個新的方法?reload,出現在檢測用戶的屬性是否已經更新的測試中:

    specify { user.reload.name.should == new_name } specify { user.reload.email.should == new_email }

    這兩行代碼使用?user.reload?從測試數據庫中重新加載?user?的數據,然后檢測用戶的名字和 Email 地址是否更新成了新的值。

    要讓代碼 9.9 中的測試通過,我們可以參照最終版本的?create?動作(代碼 8.27)來編寫?update?動作,如代碼 9.10 所示。我們在代碼 9.8 的基礎上加入了下面這三行。

    flash[:success] = "Profile updated" sign_in @user redirect_to @user

    注意,用戶資料更新成功之后我們再次登入了用戶,因為保存用戶時,重設了記憶權標(代碼 8.18),之前的 session 就失效了(代碼 8.22)。這也是一項安全措施,因為如果用戶更新了資料,任何會話劫持都會自動失效。

    代碼 9.10?Users 控制器的?update?動作
    app/controllers/users_controller.rb

    class UsersController < ApplicationController...def update@user = User.find(params[:id])if @user.update_attributes(params[:user])flash[:success] = "Profile updated"sign_in @userredirect_to @userelserender 'edit'endend end

    注意,現在這種實現方式,每次更新數據都要提供密碼(填寫圖 9.2 中那兩個空的字段),雖然有點煩人,不過卻保證了安全。

    添加了本小節的代碼之后,編輯用戶頁面應該可以正常使用了,你可以運行測試組件再確認一下,測試應該是可以通過的:

    $ bundle exec rspec spec/

    9.2 權限限制

    第八章中實現的身份驗證機制有一個很好的作用,可以實現權限限制。身份驗證可以識別用戶是否已經注冊,而權限限制則可以限制用戶可以進行的操作。

    雖然?9.1 節中已經基本完成了?edit?和?update?動作,但是卻有一個安全隱患:任何人(甚至是未登錄的用戶)都可以訪問這兩個動作,而且登錄后的用戶可以更新所有其他用戶的資料。本節我們要實現一種安全機制,限制用戶必須先登錄才能更新自己的資料,而不能更新他人的資料。沒有登錄的用戶如果試圖訪問這些受保護的頁面,會轉向登錄頁面,并顯示一個提示信息,構思圖如圖 9.5 所示。

    圖 9.5:訪問受保護頁面轉向后的頁面構思圖

    9.2.1 必須先登錄

    因為對?edit?和?update?動作所做的安全限制是一樣的,所以我們就在同一個 RSpec?describe?塊中進行測試。我們從要求登錄開始,測試代碼要檢測未登錄的用戶試圖訪問這兩個動作時是否轉向了登錄頁面,如代碼 9.11 所示。

    代碼 9.11?測試?edit?和?update?動作是否處于被保護狀態
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "authorization" dodescribe "for non-signed-in users" dolet(:user) { FactoryGirl.create(:user) }describe "in the Users controller" dodescribe "visiting the edit page" dobefore { visit edit_user_path(user) }it { should have_selector('title', text: 'Sign in') }enddescribe "submitting to the update action" dobefore { put user_path(user) }specify { response.should redirect_to(signin_path) }endendendend end

    代碼 9.11 除了使用 Capybara 的?visit?方法之外,還第一次使用了另一種訪問控制器動作的方法:如果需要直接發起某種 HTTP 請求,則直接使用 HTTP 動詞對應的方法即可,例如本例中的?put?發起的就是?PUT?請求:

    describe "submitting to the update action" dobefore { put user_path(user) }specify { response.should redirect_to(signin_path) } end

    上述代碼會向 /users/1 地址發送?PUT?請求,由 Users 控制器的?update?動作處理(參見表格 7.1)。我們必須這么做,因為瀏覽器無法直接訪問?update?動作,必須先提交編輯表單,所以 Capybara 也做不到。訪問編輯資料頁面只能測試?edit?動作是否有權限繼續操作,而不能測試?update?動作的授權情況。所以,如果要測試?update?動作是否有權限進行操作只能直接發送?PUT?請求。(你可能已經猜到了,除了?put?方法之外,Rails 中的測試還支持?get、post?和?delete?方法。)

    直接發送某種 HTTP 請求時,我們需要處理更底層的?response?對象。和 Capybara 提供的?page?對象不同,我們可以使用response?測試服務器的響應。本例我們檢測了?update?動作的響應是否轉向了登錄頁面:

    specify { response.should redirect_to(signin_path) }

    我們要使用?before_filter?方法實現權限限制,這個方法會在指定的動作執行之前,先運行指定的方法。為了實現要求用戶先登錄的限制,我們要定義一個名為?signed_in_user?的方法,然后調用?before_filter :signed_in_user,如代碼 9.12 所示。

    代碼 9.12?添加?signed_in_user?事前過濾器
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:edit, :update]...privatedef signed_in_userredirect_to signin_path, notice: "Please sign in." unless signed_in?endend

    默認情況下,事前過濾器會應用于控制器中的所有動作,所以在上述代碼中我們傳入了?:only?參數指定只應用在?edit?和update?動作上。

    注意,在代碼 9.12 中我們使用了設定?flash[:notice]?的簡便方式,把?redirect_to?方法的第二個參數指定為一個 Hash。這段代碼等同于:

    flash[:notice] = "Please sign in." redirect_to signin_path

    (flash[:error]?也可以使用上述的簡便方式,但?flash[:success]?卻不可以。)

    flash[:notice]?加上?flash[:success]?和?flash[:error]?就是我們要介紹的三種 Flash 消息,Bootstrap 為這三種消息都提供了樣式。退出后再嘗試訪問 /users/1/edit,就會看到如圖 9.6 所示的黃色提示框。

    圖 9.6:嘗試訪問受保護的頁面后顯示的登錄表單

    在嘗試讓代碼 9.11 中檢測權限限制的測試通過的過程中,我們卻破壞了代碼 9.1 中的測試。如下的代碼

    describe "edit" dolet(:user) { FactoryGirl.create(:user) }before { visit edit_user_path(user) }...

    現在會失敗,因為必須先登錄才能正常訪問編輯用戶資料頁面。解決這個問題的辦法是,使用代碼 9.6 中定義的?sign_in?方法登入用戶,如代碼 9.13 所示。

    代碼 9.13?為?edit?和?update?測試加入登錄所需的代碼
    spec/requests/user_pages_spec.rb

    require 'spec_helper'describe "User pages" do...describe "edit" dolet(:user) { FactoryGirl.create(:user) }before dosign_in uservisit edit_user_path(user)end...end end

    現在所有的測試應該都可以通過了:

    $ bundle exec rspec spec/

    9.2.2 用戶只能編輯自己的資料

    當然,要求用戶必須先登錄還是不夠的,用戶必須只能編輯自己的資料。我們的測試可以這么編寫,用其他用戶的身份登錄,然后訪問?edit?和?update?動作,如代碼 9.14 所示。注意,用戶不應該嘗試編輯其他用戶的資料,我們沒有轉向登錄頁面,而是轉到了網站的首頁。

    代碼 9.14?測試只有自己才能訪問?edit?和?update?動作
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "authorization" do...describe "as wrong user" dolet(:user) { FactoryGirl.create(:user) }let(:wrong_user) { FactoryGirl.create(:user, email: "wrong@example.com") }before { sign_in user }describe "visiting Users#edit page" dobefore { visit edit_user_path(wrong_user) }it { should_not have_selector('title', text: full_title('Edit user')) }enddescribe "submitting a PUT request to the Users#update action" dobefore { put user_path(wrong_user) }specify { response.should redirect_to(root_path) }endendend end

    注意,創建預構件的方法還可以接受第二個參數:

    FactoryGirl.create(:user, email: "wrong@example.com")

    上述代碼會用指定的 Email 替換默認值,然后創建用戶。我們的測試要確保其他的用戶不能訪問原來那個用戶的?edit?和update?動作。

    我們在控制器中加入了第二個事前過濾器,調用?correct_user?方法,如代碼 9.15 所示。

    代碼 9.15?保護?edit?和?update?動作的?correct_user?事前過濾器
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:edit, :update]before_filter :correct_user, only: [:edit, :update]...def editenddef updateif @user.update_attributes(params[:user])flash[:success] = "Profile updated"sign_in @userredirect_to @userelserender 'edit'endend...privatedef signed_in_userredirect_to signin_path, notice: "Please sign in." unless signed_in?enddef correct_user@user = User.find(params[:id])redirect_to(root_path) unless current_user?(@user)endend

    上述代碼中的?correct_user?方法使用了?current_user??方法,我們要在 Sessions 幫助方法模塊中定義一下,如代碼 9.16。

    代碼 9.16?定義?current_user??方法
    app/helpers/sessions_helper.rb

    module SessionsHelper...def current_user@current_user ||= User.find_by_remember_token(cookies[:remember_token])enddef current_user?(user)user == current_userend... end

    代碼 9.15 同時也更新了?edit?和?update?動作的代碼。之前在代碼 9.2 中,我們是這樣寫的:

    def edit@user = User.find(params[:id]) end

    update?代碼類似。既然?correct_user?事前過濾器中已經定義了?@user,這兩個動作中就不再需要再定義?@user?變量了。

    在繼續閱讀之前,你應該驗證一下測試是否可以通過:

    $ bundle exec rspec spec/

    9.2.3 更友好的轉向

    程序的權限限制基本完成了,但是還有一點小小的不足:不管用戶嘗試訪問的是哪個受保護的頁面,登錄后都會轉向資料頁面。也就是說,如果未登錄的用戶訪問了編輯資料頁面,會要求先登錄,登錄轉到的頁面是 /users/1,而不是/users/1/edit。如果登錄后能轉到用戶之前想訪問的頁面就更好了。

    針對這種更友好的轉向,我們可以這樣編寫測試,先訪問編輯用戶資料頁面,轉向登錄頁面后,填寫正確的登錄信息,點擊“Sign in”按鈕,然后顯示的應該是編輯用戶資料頁面,而不是用戶資料頁面。相應的測試如代碼 9.17 所示。

    代碼 9.17?測試更友好的轉向
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "authorization" dodescribe "for non-signed-in users" dolet(:user) { FactoryGirl.create(:user) }describe "when attempting to visit a protected page" dobefore dovisit edit_user_path(user)fill_in "Email", with: user.emailfill_in "Password", with: user.passwordclick_button "Sign in"enddescribe "after signing in" doit "should render the desired protected page" dopage.should have_selector('title', text: 'Edit user')endendendend...end end

    下面我們來實現這個設想。4要轉向用戶真正想訪問的頁面,我們要在某個地方存儲這個頁面的地址,登錄后再轉向這個頁面。我們要通過兩個方法來實現這個過程,store_location?和?redirect_back_or,都在 Sessions 幫助方法模塊中定義,如代碼 9.18。

    代碼 9.18?實現更友好的轉向所需的代碼
    app/helpers/sessions_helper.rb

    module SessionsHelper...def redirect_back_or(default)redirect_to(session[:return_to] || default)session.delete(:return_to)enddef store_locationsession[:return_to] = request.fullpathend end

    地址的存儲使用了 Rails 提供的?session,session?可以理解成和?8.2.1 節中介紹的?cookies?是類似的東西,會在瀏覽器關閉后自動失效。(在?8.5 節中介紹過,其實?session?的實現方法正是如此。)我們還使用了?request?對象的?fullpath?方法獲取了所請求頁面的完整地址。在?store_location?方法中,把完整的請求地址存儲在?session[:return_to]?中。

    要使用?store_location,我們要把它加入?signed_in_user?事前過濾器中,如代碼 9.19 所示。

    代碼 9.19?把?store_location?加入?signed_in_user?事前過濾器
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:edit, :update]before_filter :correct_user, only: [:edit, :update]...def editend...privatedef signed_in_userunless signed_in?store_locationredirect_to signin_path, notice: "Please sign in."endenddef correct_user@user = User.find(params[:id])redirect_to(root_path) unless current_user?(@user)end end

    實現轉向操作,要在 Sessions 控制器的?create?動作中加入?redirect_back_or?方法,用戶登錄后轉到適當的頁面,如代碼 9.20 所示。如果存儲了之前請求的地址,redirect_back_or?方法就會轉向這個地址,否則會轉向參數中指定的地址。

    代碼 9.20?加入友好轉向后的?create?動作
    app/controllers/sessions_controller.rb

    class SessionsController < ApplicationController...def createuser = User.find_by_email(params[:session][:email].downcase)if user && user.authenticate(params[:session][:password])sign_in userredirect_back_or userelseflash.now[:error] = 'Invalid email/password combination'render 'new'endend... end

    redirect_back_or?方法在下面這行代碼中使用了“或”操作符?||:

    session[:return_to] || default

    如果?session[:return_to]?的值不是?nil,上面這行代碼就會返回?session[:return_to]?的值,否則會返回?default。注意,在代碼 9.18 中,成功轉向后就會刪除存儲在 session 中的轉向地址。如果不刪除的話,在關閉瀏覽器之前,每次登錄后都會轉到存儲的地址上。(對這一過程的測試留作練習,參見?9.6 節。)

    加入上述代碼之后,代碼 9.17 中對友好轉向的集成測試應該可以通過了。至此,我們也就完成了基本的用戶身份驗證和頁面保護機制。和之前一樣,在繼續閱讀之前,最好確認一下所有的測試是否都可以通過:

    $ bundle exec rspec spec/

    9.3 列出所有用戶

    本節我們要添加計劃中的倒數第二個用戶動作,index。index?動作不會顯示某一個用戶,而是顯示所有的用戶。在這個過程中,我們要學習如何在數據庫中生成示例用戶數據,以及如何分頁顯示用戶列表,顯示任意數量的用戶。用戶列表、分頁鏈接和“所有用戶(Users)”導航鏈接的構思圖如圖 9.7 所示。5在?9.4 節?中,我們還會在用戶列表中添加刪除鏈接,這樣就可以刪除有問題的用戶了。

    圖 9.7:用戶列表頁面的構思圖,包含了分頁鏈接和“Users”導航鏈接

    9.3.1 用戶列表

    單個用戶的資料頁面是對外開放的,不過用戶列表頁面只有注冊用戶才能訪問。我們先來編寫測試。在測試中我們要檢測index?動作是被保護的,如果訪問?users_path?會轉向登錄頁面。和其他的權限限制測試一樣,我們也會把這個測試放在身份驗證的集成測試中,如代碼 9.21 所示。

    代碼 9.21?測試?index?動作是否是被保護的
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "authorization" dodescribe "for non-signed-in users" do...describe "in the Users controller" do...describe "visiting the user index" dobefore { visit users_path }it { should have_selector('title', text: 'Sign in') }endend...endend end

    若要這個測試通過,我們要把?index?動作加入?signed_in_user?事前過濾器,如代碼 9.22 所示。

    代碼 9.22?訪問?index?動作必須先登錄
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:index, :edit, :update]...def indexend... end

    接下來,我們要測試用戶登錄后,用戶列表頁面要有特定的標題和標頭,還要列出網站中所有的用戶。為此,我們要創建三個用戶預構件,以第一個用戶的身份登錄,然后檢測用戶列表頁面中是否有一個列表,各用戶的名字都包含在一個單獨的?li標簽中。注意,我們要為每個用戶分配不同的名字,這樣列表中的用戶才是不一樣的,如代碼 9.23 所示。

    代碼 9.23?用戶列表頁面的測試
    spec/requests/user_pages_spec.rb

    require 'spec_helper'describe "User pages" dosubject { page }describe "index" dobefore dosign_in FactoryGirl.create(:user)FactoryGirl.create(:user, name: "Bob", email: "bob@example.com")FactoryGirl.create(:user, name: "Ben", email: "ben@example.com")visit users_pathendit { should have_selector('title', text: 'All users') }it { should have_selector('h1', text: 'All users') }it "should list each user" doUser.all.each do |user|page.should have_selector('li', text: user.name)endendend... end

    你可能還記得,我們在演示程序的相關代碼中介紹過(參見代碼 2.4),在程序中我們可以使用?User.all?從數據庫中取回所有的用戶,賦值給實例變量?@users?在視圖中使用,如代碼 9.24 所示。(你可能會覺得一次列出所有的用戶不太好,你是對的,我們會在?9.3.3 節中改進。)

    代碼 9.24?Users 控制器的?index?動作
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:index, :edit, :update]...def index@users = User.allend... end

    要顯示用戶列表頁面,我們要創建一個視圖,遍歷所有的用戶,把單個用戶包含在?li?標簽中。我們要使用?each?方法遍歷所有用戶,顯示用戶的 Gravatar 頭像和名字,然后把所有的用戶包含在無序列表?ul?標簽中,如代碼 9.25 所示。在代碼 9.25 中,我們用到了?7.6 節練習中代碼 7.29 的成果,允許向 Gravatar 幫助方法傳入第二個參數,指定頭像的大小。如果你之前沒有做這個練習題,在繼續閱讀之前請參照代碼 7.29 更新 Users 控制器的幫助方法文件。

    代碼 9.25?用戶列表頁面的視圖
    app/views/users/index.html.erb

    <% provide(:title, 'All users') %> <h1>All users</h1><ul class="users"> <% @users.each do |user| %> <li> <%= gravatar_for user, size: 52 %> <%= link_to user.name, user %> </li> <% end %> </ul>

    我們再添加一些 CSS(更確切的說是 SCSS)美化一下,如代碼 9.26。

    代碼 9.26?用戶列表頁面的 CSS
    app/assets/stylesheets/custom.css.scss

    . . . /* users index */.users {list-style: none;margin: 0;li {overflow: auto;padding: 10px 0;border-top: 1px solid $grayLighter;&:last-child {border-bottom: 1px solid $grayLighter;}} }

    最后,我們還要在頭部的導航中加入到用戶列表頁面的鏈接,鏈接的地址為?users_path,這是表格 7.1中還沒介紹的最后一個具名路由了。相應的測試(代碼 9.27)和程序所需的代碼(代碼 9.28)都很簡單。

    代碼 9.27?檢測“Users”鏈接的測試
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "with valid information" dolet(:user) { FactoryGirl.create(:user) }before { sign_in user }it { should have_selector('title', text: user.name) }it { should have_link('Users', href: users_path) }it { should have_link('Profile', href: user_path(user)) }it { should have_link('Settings', href: edit_user_path(user)) }it { should have_link('Sign out', href: signout_path) }it { should_not have_link('Sign in', href: signin_path) }...endend end

    代碼 9.28?添加“Users”鏈接
    app/views/layouts/_header.html.erb

    <header class="navbar navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <%= link_to "sample app", root_path, id: "logo" %> <nav> <ul class="nav pull-right"> <li><%= link_to "Home", root_path %></li> <li><%= link_to "Help", help_path %></li> <% if signed_in? %> <li><%= link_to "Users", users_path %></li> <li id="fat-menu" class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> Account <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><%= link_to "Profile", current_user %></li> <li><%= link_to "Settings", edit_user_path(current_user) %></li> <li class="divider"></li> <li> <%= link_to "Sign out", signout_path, method: "delete" %> </li> </ul> </li> <% else %> <li><%= link_to "Sign in", signin_path %></li> <% end %> </ul> </nav> </div> </div> </header>

    至此,用戶列表頁面的功能就實現了,所有的測試也都可以通過了:

    $ bundle exec rspec spec/

    不過,如圖 9.8 所示,頁面中只顯示了一個用戶,有點孤單單。下面,讓我們來改變一下這種悲慘狀況。

    圖 9.8:用戶列表頁面,只有一個用戶

    9.3.2 示例用戶

    在本小節中,我們要為應用程序添加更多的用戶。如果要讓用戶列表看上去像個列表,我們可以在瀏覽器中訪問注冊頁面,然后一個一個地注冊用戶,不過還有更好的方法,讓 Ruby 和 Rake 為我們創建用戶。

    首先,我們要在?Gemfile?中加入?faker(如代碼 9.29 所示),使用這個 gem,我們可以使用半真實的名字和 Email 地址創建示例用戶。

    代碼 9.29?把?faker?加入?Gemfile

    source 'https://rubygems.org'gem 'rails', '3.2.13' gem 'bootstrap-sass', '2.0.0' gem 'bcrypt-ruby', '3.0.1' gem 'faker', '1.0.1' . . .

    然后和之前一樣,運行下面的命令安裝:

    $ bundle install

    接下來我們要添加一個 Rake 任務創建示例用戶。這個 Rake 任務保存在?lib/tasks?文件夾中,而且在?:db?命名空間中定義,如代碼 9.30 所示。(代碼中涉及到一些高級知識,現在不必深入了解。)

    代碼 9.30?在數據庫中生成示例用戶的 Rake 任務
    lib/tasks/sample_data.rake

    namespace :db dodesc "Fill database with sample data"task populate: :environment doUser.create!(name: "Example User",email: "example@railstutorial.org",password: "foobar",password_confirmation: "foobar")99.times do |n|name = Faker::Name.nameemail = "example-#{n+1}@railstutorial.org"password = "password"User.create!(name: name,email: email,password: password,password_confirmation: password)endend end

    上述代碼定義了一個名為?db:populate?的 Rake 任務,先創建一個用戶替代之前存在的那個用戶,然后還創建了 99 個用戶。下面這行代碼

    task populate: :environment do

    確保這個 Rake 任務可以獲取 Rails 環境的信息,包括 User 模型,所以才能使用?User.create!?方法。create!?方法和create?方法的作用一樣,只不過如果提供的信息不合法不會返回?false?而是會拋出異常(參見?6.1.4 節),這樣如果出錯的話就很容易找到錯誤發生的地方。

    這個任務是定義在?:db?命名空間中的,所以我們要按照如下的方式來執行:

    $ bundle exec rake db:reset $ bundle exec rake db:populate $ bundle exec rake db:test:prepare

    執行這三個任務之后,我們的應用程序就有 100 個用戶了,如圖 9.9 所示。(我犧牲了一點個人時間為前幾個用戶上傳了頭像,這樣就不都會顯示默認的 Gravatar 頭像了。)

    圖 9.9:顯示了 100 個用戶的用戶列表頁面(/users)

    9.3.3 分頁

    現在,當初的用戶不再孤單單了,但是又出現了新的問題:用戶太多,全在一個頁面中顯示。現在的用戶數量是 100 個,算是少的了,在真實的網站中,這個數量可能是以千計的。為了避免在一頁中顯示過多的用戶,我們可以使用分頁功能,一頁只顯示 30 個用戶。

    在 Rails 中有很多實現分頁的方法,我們要使用其中一個最簡單也最完善的,叫做 willpaginate。我們要使用 `willpaginate和bootstrap-willpaginate這兩個 gem,bootstrap-willpaginate的作用是設置 will_paginate 使用 Bootstrap 中的分頁樣式。修改后的Gemfile` 如代碼 9.31 所示。

    代碼 9.31?在?Gemfile?中加入 will_paginate

    source 'https://rubygems.org'gem 'rails', '3.2.13' gem 'bootstrap-sass', '2.0.0' gem 'bcrypt-ruby', '3.0.1' gem 'faker', '1.0.1' gem 'will_paginate', '3.0.3' gem 'bootstrap-will_paginate', '0.0.6' . . .

    然后執行下面的命令安裝:

    $ bundle install

    安裝后你還要重啟 Web 服務器,確保成功加載這兩個新 gem。

    因為?will_paginate?這個 gem 使用的范圍很廣,所以我們不必做大量的測試,只需簡單的測試一下就可以了。首先我們要檢測頁面中是否包含一個 CSS class 為?pagination?的?div?元素,這個元素就是由 will_paginate 生成的。然后,我們要檢測分頁的第一頁中是否顯示有正確的用戶列表。在測試中我們要用到?paginate?方法,稍后會做介紹。

    和之前一樣,我們要使用 Factory Girl 生成用戶,但是我們立馬就會遇到一個問題:因為用戶的 Email 地址必須是唯一的,那么我們就要手動生成 30 個用戶,這可是一件很費事的活兒。而且,在測試用戶列表時,用戶的名字最好也不一樣。幸好 Factory Girl 料事如神,提供了?sequence?方法來解決這種問題。在代碼 7.8 中,我們是直接輸入名字和 Email 地址來創建預構件的:

    FactoryGirl.define dofactory :user doname "Michael Hartl"email "michael@example.com"password "foobar"password_confirmation "foobar"end end

    現在我們要使用?sequence?方法自動創建一系列的名字和 Email 地址:

    factory :user dosequence(:name) { |n| "Person #{n}" }sequence(:email) { |n| "person_#{n}@example.com"}...

    sequence?方法可以接受一個 Symbol 類型的參數,對應到屬性上(例如?:name),其后還可以跟著塊,有一個塊參數,我們將其命名為?n。FactoryGirl.create(:user)?方法執行成功后,塊參數會自動增加 1。因此,創建的第一個用戶名字為“Person 1”,Email 地址為“person1@example.com”;第二個用戶的名字為?Person 2,Email 地址為“person2@example.com”;依此類推。完整的代碼如代碼 9.32 所示。

    代碼 9.32?定義 Factory Girl 序列
    spec/factories.rb

    FactoryGirl.define dofactory :user dosequence(:name) { |n| "Person #{n}" }sequence(:email) { |n| "person_#{n}@example.com"}password "foobar"password_confirmation "foobar"end end

    創建了預構件序列后,在測試中就可以生成 30 個用戶了,這 30 個用戶就可以產生分頁了:

    before(:all) { 30.times { FactoryGirl.create(:user) } } after(:all) { User.delete_all }

    注意,上述代碼使用?before(:all)?確保在塊中所有測試執行之前,一次性創建 30 個示例用戶。這是對速度做的優化,因為在某些系統中每個測試都創建 30 個用戶會很慢。對應的,我們調用?after(:all)?方法,在測試結束后一次性刪除所有的用戶。

    代碼 9.33 檢測了頁面中是否包含正確的?div?元素,以及是否顯示了正確的用戶。注意,我們把代碼 9.23 中的?User.all?換成了?User.paginate(page: 1),這樣我們才能從數據庫中取回第一頁中要顯示的用戶。還要注意一下,代碼 9.33 中使用的before(:each)?方法是和?before(:all)?方法相反的操作。

    代碼 9.33?測試分頁
    spec/requests/user_pages_spec.rb

    require 'spec_helper'describe "User pages" dosubject { page }describe "index" dolet(:user) { FactoryGirl.create(:user) }before(:each) dosign_in uservisit users_pathendit { should have_selector('title', text: 'All users') }it { should have_selector('h1', text: 'All users') }describe "pagination" dobefore(:all) { 30.times { FactoryGirl.create(:user) } }after(:all) { User.delete_all }it { should have_selector('div.pagination') }it "should list each user" doUser.paginate(page: 1).each do |user|page.should have_selector('li', text: user.name)endendendend... end

    要實現分頁,我們要在用戶列表頁面的視圖中加入一些代碼,告訴 Rails 要分頁顯示用戶,而且要把?index?動作中的User.all?換成知道如何分頁的方法。我們先在視圖中加入特殊的?will_paginate?方法,如代碼 9.34 所示。稍后我們會看到為什么要在用戶列表的前后都加入分頁代碼。

    代碼 9.34?在用戶列表視圖中加入分頁
    app/views/users/index.html.erb

    <% provide(:title, 'All users') %> <h1>All users</h1><%= will_paginate %><ul class="users"> <% @users.each do |user| %> <li> <%= gravatar_for user, size: 52 %> <%= link_to user.name, user %> </li> <% end %> </ul><%= will_paginate %>

    will_paginate?方法有點小神奇,在 Users 控制器的視圖中,它會自動尋找名為?@users?的對象,然后顯示一個分頁導航鏈接。代碼 9.34 所示的視圖現在還不能正確顯示分頁,因為現在?@users?的值是通過?User.all?方法獲取的,是個數組;而will_paginate?方法需要的是?ActiveRecord::Relation?類對象。will_paginate 提供的?paginate?方法正好可以返回ActiveRecord::Relation?類對象:

    $ rails console >> User.all.class => Array >> User.paginate(page: 1).class => ActiveRecord::Relation

    paginate?方法可以接受一個 Hash 類型的參數,鍵?:page?的值指定第幾頁。User.paginate?方法根據?:page?的值,一次取回一系列的用戶(默認為 30 個)。所以,第一頁顯示的是第 1-30 個用戶,第二頁顯示的是第 31-60 個,等。如果指定的頁數不存在,paginate?會顯示第一頁。

    我們可以把?index?動作中的?all?方法換成?paginate,這樣頁面中就可以顯示分頁導航了,如代碼 9.35 所示。paginate?方法所需的?:page?參數值由?params[:page]?指定,這個?params?元素是由?will_pagenate?自動生成的。

    代碼 9.35?在?index?動作中按分頁取回用戶
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:index, :edit, :update]...def index@users = User.paginate(page: params[:page])end... end

    現在,用戶列表頁面應該可以顯示分頁了,如圖 9.10 所示。(在某些系統中,可能需要重啟 Rails 服務器。)因為我們在用戶列表前后都加入了?will_paginate?方法,所以這兩個地方都會顯示分頁鏈接。

    圖 9.10:顯示了分頁鏈接的用戶列表頁面(/users)

    如果點擊鏈接“2”,或者“Next”,就會顯示第二頁,如圖 9.11 所示。

    圖 9.11:用戶列表的第二頁(/users?page=2)

    你還應該驗證一下測試是否可以通過:

    $ bundle exec rspec spec/

    9.3.4 視圖重構

    用戶列表頁面現在已經可以顯示分頁了,但是有個改進點我不得不介紹一下。Rails 提供了一些很巧妙的方法可以精簡視圖的結構,本小節我們就要利用這些方法重構一下用戶列表頁面。因為我們已經做了很好的測試,所以就可以放手去重構,不用擔心會破壞網站的功能。

    重構的第一步,要把代碼 9.34 中的?li?換成對?render?方法的調用,如代碼 9.36 所示。

    代碼 9.36?重構用戶列表視圖的第一步
    app/views/users/index.html.erb

    <% provide(:title, 'All users') %> <h1>All users</h1><%= will_paginate %><ul class="users"> <% @users.each do |user| %> <%= render user %> <% end %> </ul><%= will_paginate %>

    在上述代碼中,render?的參數不再是指定局部視圖的字符串,而是代表?User?類的?user?變量。6Rails 會自動尋找一個名為_user.html.erb?的局部視圖,我們要手動創建這個視圖,然后寫入代碼 9.37 中的內容。

    代碼 9.37?顯示單一用戶的局部視圖
    app/views/users/_user.html.erb

    <li> <%= gravatar_for user, size: 52 %> <%= link_to user.name, user %> </li>

    這個改進很不錯,不過我們還可以做的更好。我們可以直接把?@users?變量傳遞給?render?方法,如代碼 9.38 所示。

    代碼 9.38?完全重構后的用戶列表視圖
    app/views/users/index.html.erb

    <% provide(:title, 'All users') %> <h1>All users</h1><%= will_paginate %><ul class="users"> <%= render @users %> </ul><%= will_paginate %>

    Rails 會把?@users?當作一系列的?User?對象,遍歷這些對象,然后使用?_user.html.erb?渲染每個對象。所以我們就得到了代碼 9.38 這樣簡潔的代碼。每次重構后,你都應該驗證一下測試組件是否還是可以通過的:

    $ bundle exec rspec spec/

    9.4 刪除用戶

    至此,用戶索引也完成了。符合 REST 架構的Users 資源就只剩下最后一個?destroy?動作了。本節,我們先添加刪除用戶的鏈接(構思圖如圖 9.12 所示),然后再編寫適當的?destroy?動作代碼完成刪除操作。不過,首先我們要先創建管理員級別的用戶,并授權這些用戶進行刪除操作。

    圖 9.12:顯示有刪除鏈接的用戶列表頁面構思圖

    9.4.1 管理員

    我們要通過 User 模型中一個名為?admin?的屬性來判斷用戶是否具有管理員權限。admin?屬性的類型為布爾值,Active Record 會自動生成一個?admin??方法,返回布爾值,判斷用戶是否為管理員。針對?admin?屬性的測試如代碼 9.39 所示。

    代碼 9.39?測試?admin?屬性
    spec/models/user_spec.rb

    require 'spec_helper'describe User do...it { should respond_to(:admin) }it { should respond_to(:authenticate) }it { should be_valid }it { should_not be_admin }describe "with admin attribute set to 'true'" dobefore { @user.toggle!(:admin) }it { should be_admin }end... end

    在上述代碼中我們使用?toggle!?方法把?admin?屬性的值從?false?轉變成?true。it { should be_admin }?這行代碼說明用戶對象應該可以響應?admin??方法(這是 RSpec 對布爾值屬性的一個約定)。

    和之前一樣,我們要使用遷移添加?admin?屬性,在命令行中指定其類型為?boolean:

    $ rails generate migration add_admin_to_users admin:boolean

    這個命令生成的遷移文件(如代碼 9.40 所示)會在 users 表中添加?admin?這一列,得到的數據模型如圖 9.13 所示。

    圖 9.13:添加了?admin?屬性后的 User 模型

    代碼 9.40?為 User 模型添加?admin?屬性所用的遷移文件
    db/migrate/[timestamp]_add_admin_to_users.rb

    class AddAdminToUsers < ActiveRecord::Migrationdef changeadd_column :users, :admin, :boolean, default: falseend end

    注意,在代碼 9.40 中,我們為?add_column?方法指定了?default: false?參數,添加這個參數后用戶默認情況下就不是管理員。(如果沒有指定?default: false,admin?的默認值是?nil,也是“假值”,所以嚴格來說,這個參數不是必須的。不過,指定這個參數,可以更明確地向 Rails 以及代碼的閱讀者表明這段代碼的意圖。)

    然后,我們要在“開發數據庫”中執行遷移操作,還要準備好“測試數據庫”:

    $ bundle exec rake db:migrate $ bundle exec rake db:test:prepare

    和預想的一樣,Rails 可以自動識別?admin?屬性的類型為布爾值,而且自動生成了?admin??方法:

    $ rails console --sandbox >> user = User.first >> user.admin? => false >> user.toggle!(:admin) => true >> user.admin? => true

    執行遷移操作后,針對?admin?屬性的測試應該可以通過了:

    $ bundle exec rspec spec/models/user_spec.rb

    最后,我們要修改一下生成示例用戶的代碼,把第一個用戶設為管理員,如代碼 9.41 所示。

    代碼 9.41?生成示例用戶的代碼,把第一個用戶設為管理員
    lib/tasks/sample_data.rake

    namespace :db dodesc "Fill database with sample data"task populate: :environment doadmin = User.create!(name: "Example User",email: "example@railstutorial.org",password: "foobar",password_confirmation: "foobar")admin.toggle!(:admin)...end end

    之后還要還原數據庫,并且重新生成示例用戶:

    $ bundle exec rake db:reset $ bundle exec rake db:populate $ bundle exec rake db:test:prepare

    attr_accessible?再探

    你可能注意到了,在代碼 9.41 中,我們使用?toggle!(:admin)?把用戶設為管理員,為什么沒有直接在?User.create!?的參數中指定?admin: true?呢?原因是,直接指定?admin: true?不起作用,Rails 就是這樣設計的,只有通過?attr_accessible?指定的屬性才能通過 mass assignment 賦值,而?admin?并不是可訪問的。代碼 9.42 顯示的是當前可訪問的屬性列表,注意其中并沒有?:admin。

    代碼 9.42?User 模型中通過?attr_accessible?指定的可訪問的屬性,其中沒有?:admin?屬性
    app/models/user.rb

    class User < ActiveRecord::Baseattr_accessible :name, :email, :password, :password_confirmation... end

    明確指定可訪問的屬性對網站的安全是很重要的,如果你沒有指定,或者傻傻的把?:admin?也加進去了,那么心懷不軌的用戶就可以發送下面這個?PUT?請求:7

    put /users/17?admin=1

    這個請求會把 id 為 17 的用戶設為管理員,這可是一個很嚴重的安全隱患。鑒于此,最佳的方法是在每個數據模型中都指定可訪問的屬性列表。其實,最好再測試一下各屬性是否是可訪問的,對?:admin?屬性的可訪問性測試留作練習,參見?9.6 節。

    9.4.2?destroy?動作

    編寫完整的 Users 資源還要再添加刪除鏈接和?destroy?動作。我們先在用戶列表頁面每個用戶后面都加入一個刪除鏈接,而且限制只有管理員才能看到這些鏈接。

    編寫針對刪除功能的測試,最好能有個創建管理員的工廠方法,為此,我們可以在預構件中加入一個名為?:admin?的塊,如代碼 9.43 所示。

    代碼 9.43?添加一個創建管理員的工廠方法
    spec/factories.rb

    FactoryGirl.define dofactory :user dosequence(:name) { |n| "Person #{n}" }sequence(:email) { |n| "person_#{n}@example.com"}password "foobar"password_confirmation "foobar"factory :admin doadmin trueendend end

    添加了以上代碼之后,我們就可以在測試中調用?FactoryGirl.create(:admin)?創建管理員用戶了。

    基于安全考慮,普通用戶是看不到刪除用戶鏈接的,所以:

    it { should_not have_link('delete') }

    只有管理員才能看到刪除用戶鏈接,如果管理員點擊了刪除用戶鏈接,該用戶會被刪除,用戶的數量就會減少 1 個:

    it { should have_link('delete', href: user_path(User.first)) } it "should be able to delete another user" doexpect { click_link('delete') }.to change(User, :count).by(-1) end it { should_not have_link('delete', href: user_path(admin)) }

    注意,我們還添加了一個測試,確保管理員不會看到刪除自己的鏈接。針對刪除用戶的完整測試如代碼 9.44 所示。

    代碼 9.44?測試刪除用戶功能
    spec/requests/user_pages_spec.rb

    require 'spec_helper'describe "User pages" dosubject { page }describe "index" dolet(:user) { FactoryGirl.create(:user) }before dosign_in uservisit users_pathendit { should have_selector('title', text: 'All users') }it { should have_selector('h1', text: 'All users') }describe "pagination" do...enddescribe "delete links" doit { should_not have_link('delete') }describe "as an admin user" dolet(:admin) { FactoryGirl.create(:admin) }before dosign_in adminvisit users_pathendit { should have_link('delete', href: user_path(User.first)) }it "should be able to delete another user" doexpect { click_link('delete') }.to change(User, :count).by(-1)endit { should_not have_link('delete', href: user_path(admin)) }endendend end

    然后在視圖中加入代碼 9.45。注意鏈接中的?method: delete?參數,它指明點擊鏈接后發送的是?DELETE?請求。我們還把各鏈接放在了?if?語句中,這樣就只有管理員才能看到刪除用戶鏈接。管理員看到的頁面如圖 9.14 所示。

    代碼 9.45?刪除用戶的鏈接(只有管理員才能看到)
    app/views/users/_user.html.erb

    <li> <%= gravatar_for user, size: 52 %> <%= link_to user.name, user %> <% if current_user.admin? && !current_user?(user) %> | <%= link_to "delete", user, method: :delete, data: { confirm: "You sure?" } %> <% end %> </li>

    圖 9.14:顯示有刪除用戶鏈接的用戶列表頁面(/users)

    瀏覽器不能發送?DELETE?請求,Rails 通過 JavaScript 進行模擬的。也就是說,如果用戶禁用了 JavaScript,那么刪除用戶的鏈接就不可用了。如果必須要支持沒有啟用 JavaScript 的瀏覽器,你可以使用一個發送?POST?請求的表單來模擬?DELETE?請求,這樣即使瀏覽器的 JavaScript 被禁用了,刪除用戶的鏈接還是可用的,更多細節請觀看 RailsCasts 第 77 集《Destroy Without JavaScript》。

    若要刪除用戶的鏈接起作用,我們要定義?destroy?動作(參見表格 7.1)。在?destroy?動作中,先找到要刪除的用戶,使用 Active Record 提供的?destroy?方法刪除這個用戶,然后再轉向用戶列表頁面,如代碼 9.46 所示。

    代碼 9.46?加入?destroy?動作
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:index, :edit, :update, :destroy]before_filter :correct_user, only: [:edit, :update]...def destroyUser.find(params[:id]).destroyflash[:success] = "User destroyed."redirect_to users_pathend... end

    注意上述?destroy?動作中,把?find?方法和?destroy?方法鏈在一起使用了:

    User.find(params[:id]).destroy

    理論上,只有管理員才能看到刪除用戶的鏈接,所以只有管理員才能刪除用戶。但實際上,還是存在一個嚴重的安全隱患:只要攻擊者有足夠的經驗,就可以在命令行中發送?DELETE?請求,刪除網站中的用戶。為了保證網站的安全,我們還要限制對?destroy?動作的訪問,因此我們在測試中不僅要確保只有管理員才能刪除用戶,還要保證其他用戶不能執行刪除操作,如代碼 9.47 所示。注意,和代碼 9.11 中的?put?方法類似,在這段代碼中我們使用?delete?方法向指定的地址(user_path,參見表格 7.1)發送了一個?DELETE?請求。

    代碼 9.47?測試訪問受限的?destroy?動作
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "authorization" do...describe "as non-admin user" dolet(:user) { FactoryGirl.create(:user) }let(:non_admin) { FactoryGirl.create(:user) }before { sign_in non_admin }describe "submitting a DELETE request to the Users#destroy action" dobefore { delete user_path(user) }specify { response.should redirect_to(root_path) }endendend end

    理論上來說,網站中還是有一個安全漏洞,管理員可以發送?DELETE?請求刪除自己。有些人可能會想,這樣的管理員是自作自受。不過作為開發人員,我們最好還是要避免這種情況的發生,具體的實現留作練習,參見?9.6 節。

    你可能已經知道了,我們要使用一個事前過濾器限制對?destroy?動作的訪問,如代碼 9.48 所示。

    代碼 9.48?限制只有管理員才能訪問?destroy?動作的事前過濾器
    app/controllers/users_controller.rb

    class UsersController < ApplicationControllerbefore_filter :signed_in_user, only: [:index, :edit, :update, :destroy]before_filter :correct_user, only: [:edit, :update]before_filter :admin_user, only: :destroy...private...def admin_userredirect_to(root_path) unless current_user.admin?end end

    至此,所有的測試應該都可以通過了,而且 Users 相關的資源,包括控制器、模型和視圖,都已經實現了。

    $ bundle exec rspec spec/

    9.5 小結

    我們用了好幾章來介紹如何實現 Users 資源,在?5.4 節用戶還不能注冊,而現在不僅可以注冊,還可以登錄、退出、查看個人資料、修改設置,還能瀏覽網站中所有的用戶列表,某些用戶甚至可以刪除其他的用戶。

    本書剩下的內容會以這個 Users 資源為基礎(以及相關的權限授權系統),在第十章中為示例程序加入類似 Twitter 的微博功能,在第十一章中實現關注用戶的狀態列表。最后這兩章會介紹幾個 Rails 中最為強大的功能,其中就包括通過?has_many和?has_many through?實現的數據模型關聯。

    在繼續閱讀之前,先把本章所做的改動合并到主分支:

    $ git add . $ git commit -m "Finish user edit, update, index, and destroy actions" $ git checkout master $ git merge updating-users

    你還可以將程序部署到“生產環境”,再生成示例用戶(在此之前要使用?pg:reset?命令還原“生產數據庫”):

    $ git push heroku $ heroku pg:reset DATABASE $ heroku run rake db:migrate $ heroku run rake db:populate

    (如果你忘了 Heroku 程序的名字,可以直接運行?heroku pg:reset DATABASE,Heroku 會告訴你程序的名字。)

    還有一點需要注意,本章我們加入了程序所需的最后一個 gem,最終的?Gemfile?如代碼 9.49 所示。

    代碼 9.49?示例程序所需?Gemfile?的最終版本

    source 'https://rubygems.org'gem 'rails', '3.2.13' gem 'bootstrap-sass', '2.0.0' gem 'bcrypt-ruby', '3.0.1' gem 'faker', '1.0.1' gem 'will_paginate', '3.0.3' gem 'bootstrap-will_paginate', '0.0.6'group :development dogem 'sqlite3', '1.3.5'gem 'annotate', '?> 2.4.1.beta' end# Gems used only for assets and not required # in production environments by default. group :assets dogem 'sass-rails', '3.2.4'gem 'coffee-rails', '3.2.2'gem 'uglifier', '1.2.3' endgem 'jquery-rails', '2.0.0'group :test, :development dogem 'rspec-rails', '2.10.0'gem 'guard-rspec', '0.5.5'gem 'guard-spork', '0.3.2'gem 'spork', '0.9.0' endgroup :test dogem 'capybara', '1.1.2'gem 'factory_girl_rails', '1.4.0'gem 'cucumber-rails', '1.2.1', require: falsegem 'database_cleaner', '0.7.0' endgroup :production dogem 'pg', '0.12.2' end

    9.6 練習

  • 參照代碼 10.8,編寫一個,測試確保 User 模型的?admin?屬性是不可訪問的。確保測試先是紅色的,然后才會變綠。(提示:先要把?admin?加入可訪問屬性列表中。)
  • 把代碼 9.3 中修改 Gravatar 頭像的鏈接(“change”),使鏈接在新窗口(或新標簽)中打開。提示:請搜索,你會發現一個很常用的方法,涉及到?_blank?的用法。
  • 現在針對身份驗證系統的測試會確保用戶登錄后能看到“Profile”和“Settings”等導航鏈接。增加一個測試,確保用戶未登錄時看不到這些導航鏈接。
  • 在測試中盡量多的使用代碼 9.6 中的?sign_in?幫助方法。
  • 使用代碼 9.50 中的代碼重構?new.html.erb?和?edit.html.erb?中的表單。注意,你要明確的傳入?f?這個表單變量,如代碼 9.51 所示。你還要修改相應的測試,因為表單已經不完全一樣了。仔細的查找修改前后表單的差異,據此修改測試。
  • 已經登錄的用戶就沒必要再訪問 Users 控制器的?new?和?create?動作了,修改程序,如果登錄后的用戶訪問這些地址時,轉向到網站首頁。
  • 在網站的布局中插入一些?Rails API8?中介紹的方法,了解一下?request?對象。(如果遇到了困難,可以參考代碼 7.1。)
  • 編寫一個測試,確保友好轉向只在第一次轉向指定的地址,其后再登錄的話就轉向默認設定的地址(如資料頁面)。代碼 9.52 是個提示,其實也就是所需的代碼。
  • 修改?destroy?動作,避免管理員刪除自己。(先編寫測試。)
  • 代碼 9.50?注冊和編輯表單字段的局部視圖
    app/views/users/_fields.html.erb

    <%= render 'shared/error_messages' %><%= f.label :name %> <%= f.text_field :name %><%= f.label :email %> <%= f.text_field :email %><%= f.label :password %> <%= f.password_field :password %><%= f.label :password_confirmation, "Confirm Password" %> <%= f.password_field :password_confirmation %>

    代碼 9.51?使用局部視圖后的注冊頁面視圖
    app/views/users/new.html.erb

    <% provide(:title, 'Sign up') %> <h1>Sign up</h1><div class="row"> <div class="span6 offset3"> <%= form_for(@user) do |f| %> <%= render 'fields', f: f %> <%= f.submit "Create my account", class: "btn btn-large btn-primary" %> <% end %> </div> </div>

    代碼 9.52?測試友好的轉向后,只能轉向到默認的頁面
    spec/requests/authentication_pages_spec.rb

    require 'spec_helper'describe "Authentication" do...describe "authorization" dodescribe "for non-signed-in users" do...describe "when attempting to visit a protected page" dobefore dovisit edit_user_path(user)fill_in "Email", with: user.emailfill_in "Password", with: user.passwordclick_button "Sign in"enddescribe "after signing in" doit "should render the desired protected page" dopage.should have_selector('title', text: 'Edit user')enddescribe "when signing in again" dobefore dovisit signin_pathfill_in "Email", with: user.emailfill_in "Password", with: user.passwordclick_button "Sign in"endit "should render the default (profile) page" dopage.should have_selector('title', text: user.name)endendendendend...end end ? 第八章 登錄和退出第十章 用戶的微博 ?
  • 圖片來自?http://www.flickr.com/photos/sashawolff/4598355045/???
  • Gravatar 會把這個地址轉向 http://en.gravatar.com/emails,我去掉了前面的 en,這樣選擇其他語言的用戶就會自動轉向相應的頁面了。???
  • 不要擔心實現的細節。具體的實現方式是 Rails 框架的開發者需要關注的,作為 Rails 程序開發者則無需關心。???
  • 實現的代碼來自 thoughtbot 的 Clearance gem。???
  • 嬰兒的圖片來自????
  • 我們并不是一定要使用?user,遍歷時如果用的是?@users.each do |foobar|,那么就要用?render foobar。這里的關鍵是要知道對象的類,也就是?User。???
  • 類似 curl 的命令行工具可以發送這種?PUT?請求。???
  • http://api.rubyonrails.org/v3.2.0/classes/ActionDispatch/Request.html???
  • from:?http://yongyuan.name/pcvwithpython/chapter9.html

    總結

    以上是生活随笔為你收集整理的Python计算机视觉:第九章 图像分割的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    精品厕所偷拍各类美女tp嘘嘘 | 免费国产黄网站在线观看 | 一个人免费观看的www视频 | 国产无遮挡吃胸膜奶免费看 | 久久精品女人的天堂av | 少妇人妻偷人精品无码视频 | 亚洲日本一区二区三区在线 | 无码帝国www无码专区色综合 | 搡女人真爽免费视频大全 | 久久综合网欧美色妞网 | 玩弄少妇高潮ⅹxxxyw | 欧美丰满少妇xxxx性 | 亚洲成a人一区二区三区 | 无码人妻精品一区二区三区下载 | 麻豆精产国品 | 国产免费无码一区二区视频 | yw尤物av无码国产在线观看 | 亚洲乱码日产精品bd | 熟女少妇在线视频播放 | 国产人成高清在线视频99最全资源 | 久久精品国产精品国产精品污 | 十八禁视频网站在线观看 | 无码av最新清无码专区吞精 | 少妇性荡欲午夜性开放视频剧场 | 人人妻人人澡人人爽欧美一区 | 无码一区二区三区在线观看 | 99久久精品无码一区二区毛片 | 亚洲综合另类小说色区 | 色狠狠av一区二区三区 | 一本无码人妻在中文字幕免费 | 中文精品久久久久人妻不卡 | 国产美女精品一区二区三区 | 精品国产精品久久一区免费式 | 无码av免费一区二区三区试看 | 国产综合在线观看 | 亚洲欧美中文字幕5发布 | 亚洲精品一区二区三区大桥未久 | 国产香蕉尹人视频在线 | 性欧美熟妇videofreesex | 亚洲 另类 在线 欧美 制服 | 国产亚洲精品精品国产亚洲综合 | 国产精品久久国产精品99 | 日韩欧美中文字幕在线三区 | 亚洲一区二区观看播放 | 久久国语露脸国产精品电影 | 福利一区二区三区视频在线观看 | 亚洲国产精品一区二区美利坚 | 色综合天天综合狠狠爱 | 亚洲熟妇色xxxxx欧美老妇y | 麻豆精品国产精华精华液好用吗 | 亚洲精品一区二区三区大桥未久 | 呦交小u女精品视频 | 亚洲毛片av日韩av无码 | 国产9 9在线 | 中文 | 亚洲国产av精品一区二区蜜芽 | 国产精品久久久av久久久 | 高清不卡一区二区三区 | 国产精品怡红院永久免费 | 亚洲日韩一区二区 | 老司机亚洲精品影院无码 | 一本无码人妻在中文字幕免费 | 亚洲国产精品一区二区第一页 | 少妇的肉体aa片免费 | 国产亚洲美女精品久久久2020 | 最新版天堂资源中文官网 | 成人无码精品一区二区三区 | 国产精品久久久av久久久 | 成人无码影片精品久久久 | 成人性做爰aaa片免费看不忠 | 国产无遮挡又黄又爽又色 | 久久久婷婷五月亚洲97号色 | 国产精品人人爽人人做我的可爱 | 97精品人妻一区二区三区香蕉 | 亚洲国产av美女网站 | 四虎影视成人永久免费观看视频 | 无码精品人妻一区二区三区av | 一本久久伊人热热精品中文字幕 | 欧美性猛交内射兽交老熟妇 | 久久久久久九九精品久 | 亚洲精品久久久久中文第一幕 | 久久无码中文字幕免费影院蜜桃 | 国产精品久久国产三级国 | 一个人看的www免费视频在线观看 | 蜜桃无码一区二区三区 | 国产亚洲精品久久久久久 | 亚洲中文字幕在线无码一区二区 | 野狼第一精品社区 | 麻豆精品国产精华精华液好用吗 | 色五月丁香五月综合五月 | 精品乱码久久久久久久 | 最新版天堂资源中文官网 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 成人精品天堂一区二区三区 | 国产无遮挡又黄又爽免费视频 | 国产婷婷色一区二区三区在线 | 自拍偷自拍亚洲精品10p | 丰满人妻一区二区三区免费视频 | 日韩人妻无码中文字幕视频 | 天堂一区人妻无码 | 精品无码国产自产拍在线观看蜜 | 99视频精品全部免费免费观看 | 丝袜 中出 制服 人妻 美腿 | 久青草影院在线观看国产 | 久9re热视频这里只有精品 | 久久国产精品萌白酱免费 | 国产av人人夜夜澡人人爽麻豆 | 国产黄在线观看免费观看不卡 | 亚洲熟妇自偷自拍另类 | 亚洲成在人网站无码天堂 | 久久午夜夜伦鲁鲁片无码免费 | 国产激情艳情在线看视频 | 中文精品久久久久人妻不卡 | 久久午夜无码鲁丝片午夜精品 | 荡女精品导航 | 欧美黑人性暴力猛交喷水 | 国产精品久久久久久亚洲毛片 | 日本欧美一区二区三区乱码 | 成在人线av无码免费 | 亚洲大尺度无码无码专区 | 国产一区二区三区日韩精品 | 高潮毛片无遮挡高清免费视频 | 学生妹亚洲一区二区 | 久久久久久久女国产乱让韩 | 精品国产国产综合精品 | 国产精品第一区揄拍无码 | 亚洲中文字幕乱码av波多ji | 综合人妻久久一区二区精品 | 夜夜高潮次次欢爽av女 | 伊人色综合久久天天小片 | 偷窥日本少妇撒尿chinese | 全球成人中文在线 | 亚洲一区二区三区国产精华液 | 国产在线无码精品电影网 | 中文字幕人妻无码一夲道 | 妺妺窝人体色www在线小说 | 扒开双腿疯狂进出爽爽爽视频 | 无遮无挡爽爽免费视频 | 3d动漫精品啪啪一区二区中 | 无码免费一区二区三区 | 欧美精品国产综合久久 | 国产精品99爱免费视频 | 亚洲精品成a人在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲综合色区中文字幕 | 亚洲精品成a人在线观看 | 亚洲综合色区中文字幕 | 国产乱码精品一品二品 | 兔费看少妇性l交大片免费 | 国产精品二区一区二区aⅴ污介绍 | 亚洲熟妇自偷自拍另类 | 亚洲区欧美区综合区自拍区 | 久久精品国产亚洲精品 | 在线精品亚洲一区二区 | 国产在线精品一区二区三区直播 | 成人一区二区免费视频 | 婷婷色婷婷开心五月四房播播 | 欧美丰满熟妇xxxx性ppx人交 | 男女性色大片免费网站 | 中文字幕日韩精品一区二区三区 | 国产免费久久精品国产传媒 | 亚洲成av人在线观看网址 | 日欧一片内射va在线影院 | 日韩av无码一区二区三区 | 十八禁真人啪啪免费网站 | 国产偷国产偷精品高清尤物 | 中文字幕乱码人妻无码久久 | 中文字幕乱码人妻无码久久 | 老子影院午夜精品无码 | 国产精品高潮呻吟av久久 | 奇米影视888欧美在线观看 | 两性色午夜免费视频 | 秋霞成人午夜鲁丝一区二区三区 | 国产婷婷色一区二区三区在线 | 无遮挡啪啪摇乳动态图 | 色综合天天综合狠狠爱 | 99久久人妻精品免费二区 | 国内精品人妻无码久久久影院 | 欧美日韩一区二区综合 | 久久久久亚洲精品男人的天堂 | 欧洲欧美人成视频在线 | 水蜜桃色314在线观看 | 国产av一区二区三区最新精品 | 亚洲小说图区综合在线 | 免费国产成人高清在线观看网站 | 亚洲а∨天堂久久精品2021 | 四十如虎的丰满熟妇啪啪 | 国产成人精品视频ⅴa片软件竹菊 | 国产精品爱久久久久久久 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲精品一区国产 | 天天做天天爱天天爽综合网 | 欧美性生交活xxxxxdddd | 蜜桃视频韩日免费播放 | 精品无码国产自产拍在线观看蜜 | 狂野欧美性猛xxxx乱大交 | 国产亚洲精品久久久久久大师 | 成人精品视频一区二区三区尤物 | 女人被爽到呻吟gif动态图视看 | 乌克兰少妇xxxx做受 | 帮老师解开蕾丝奶罩吸乳网站 | 性欧美熟妇videofreesex | 国产精品无码一区二区三区不卡 | 午夜精品久久久久久久 | 久久精品成人欧美大片 | 中文无码伦av中文字幕 | 色偷偷人人澡人人爽人人模 | 又黄又爽又色的视频 | 国内老熟妇对白xxxxhd | 久久国产精品偷任你爽任你 | 精品国产青草久久久久福利 | 久久久精品成人免费观看 | 暴力强奷在线播放无码 | 亚洲无人区午夜福利码高清完整版 | 久久久久久亚洲精品a片成人 | 丰满人妻一区二区三区免费视频 | 亚洲gv猛男gv无码男同 | 亚洲一区二区三区在线观看网站 | 亚洲码国产精品高潮在线 | 亚洲精品国偷拍自产在线麻豆 | 少妇久久久久久人妻无码 | 成人免费视频一区二区 | 亚洲欧洲中文日韩av乱码 | 天天躁夜夜躁狠狠是什么心态 | 国产精品丝袜黑色高跟鞋 | 强伦人妻一区二区三区视频18 | 扒开双腿疯狂进出爽爽爽视频 | 2019nv天堂香蕉在线观看 | 荫蒂被男人添的好舒服爽免费视频 | 麻豆av传媒蜜桃天美传媒 | 国产色视频一区二区三区 | 少妇激情av一区二区 | 无遮挡啪啪摇乳动态图 | 中文字幕人妻无码一区二区三区 | 欧美激情内射喷水高潮 | 久久久久99精品国产片 | 99er热精品视频 | 狠狠综合久久久久综合网 | 欧美国产日产一区二区 | 学生妹亚洲一区二区 | 高清不卡一区二区三区 | 三级4级全黄60分钟 | 国产亚洲tv在线观看 | 国产女主播喷水视频在线观看 | 国产网红无码精品视频 | 免费中文字幕日韩欧美 | 亚洲乱亚洲乱妇50p | 国产一区二区三区四区五区加勒比 | 日本大香伊一区二区三区 | 伊人久久婷婷五月综合97色 | 国产人妻人伦精品1国产丝袜 | 欧美精品一区二区精品久久 | 一本久道久久综合婷婷五月 | 麻豆国产人妻欲求不满 | 一本大道久久东京热无码av | 亚洲 另类 在线 欧美 制服 | 久久久久人妻一区精品色欧美 | 欧美国产日产一区二区 | 99er热精品视频 | 亚洲の无码国产の无码步美 | 午夜成人1000部免费视频 | 永久免费观看美女裸体的网站 | www一区二区www免费 | 国产成人久久精品流白浆 | 色狠狠av一区二区三区 | 人人爽人人爽人人片av亚洲 | 高潮喷水的毛片 | 国产精品多人p群无码 | 性欧美videos高清精品 | 人人澡人人妻人人爽人人蜜桃 | 真人与拘做受免费视频一 | 国产亚洲精品久久久久久国模美 | 亚洲色在线无码国产精品不卡 | √8天堂资源地址中文在线 | 天堂一区人妻无码 | 国产成人人人97超碰超爽8 | 精品久久综合1区2区3区激情 | 欧美成人家庭影院 | 给我免费的视频在线观看 | 无码人妻精品一区二区三区不卡 | 天天av天天av天天透 | 国产精品久久久久9999小说 | 999久久久国产精品消防器材 | 思思久久99热只有频精品66 | 狠狠色欧美亚洲狠狠色www | 欧美xxxxx精品 | 亚洲国产成人av在线观看 | 丝袜美腿亚洲一区二区 | 老熟妇乱子伦牲交视频 | 色狠狠av一区二区三区 | 国产婷婷色一区二区三区在线 | 麻豆人妻少妇精品无码专区 | 国内少妇偷人精品视频 | 午夜福利一区二区三区在线观看 | 红桃av一区二区三区在线无码av | 99er热精品视频 | 亚洲一区二区三区香蕉 | 亚洲欧美日韩综合久久久 | 亚洲精品国产品国语在线观看 | 久久精品国产大片免费观看 | 国产真实乱对白精彩久久 | 亚拍精品一区二区三区探花 | 免费看男女做好爽好硬视频 | 欧美日本免费一区二区三区 | 久久人妻内射无码一区三区 | 日日碰狠狠躁久久躁蜜桃 | 中文字幕精品av一区二区五区 | 麻豆国产97在线 | 欧洲 | 国产精品久久久av久久久 | 成年美女黄网站色大免费视频 | 国产乱人偷精品人妻a片 | 给我免费的视频在线观看 | 欧洲熟妇精品视频 | 搡女人真爽免费视频大全 | 麻花豆传媒剧国产免费mv在线 | 成人精品视频一区二区 | 中文字幕无码视频专区 | 国产97人人超碰caoprom | 无人区乱码一区二区三区 | 日本精品久久久久中文字幕 | 2019nv天堂香蕉在线观看 | 亚洲日韩一区二区三区 | 亚洲日韩一区二区三区 | 免费无码肉片在线观看 | 欧美怡红院免费全部视频 | 又大又硬又黄的免费视频 | 亚洲а∨天堂久久精品2021 | 伊人久久大香线蕉av一区二区 | 欧美国产亚洲日韩在线二区 | 人妻人人添人妻人人爱 | 久久综合狠狠综合久久综合88 | 午夜时刻免费入口 | 一本久道高清无码视频 | 欧美变态另类xxxx | 一本久道久久综合婷婷五月 | 亚洲自偷自拍另类第1页 | 日本xxxx色视频在线观看免费 | 人妻少妇被猛烈进入中文字幕 | 亚洲精品国产第一综合99久久 | 成人三级无码视频在线观看 | 久久天天躁夜夜躁狠狠 | 欧洲欧美人成视频在线 | 欧美熟妇另类久久久久久多毛 | 曰韩少妇内射免费播放 | 2020最新国产自产精品 | 精品国偷自产在线 | 日韩精品一区二区av在线 | 中文字幕av无码一区二区三区电影 | 久久国语露脸国产精品电影 | 国产亚洲欧美日韩亚洲中文色 | 亚洲成av人影院在线观看 | 夜夜高潮次次欢爽av女 | 日本免费一区二区三区最新 | 永久免费观看国产裸体美女 | 日本熟妇大屁股人妻 | 熟妇女人妻丰满少妇中文字幕 | 老熟女重囗味hdxx69 | 男女爱爱好爽视频免费看 | 日韩无套无码精品 | 国产精品毛片一区二区 | 爽爽影院免费观看 | 7777奇米四色成人眼影 | 亚洲精品无码国产 | 久久久久亚洲精品男人的天堂 | 国产精品久久久一区二区三区 | 一本久道久久综合婷婷五月 | 日本在线高清不卡免费播放 | 99精品久久毛片a片 | 亚洲乱码日产精品bd | 激情内射亚州一区二区三区爱妻 | 亚洲gv猛男gv无码男同 | 99精品国产综合久久久久五月天 | 久久天天躁狠狠躁夜夜免费观看 | 初尝人妻少妇中文字幕 | 亚洲色无码一区二区三区 | 精品厕所偷拍各类美女tp嘘嘘 | 成人av无码一区二区三区 | 成人欧美一区二区三区黑人 | 男女超爽视频免费播放 | 久久综合激激的五月天 | 亚洲精品成a人在线观看 | 亚洲中文字幕乱码av波多ji | 欧美freesex黑人又粗又大 | 97夜夜澡人人爽人人喊中国片 | 亚洲毛片av日韩av无码 | 疯狂三人交性欧美 | 领导边摸边吃奶边做爽在线观看 | 正在播放老肥熟妇露脸 | 亚洲人成影院在线无码按摩店 | 精品亚洲韩国一区二区三区 | 亚洲综合无码久久精品综合 | 亚洲日本va中文字幕 | 无码av最新清无码专区吞精 | 狠狠cao日日穞夜夜穞av | 又大又黄又粗又爽的免费视频 | 综合网日日天干夜夜久久 | 国产亚洲tv在线观看 | 久久综合网欧美色妞网 | 一本大道久久东京热无码av | 国产成人av免费观看 | 精品国产麻豆免费人成网站 | 蜜臀av无码人妻精品 | 老熟妇乱子伦牲交视频 | 免费中文字幕日韩欧美 | 亚洲精品综合一区二区三区在线 | 日日碰狠狠丁香久燥 | 俺去俺来也www色官网 | 日韩欧美群交p片內射中文 | 国产一区二区三区日韩精品 | 麻豆md0077饥渴少妇 | 日本免费一区二区三区最新 | 人人妻人人藻人人爽欧美一区 | 人人澡人人妻人人爽人人蜜桃 | 久久99精品国产麻豆蜜芽 | 久久综合狠狠综合久久综合88 | 国产精品久久久久影院嫩草 | 国产9 9在线 | 中文 | 国产精品久久久 | 色综合久久88色综合天天 | 国产av人人夜夜澡人人爽麻豆 | 亚洲 欧美 激情 小说 另类 | 国内精品一区二区三区不卡 | 国产乱人伦偷精品视频 | 国产一区二区三区日韩精品 | 国精产品一品二品国精品69xx | 欧美自拍另类欧美综合图片区 | 色婷婷综合中文久久一本 | 欧美人与禽zoz0性伦交 | 国产精品嫩草久久久久 | 麻豆国产97在线 | 欧洲 | 又大又硬又黄的免费视频 | 国语自产偷拍精品视频偷 | 日本一卡二卡不卡视频查询 | 夜夜影院未满十八勿进 | 动漫av网站免费观看 | 人妻尝试又大又粗久久 | 成熟人妻av无码专区 | 亚洲自偷精品视频自拍 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产在线无码精品电影网 | 免费无码av一区二区 | 亚洲欧美国产精品久久 | 影音先锋中文字幕无码 | 丝袜足控一区二区三区 | 一个人看的www免费视频在线观看 | 日韩精品无码一区二区中文字幕 | 国产成人综合色在线观看网站 | 日韩少妇内射免费播放 | 亚洲精品久久久久久久久久久 | 国产手机在线αⅴ片无码观看 | 性欧美牲交xxxxx视频 | 撕开奶罩揉吮奶头视频 | 伊人久久婷婷五月综合97色 | 在线 国产 欧美 亚洲 天堂 | 久久久中文久久久无码 | 日日摸天天摸爽爽狠狠97 | 色老头在线一区二区三区 | 欧美阿v高清资源不卡在线播放 | 麻豆国产丝袜白领秘书在线观看 | a在线亚洲男人的天堂 | 中文无码成人免费视频在线观看 | 久久99精品国产.久久久久 | 中文无码成人免费视频在线观看 | 日日麻批免费40分钟无码 | 亚洲阿v天堂在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 无码国内精品人妻少妇 | 国产亚洲精品久久久久久久久动漫 | 又粗又大又硬又长又爽 | 亚洲欧美日韩综合久久久 | 国产精品99爱免费视频 | 动漫av网站免费观看 | 午夜熟女插插xx免费视频 | 美女极度色诱视频国产 | 国产区女主播在线观看 | 一本色道久久综合狠狠躁 | 午夜成人1000部免费视频 | www一区二区www免费 | 2020久久香蕉国产线看观看 | 日本熟妇人妻xxxxx人hd | 老熟女乱子伦 | 国产激情综合五月久久 | 国产一区二区不卡老阿姨 | 国内精品一区二区三区不卡 | 日日麻批免费40分钟无码 | 亚洲小说图区综合在线 | 日韩少妇白浆无码系列 | 在线欧美精品一区二区三区 | 四虎国产精品一区二区 | 国产精华av午夜在线观看 | 精品国精品国产自在久国产87 | 亚洲精品综合一区二区三区在线 | 亚洲精品久久久久久久久久久 | 青草青草久热国产精品 | 97精品人妻一区二区三区香蕉 | 日韩精品a片一区二区三区妖精 | 国产成人综合美国十次 | 性啪啪chinese东北女人 | 无码av中文字幕免费放 | 撕开奶罩揉吮奶头视频 | 国产成人午夜福利在线播放 | 蜜臀av无码人妻精品 | 亚洲の无码国产の无码影院 | 国产精品va在线观看无码 | 色综合视频一区二区三区 | 中文字幕人妻无码一区二区三区 | 欧美黑人性暴力猛交喷水 | 精品国偷自产在线 | 亚洲一区av无码专区在线观看 | a在线观看免费网站大全 | 国产人妖乱国产精品人妖 | 激情国产av做激情国产爱 | 夜精品a片一区二区三区无码白浆 | 中文字幕av伊人av无码av | 国产又爽又黄又刺激的视频 | 天天拍夜夜添久久精品 | 色窝窝无码一区二区三区色欲 | 男女爱爱好爽视频免费看 | 又大又硬又爽免费视频 | 久久精品中文字幕一区 | 日韩av无码一区二区三区 | 久久综合香蕉国产蜜臀av | 国产片av国语在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 国产色精品久久人妻 | 国产亚洲精品精品国产亚洲综合 | 国产精品办公室沙发 | 国产精品第一区揄拍无码 | 欧美丰满熟妇xxxx性ppx人交 | 老太婆性杂交欧美肥老太 | yw尤物av无码国产在线观看 | 日韩人妻少妇一区二区三区 | 亚洲国产成人a精品不卡在线 | 人妻体内射精一区二区三四 | 国产九九九九九九九a片 | 亚洲啪av永久无码精品放毛片 | 日本一卡2卡3卡四卡精品网站 | 中文字幕人妻无码一夲道 | 欧美亚洲日韩国产人成在线播放 | 人人妻人人澡人人爽人人精品浪潮 | 99精品视频在线观看免费 | 国产在线一区二区三区四区五区 | 色老头在线一区二区三区 | 乱人伦人妻中文字幕无码 | 欧美变态另类xxxx | 性做久久久久久久免费看 | 国产乱码精品一品二品 | 未满成年国产在线观看 | 亚洲色偷偷偷综合网 | 国产麻豆精品一区二区三区v视界 | 无码一区二区三区在线 | 无码人妻丰满熟妇区毛片18 | 日本成熟视频免费视频 | 熟女体下毛毛黑森林 | 国产超级va在线观看视频 | 婷婷综合久久中文字幕蜜桃三电影 | 精品人妻av区 | 国产精品无码永久免费888 | 日韩少妇内射免费播放 | 四虎国产精品免费久久 | 欧洲vodafone精品性 | 久久久久久av无码免费看大片 | www国产亚洲精品久久网站 | 欧美野外疯狂做受xxxx高潮 | 欧美zoozzooz性欧美 | 妺妺窝人体色www在线小说 | 一本加勒比波多野结衣 | 风流少妇按摩来高潮 | 亚洲国产精品久久久天堂 | 中国大陆精品视频xxxx | 色综合久久久无码中文字幕 | 强开小婷嫩苞又嫩又紧视频 | 欧美自拍另类欧美综合图片区 | 成人精品视频一区二区三区尤物 | 狂野欧美性猛xxxx乱大交 | 亚洲精品国偷拍自产在线麻豆 | 露脸叫床粗话东北少妇 | 76少妇精品导航 | 欧美丰满熟妇xxxx | 欧美自拍另类欧美综合图片区 | 久久精品国产精品国产精品污 | 亚洲男人av香蕉爽爽爽爽 | √天堂资源地址中文在线 | 国产人妻精品一区二区三区 | 亚洲国产欧美国产综合一区 | 亚洲男人av天堂午夜在 | 无码福利日韩神码福利片 | 国产精品久久久久久亚洲影视内衣 | 亚洲理论电影在线观看 | 女人色极品影院 | 日韩精品a片一区二区三区妖精 | 国产精品鲁鲁鲁 | 欧美日韩一区二区综合 | 国产绳艺sm调教室论坛 | 亚洲国产日韩a在线播放 | 在线观看国产一区二区三区 | 两性色午夜免费视频 | 曰本女人与公拘交酡免费视频 | 久久天天躁夜夜躁狠狠 | 黑人大群体交免费视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 三级4级全黄60分钟 | 国产成人无码区免费内射一片色欲 | 欧美刺激性大交 | 扒开双腿吃奶呻吟做受视频 | 人妻互换免费中文字幕 | 欧美国产日韩亚洲中文 | 亚洲欧洲日本综合aⅴ在线 | 日韩av无码一区二区三区不卡 | 无码国模国产在线观看 | 亚洲中文字幕va福利 | 亚洲色大成网站www | 久久亚洲日韩精品一区二区三区 | 欧美日韩视频无码一区二区三 | 99re在线播放 | 性开放的女人aaa片 | 国内老熟妇对白xxxxhd | 日日天干夜夜狠狠爱 | 久久精品中文字幕一区 | 日本精品少妇一区二区三区 | 国产亚洲精品久久久久久国模美 | 亚洲乱码国产乱码精品精 | 老熟妇仑乱视频一区二区 | 中文字幕久久久久人妻 | 欧美老妇交乱视频在线观看 | 精品国产成人一区二区三区 | 乌克兰少妇性做爰 | 成人aaa片一区国产精品 | 亚洲一区二区三区偷拍女厕 | 黄网在线观看免费网站 | 国产精品18久久久久久麻辣 | 亚洲精品国产精品乱码视色 | 国产一区二区三区四区五区加勒比 | 国产午夜精品一区二区三区嫩草 | 亚洲日韩av片在线观看 | 性做久久久久久久免费看 | 无码一区二区三区在线观看 | 国产电影无码午夜在线播放 | 色综合久久中文娱乐网 | 中文无码成人免费视频在线观看 | 国产xxx69麻豆国语对白 | 久久久久99精品国产片 | 天堂久久天堂av色综合 | 丰满少妇弄高潮了www | 国产va免费精品观看 | 亚洲人成网站在线播放942 | 日日躁夜夜躁狠狠躁 | 色婷婷综合激情综在线播放 | 国产精品丝袜黑色高跟鞋 | 欧美三级不卡在线观看 | 领导边摸边吃奶边做爽在线观看 | 日韩欧美群交p片內射中文 | 久久精品中文字幕一区 | 国产精华av午夜在线观看 | 久久综合香蕉国产蜜臀av | 欧美人与禽zoz0性伦交 | 成人综合网亚洲伊人 | 欧美第一黄网免费网站 | 国产亚洲精品久久久久久久久动漫 | 老司机亚洲精品影院无码 | 蜜桃av抽搐高潮一区二区 | 最新国产乱人伦偷精品免费网站 | 99久久无码一区人妻 | 欧美黑人乱大交 | 日本一区二区三区免费播放 | 久久无码中文字幕免费影院蜜桃 | 免费人成在线观看网站 | 内射欧美老妇wbb | 性做久久久久久久免费看 | 老司机亚洲精品影院 | 国产熟妇高潮叫床视频播放 | 国产成人精品视频ⅴa片软件竹菊 | 精品国产av色一区二区深夜久久 | 精品国产青草久久久久福利 | 精品久久久久久亚洲精品 | 午夜性刺激在线视频免费 | 久久久久成人片免费观看蜜芽 | 久久午夜无码鲁丝片秋霞 | 国产色精品久久人妻 | 国产在线aaa片一区二区99 | 亚洲精品无码人妻无码 | 六十路熟妇乱子伦 | 国产精品无码成人午夜电影 | 日韩精品乱码av一区二区 | 欧美国产亚洲日韩在线二区 | 一本无码人妻在中文字幕免费 | 久久亚洲日韩精品一区二区三区 | 色婷婷久久一区二区三区麻豆 | 狠狠综合久久久久综合网 | 亚洲成av人在线观看网址 | 亚洲人成影院在线无码按摩店 | 久久99精品久久久久婷婷 | 久久99热只有频精品8 | av无码电影一区二区三区 | 激情综合激情五月俺也去 | 曰本女人与公拘交酡免费视频 | 国产99久久精品一区二区 | 国产性生大片免费观看性 | 久久99精品国产.久久久久 | 伊人久久大香线蕉av一区二区 | 国产片av国语在线观看 | 性欧美熟妇videofreesex | 狠狠噜狠狠狠狠丁香五月 | 亚洲一区二区三区播放 | 亚洲成a人片在线观看日本 | 国产日产欧产精品精品app | 日韩在线不卡免费视频一区 | 黑人巨大精品欧美黑寡妇 | 亚洲精品国产a久久久久久 | 色婷婷欧美在线播放内射 | 免费无码的av片在线观看 | 天下第一社区视频www日本 | 乱人伦中文视频在线观看 | 亚洲成av人在线观看网址 | 亚洲精品国产精品乱码不卡 | 久久综合给合久久狠狠狠97色 | 中文无码成人免费视频在线观看 | 人妻少妇被猛烈进入中文字幕 | 国产亚洲精品久久久久久大师 | 国产成人人人97超碰超爽8 | 熟妇人妻无码xxx视频 | 在线a亚洲视频播放在线观看 | 久久久久免费精品国产 | 中文字幕人妻无码一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 色老头在线一区二区三区 | 亚洲一区二区三区无码久久 | 无码帝国www无码专区色综合 | 美女黄网站人色视频免费国产 | 夜精品a片一区二区三区无码白浆 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久精品国产99精品亚洲 | 国产麻豆精品精东影业av网站 | 国产乱子伦视频在线播放 | 国语自产偷拍精品视频偷 | 国产一区二区三区影院 | 男女性色大片免费网站 | 精品国产福利一区二区 | 在线成人www免费观看视频 | 久久久精品欧美一区二区免费 | 欧美高清在线精品一区 | 麻豆国产丝袜白领秘书在线观看 | 欧美日韩亚洲国产精品 | 久久精品国产一区二区三区肥胖 | 又大又黄又粗又爽的免费视频 | 嫩b人妻精品一区二区三区 | 成人无码精品一区二区三区 | 久久97精品久久久久久久不卡 | 噜噜噜亚洲色成人网站 | 夜夜夜高潮夜夜爽夜夜爰爰 | 日欧一片内射va在线影院 | 日韩欧美中文字幕公布 | 亚洲区小说区激情区图片区 | а√资源新版在线天堂 | 亚洲精品中文字幕乱码 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲爆乳精品无码一区二区三区 | 久久99精品国产麻豆蜜芽 | 欧美日韩久久久精品a片 | 欧洲欧美人成视频在线 | 久久亚洲日韩精品一区二区三区 | 女高中生第一次破苞av | 欧美人与禽猛交狂配 | 日韩精品a片一区二区三区妖精 | 四虎永久在线精品免费网址 | 成年美女黄网站色大免费全看 | 亚洲色大成网站www | 强开小婷嫩苞又嫩又紧视频 | а天堂中文在线官网 | 免费网站看v片在线18禁无码 | 中文字幕亚洲情99在线 | 日日天日日夜日日摸 | 午夜福利一区二区三区在线观看 | 亚洲の无码国产の无码步美 | 图片区 小说区 区 亚洲五月 | 无遮挡国产高潮视频免费观看 | 久久99国产综合精品 | 女人被男人躁得好爽免费视频 | 性色欲情网站iwww九文堂 | 久久久久久av无码免费看大片 | 日韩 欧美 动漫 国产 制服 | 初尝人妻少妇中文字幕 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 老子影院午夜伦不卡 | 久久人妻内射无码一区三区 | 一本无码人妻在中文字幕免费 | 小鲜肉自慰网站xnxx | 无码国产激情在线观看 | 亚洲 激情 小说 另类 欧美 | 国产精品久久精品三级 | 无人区乱码一区二区三区 | 天堂亚洲2017在线观看 | 狂野欧美性猛交免费视频 | 久久午夜夜伦鲁鲁片无码免费 | 97无码免费人妻超级碰碰夜夜 | 精品人人妻人人澡人人爽人人 | 亚洲自偷精品视频自拍 | 亚洲精品国产精品乱码不卡 | 岛国片人妻三上悠亚 | 亚洲精品一区国产 | 久久精品国产亚洲精品 | 少妇无码吹潮 | 亚洲 欧美 激情 小说 另类 | 麻豆果冻传媒2021精品传媒一区下载 | 夜夜高潮次次欢爽av女 | 色爱情人网站 | 美女极度色诱视频国产 | 波多野结衣av一区二区全免费观看 | 7777奇米四色成人眼影 | 色婷婷av一区二区三区之红樱桃 | 中文精品无码中文字幕无码专区 | 亚洲中文字幕在线无码一区二区 | 亚洲国产精品美女久久久久 | 四虎影视成人永久免费观看视频 | 在线看片无码永久免费视频 | 大胆欧美熟妇xx | 99久久精品国产一区二区蜜芽 | 中国大陆精品视频xxxx | а天堂中文在线官网 | 久久精品成人欧美大片 | 男人扒开女人内裤强吻桶进去 | 成人试看120秒体验区 | 亚洲精品久久久久中文第一幕 | 67194成是人免费无码 | 久久亚洲精品成人无码 | 国产精品亚洲а∨无码播放麻豆 | 夫妻免费无码v看片 | 无套内谢的新婚少妇国语播放 | 久久久久久久人妻无码中文字幕爆 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 性欧美牲交xxxxx视频 | 青青草原综合久久大伊人精品 | 丰满人妻翻云覆雨呻吟视频 | 极品嫩模高潮叫床 | 久久久精品人妻久久影视 | 成人毛片一区二区 | 无码精品国产va在线观看dvd | 奇米影视7777久久精品 | 人妻中文无码久热丝袜 | 精品久久久久香蕉网 | 99视频精品全部免费免费观看 | 国产超级va在线观看视频 | 亚洲精品久久久久avwww潮水 | 精品无码成人片一区二区98 | 亚洲国产欧美国产综合一区 | 日本免费一区二区三区最新 | 领导边摸边吃奶边做爽在线观看 | 亚洲色成人中文字幕网站 | 亲嘴扒胸摸屁股激烈网站 | 1000部夫妻午夜免费 | 久久久av男人的天堂 | 性欧美疯狂xxxxbbbb | 成人欧美一区二区三区黑人免费 | 麻豆国产人妻欲求不满 | 青草青草久热国产精品 | 人人澡人摸人人添 | 波多野结衣av一区二区全免费观看 | 久久国产自偷自偷免费一区调 | 国产成人无码av在线影院 | 亚洲中文字幕在线观看 | 亚洲国产午夜精品理论片 | 强伦人妻一区二区三区视频18 | 丁香啪啪综合成人亚洲 | 日韩精品无码免费一区二区三区 | 乱码av麻豆丝袜熟女系列 | 日本www一道久久久免费榴莲 | 亚洲色欲久久久综合网东京热 | 欧美性生交xxxxx久久久 | 欧美精品国产综合久久 | 丝袜足控一区二区三区 | 熟妇人妻无乱码中文字幕 | 亚洲色欲色欲天天天www | 久久国产精品精品国产色婷婷 | 亚洲の无码国产の无码影院 | 美女极度色诱视频国产 | 亚洲一区二区三区在线观看网站 | 亚洲人成人无码网www国产 | 久久精品女人的天堂av | 国产午夜无码精品免费看 | 亚洲一区二区三区偷拍女厕 | 国产精品无码永久免费888 | 97久久精品无码一区二区 | 无套内谢的新婚少妇国语播放 | 欧美野外疯狂做受xxxx高潮 | 少妇人妻av毛片在线看 | 国产精品高潮呻吟av久久4虎 | 亚洲成熟女人毛毛耸耸多 | 国产精品资源一区二区 | 亚洲人成无码网www | 久久亚洲精品中文字幕无男同 | 国产明星裸体无码xxxx视频 | 中文字幕乱妇无码av在线 | 牛和人交xxxx欧美 | 人人澡人人妻人人爽人人蜜桃 | 人妻无码久久精品人妻 | 欧美日韩一区二区三区自拍 | 国产免费久久精品国产传媒 | 蜜桃臀无码内射一区二区三区 | 亚洲综合无码久久精品综合 | 99在线 | 亚洲 | 无码福利日韩神码福利片 | 成人免费视频一区二区 | 亚洲男人av香蕉爽爽爽爽 | √天堂资源地址中文在线 | 伊人色综合久久天天小片 | 国产无遮挡吃胸膜奶免费看 | 国产精品va在线观看无码 | 狠狠色噜噜狠狠狠狠7777米奇 | 丰满少妇熟乱xxxxx视频 | 精品乱子伦一区二区三区 | 一本色道久久综合亚洲精品不卡 | 成人欧美一区二区三区黑人免费 | 国产一区二区三区精品视频 | 大肉大捧一进一出视频出来呀 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 日日碰狠狠丁香久燥 | 亚洲熟女一区二区三区 | 久久亚洲精品中文字幕无男同 | 未满小14洗澡无码视频网站 | 美女扒开屁股让男人桶 | 波多野结衣乳巨码无在线观看 | 熟女体下毛毛黑森林 | 国产精品久久精品三级 | 在线播放免费人成毛片乱码 | 精品偷拍一区二区三区在线看 | 最近中文2019字幕第二页 | 扒开双腿吃奶呻吟做受视频 | 欧美激情内射喷水高潮 | 色窝窝无码一区二区三区色欲 | 欧美色就是色 | 日本乱人伦片中文三区 | 亚洲成在人网站无码天堂 | 亚洲乱码国产乱码精品精 | 久久精品中文字幕一区 | 一二三四社区在线中文视频 | 日本丰满护士爆乳xxxx | 宝宝好涨水快流出来免费视频 | 又色又爽又黄的美女裸体网站 | av在线亚洲欧洲日产一区二区 | 人人妻人人澡人人爽欧美一区 | 在线观看欧美一区二区三区 | 成人欧美一区二区三区黑人免费 | 国产乱人无码伦av在线a | 激情内射日本一区二区三区 | 妺妺窝人体色www婷婷 | 真人与拘做受免费视频 | 国产精品资源一区二区 | 日日麻批免费40分钟无码 | 国产成人无码a区在线观看视频app | 麻豆国产97在线 | 欧洲 | 成人欧美一区二区三区黑人免费 | a在线观看免费网站大全 | 亚洲春色在线视频 | 少妇性俱乐部纵欲狂欢电影 | 日韩亚洲欧美精品综合 | 免费中文字幕日韩欧美 | 人人妻人人澡人人爽精品欧美 | 精品国产青草久久久久福利 | 伦伦影院午夜理论片 | 日韩av无码中文无码电影 | 亚洲中文字幕久久无码 | 97精品人妻一区二区三区香蕉 | 色偷偷人人澡人人爽人人模 | 久久久久久国产精品无码下载 | 日本护士xxxxhd少妇 | 亚洲精品国产精品乱码视色 | 欧美三级a做爰在线观看 | 一本色道久久综合亚洲精品不卡 | 最新国产乱人伦偷精品免费网站 | 国产亚洲精品久久久久久久 | 中文毛片无遮挡高清免费 | 天干天干啦夜天干天2017 | 久久精品99久久香蕉国产色戒 | 欧美亚洲日韩国产人成在线播放 | 亚洲色欲色欲天天天www | 色综合天天综合狠狠爱 | 国内老熟妇对白xxxxhd | 四虎国产精品免费久久 | 国产亚洲美女精品久久久2020 | 久久99精品国产.久久久久 | 国内精品人妻无码久久久影院蜜桃 | 丰满妇女强制高潮18xxxx | 成人亚洲精品久久久久软件 | 国产成人无码av一区二区 | 欧美性生交活xxxxxdddd | 丰满少妇弄高潮了www | 白嫩日本少妇做爰 | 麻豆国产97在线 | 欧洲 | 伊人久久大香线蕉亚洲 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲国产精品久久久天堂 | 国产精华av午夜在线观看 | 99精品无人区乱码1区2区3区 | 亚洲午夜久久久影院 | 日本va欧美va欧美va精品 | 中文字幕人妻丝袜二区 | av香港经典三级级 在线 | 九九久久精品国产免费看小说 | √8天堂资源地址中文在线 | 给我免费的视频在线观看 | 一本大道久久东京热无码av | 中文字幕日韩精品一区二区三区 | 日韩亚洲欧美精品综合 | 国产偷抇久久精品a片69 | 国产熟妇高潮叫床视频播放 | 日韩精品久久久肉伦网站 | 国产一区二区三区精品视频 | av无码不卡在线观看免费 | 狠狠躁日日躁夜夜躁2020 | 日韩精品成人一区二区三区 | 国模大胆一区二区三区 | 欧美兽交xxxx×视频 | 免费人成在线观看网站 | 国产偷自视频区视频 | 国产精品亚洲专区无码不卡 | 国产午夜精品一区二区三区嫩草 | 久久婷婷五月综合色国产香蕉 | 美女毛片一区二区三区四区 | 亚洲一区二区三区国产精华液 | 国产欧美亚洲精品a | 天海翼激烈高潮到腰振不止 | 婷婷六月久久综合丁香 | 国产亚洲精品久久久闺蜜 | 东京热一精品无码av | 无码精品国产va在线观看dvd | 国产内射老熟女aaaa | 人妻中文无码久热丝袜 | 久久婷婷五月综合色国产香蕉 | 日本精品人妻无码77777 天堂一区人妻无码 | 小sao货水好多真紧h无码视频 | 大色综合色综合网站 | 色综合视频一区二区三区 | 亚洲精品成人福利网站 | 成人精品一区二区三区中文字幕 | 波多野结衣av在线观看 | 狂野欧美性猛xxxx乱大交 | 亚洲s色大片在线观看 | 欧美xxxx黑人又粗又长 | 精品熟女少妇av免费观看 | 影音先锋中文字幕无码 | 欧美丰满熟妇xxxx | 亚洲 激情 小说 另类 欧美 | 久久婷婷五月综合色国产香蕉 | 久久综合狠狠综合久久综合88 | 久久精品国产99久久6动漫 | 啦啦啦www在线观看免费视频 | 欧美丰满熟妇xxxx性ppx人交 | 无码av最新清无码专区吞精 | 午夜福利不卡在线视频 | 中文字幕精品av一区二区五区 | 国产人妻精品午夜福利免费 | 亚洲狠狠婷婷综合久久 | 啦啦啦www在线观看免费视频 | 丰满少妇高潮惨叫视频 | 日本免费一区二区三区最新 | 国产午夜福利100集发布 | 亚洲一区二区三区 | 午夜精品久久久久久久久 | 亚洲精品无码人妻无码 | 亚洲小说图区综合在线 | 久久精品人妻少妇一区二区三区 | av无码久久久久不卡免费网站 | 在线а√天堂中文官网 | 国产手机在线αⅴ片无码观看 | 久久久久se色偷偷亚洲精品av | 亚洲狠狠婷婷综合久久 | 麻豆国产人妻欲求不满 | 伊人久久大香线蕉午夜 | 少妇激情av一区二区 | 国产成人精品无码播放 | 天堂а√在线中文在线 | 国产精品第一国产精品 | 内射欧美老妇wbb | 77777熟女视频在线观看 а天堂中文在线官网 | 草草网站影院白丝内射 | 天堂亚洲免费视频 | 亚洲精品一区国产 | 好屌草这里只有精品 | 欧美熟妇另类久久久久久不卡 | 中文字幕+乱码+中文字幕一区 | 日本一区二区三区免费高清 | 亚洲乱码日产精品bd | 女人高潮内射99精品 | 人妻尝试又大又粗久久 | 欧美老熟妇乱xxxxx | 日本大乳高潮视频在线观看 | 国产成人一区二区三区在线观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲日韩一区二区 | 亚欧洲精品在线视频免费观看 | 蜜臀aⅴ国产精品久久久国产老师 | 无码人妻丰满熟妇区毛片18 | 色欲人妻aaaaaaa无码 | 欧洲精品码一区二区三区免费看 | 国产又爽又黄又刺激的视频 | 国产suv精品一区二区五 | 国产精品无码mv在线观看 | 亚洲国产午夜精品理论片 | 一个人看的www免费视频在线观看 | 亚洲国产精品久久久久久 | 亚洲 a v无 码免 费 成 人 a v | 久久综合九色综合欧美狠狠 | 激情五月综合色婷婷一区二区 | 300部国产真实乱 | 亚洲国产精品久久人人爱 | 久久久国产一区二区三区 | 成人免费视频一区二区 | 中文字幕日产无线码一区 | 精品人人妻人人澡人人爽人人 | 日产精品99久久久久久 | 国产精品二区一区二区aⅴ污介绍 | 麻豆国产丝袜白领秘书在线观看 | 婷婷丁香六月激情综合啪 | 亚洲成av人片天堂网无码】 | 中国女人内谢69xxxxxa片 | 国产超碰人人爽人人做人人添 | 精品欧美一区二区三区久久久 | 无套内射视频囯产 | 国产高潮视频在线观看 | 日本又色又爽又黄的a片18禁 | 亚洲色欲色欲欲www在线 | 国产在线一区二区三区四区五区 | 成人av无码一区二区三区 | 漂亮人妻洗澡被公强 日日躁 | 欧美性生交活xxxxxdddd | 任你躁国产自任一区二区三区 | 国产精品99爱免费视频 | 成 人 免费观看网站 | 女人色极品影院 | 精品国精品国产自在久国产87 | √天堂资源地址中文在线 | 高潮毛片无遮挡高清免费 | 爆乳一区二区三区无码 | 久久综合色之久久综合 | 亚洲色成人中文字幕网站 | 少妇人妻偷人精品无码视频 | 国产无遮挡又黄又爽免费视频 | 一个人看的视频www在线 | 精品无人国产偷自产在线 | 东京热无码av男人的天堂 | 亚洲小说春色综合另类 | 国产猛烈高潮尖叫视频免费 | 国产区女主播在线观看 | 女人被男人躁得好爽免费视频 | 国产成人无码av在线影院 | 亚洲国产精品久久久天堂 | 成熟女人特级毛片www免费 | 又紧又大又爽精品一区二区 | 亚洲国产一区二区三区在线观看 | 国产成人精品一区二区在线小狼 | 国产亚洲人成a在线v网站 | 桃花色综合影院 | www国产亚洲精品久久久日本 | 日韩亚洲欧美中文高清在线 | 欧美精品免费观看二区 | 久久99精品国产.久久久久 | 欧美肥老太牲交大战 | 丰满人妻精品国产99aⅴ | 樱花草在线社区www | 久久精品国产一区二区三区肥胖 | 国产深夜福利视频在线 | 欧美肥老太牲交大战 | 国产av无码专区亚洲awww | 黑人巨大精品欧美黑寡妇 | 成人免费视频在线观看 | 久久99热只有频精品8 | 精品无码一区二区三区的天堂 | 亚洲成av人综合在线观看 | 国产真实乱对白精彩久久 | 久久99热只有频精品8 | 久久99热只有频精品8 | 国产人妻人伦精品 | 国产婷婷色一区二区三区在线 | 日韩少妇内射免费播放 | 国产精品人妻一区二区三区四 | 熟妇女人妻丰满少妇中文字幕 | 日本又色又爽又黄的a片18禁 | 成人精品天堂一区二区三区 | 亚洲精品中文字幕久久久久 | 亚洲中文字幕乱码av波多ji | 国产精品va在线播放 | 亚洲中文字幕在线观看 | 亚洲精品久久久久久久久久久 | 日韩欧美中文字幕在线三区 | 在线天堂新版最新版在线8 | 精品无人区无码乱码毛片国产 | 亚洲国产精品无码久久久久高潮 | 波多野结衣高清一区二区三区 | 奇米影视7777久久精品人人爽 | 日韩欧美中文字幕在线三区 | 国产激情艳情在线看视频 | 日产精品99久久久久久 | 久久国产精品二国产精品 | 午夜福利电影 | 国产人妖乱国产精品人妖 | aa片在线观看视频在线播放 | 在线成人www免费观看视频 | 亚洲人成网站色7799 | 蜜桃视频韩日免费播放 | 性欧美大战久久久久久久 | 丰满少妇高潮惨叫视频 | 又粗又大又硬又长又爽 | 好屌草这里只有精品 | 日日橹狠狠爱欧美视频 | 国产精品美女久久久久av爽李琼 | 给我免费的视频在线观看 | 精品无码国产自产拍在线观看蜜 | 精品国偷自产在线 | 性生交片免费无码看人 | 国产舌乚八伦偷品w中 | 亚洲一区二区三区四区 | 麻豆成人精品国产免费 | 亚洲熟悉妇女xxx妇女av | 国产色精品久久人妻 | 三上悠亚人妻中文字幕在线 | 亚洲午夜福利在线观看 | 97夜夜澡人人爽人人喊中国片 | 亚洲精品一区二区三区在线 | 欧美成人午夜精品久久久 | 日本一区二区更新不卡 | 亚洲国产精品久久人人爱 | 无遮挡国产高潮视频免费观看 | 日韩精品乱码av一区二区 | 日日碰狠狠躁久久躁蜜桃 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 欧美人与动性行为视频 | 大肉大捧一进一出视频出来呀 | 国产亚洲精品久久久闺蜜 | 亚洲乱亚洲乱妇50p | 学生妹亚洲一区二区 | 无码人妻精品一区二区三区下载 | 内射巨臀欧美在线视频 | 在线观看欧美一区二区三区 | 国产精品人人爽人人做我的可爱 | 色窝窝无码一区二区三区色欲 | 熟妇激情内射com | 亚洲aⅴ无码成人网站国产app | 天堂久久天堂av色综合 | 久久久国产精品无码免费专区 | 久久 国产 尿 小便 嘘嘘 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲欧美中文字幕5发布 | 人人澡人人妻人人爽人人蜜桃 | 午夜性刺激在线视频免费 | 免费人成网站视频在线观看 | 亚洲色大成网站www | 欧美性猛交xxxx富婆 | 国产成人精品久久亚洲高清不卡 | a在线观看免费网站大全 | 性欧美牲交xxxxx视频 | 乱码午夜-极国产极内射 | 色欲av亚洲一区无码少妇 | 精品日本一区二区三区在线观看 | 天堂无码人妻精品一区二区三区 | 国产特级毛片aaaaaaa高清 | 国产午夜无码精品免费看 | 精品久久久中文字幕人妻 | 成人欧美一区二区三区黑人 | 色诱久久久久综合网ywww | 久久久久亚洲精品男人的天堂 | 久久综合给久久狠狠97色 | 人妻无码久久精品人妻 | 女人被男人爽到呻吟的视频 | 大肉大捧一进一出好爽视频 | 扒开双腿吃奶呻吟做受视频 | 国产精品丝袜黑色高跟鞋 | 乌克兰少妇xxxx做受 | 国产xxx69麻豆国语对白 | 未满成年国产在线观看 | 九一九色国产 | 又大又硬又黄的免费视频 | 国产香蕉尹人视频在线 | 自拍偷自拍亚洲精品被多人伦好爽 | 中国大陆精品视频xxxx | 两性色午夜视频免费播放 | 国産精品久久久久久久 | 成 人 免费观看网站 | 人人妻在人人 | 日本熟妇人妻xxxxx人hd | 好男人www社区 | 亚欧洲精品在线视频免费观看 | 亚洲欧美日韩国产精品一区二区 | 成熟妇人a片免费看网站 | 人妻少妇精品视频专区 | 99久久久无码国产aaa精品 | www成人国产高清内射 | 日本精品久久久久中文字幕 | 日本精品高清一区二区 | 男女爱爱好爽视频免费看 | 狠狠躁日日躁夜夜躁2020 | 国产又爽又猛又粗的视频a片 | 日本护士xxxxhd少妇 | 久久99精品国产.久久久久 | 国产亚洲欧美在线专区 | 蜜桃无码一区二区三区 | 欧美日韩色另类综合 | 丰满诱人的人妻3 | 麻豆成人精品国产免费 | 欧美精品国产综合久久 | 少妇性荡欲午夜性开放视频剧场 | 理论片87福利理论电影 | 国产色视频一区二区三区 | 国产婷婷色一区二区三区在线 | 性做久久久久久久免费看 | 中文字幕精品av一区二区五区 | 男女超爽视频免费播放 | 亚洲中文字幕久久无码 | 欧美日韩色另类综合 | 97无码免费人妻超级碰碰夜夜 | 老熟女重囗味hdxx69 | 无码av岛国片在线播放 | 99久久婷婷国产综合精品青草免费 | 国产性生交xxxxx无码 | 亚洲国产综合无码一区 | 男人的天堂2018无码 | 黑人大群体交免费视频 | 国产香蕉尹人综合在线观看 | 日韩在线不卡免费视频一区 | 丰满护士巨好爽好大乳 | 任你躁在线精品免费 | 午夜丰满少妇性开放视频 | 国产亚洲视频中文字幕97精品 | 亚洲综合在线一区二区三区 | 精品亚洲韩国一区二区三区 | 波多野结衣 黑人 | 亚洲国产精品久久久天堂 | 国产偷抇久久精品a片69 | 欧美怡红院免费全部视频 | 狠狠色噜噜狠狠狠狠7777米奇 | 永久免费精品精品永久-夜色 | 日本一区二区三区免费高清 | 国产精品嫩草久久久久 | а√资源新版在线天堂 | 国产精品手机免费 | 久久精品一区二区三区四区 | 女人被男人爽到呻吟的视频 | 日本大香伊一区二区三区 | 亚洲精品久久久久中文第一幕 | 国产精品99久久精品爆乳 | 成人欧美一区二区三区黑人免费 | 国产在线精品一区二区三区直播 | 久久99精品国产麻豆 | 日本一区二区更新不卡 | 精品国产一区二区三区av 性色 | 青青草原综合久久大伊人精品 | 精品aⅴ一区二区三区 | 水蜜桃av无码 | 九九热爱视频精品 | 国产sm调教视频在线观看 | 精品人妻中文字幕有码在线 | 久久 国产 尿 小便 嘘嘘 | 国产凸凹视频一区二区 | 偷窥日本少妇撒尿chinese | 成 人影片 免费观看 | 正在播放老肥熟妇露脸 | 欧美成人高清在线播放 | 国产人妻久久精品二区三区老狼 | 久久精品无码一区二区三区 | 国产精品久久精品三级 | 少妇性l交大片欧洲热妇乱xxx | 天堂а√在线中文在线 | 撕开奶罩揉吮奶头视频 | 又粗又大又硬毛片免费看 | 欧美国产亚洲日韩在线二区 | 久久久精品456亚洲影院 | 成人无码视频免费播放 | 国产精品.xx视频.xxtv | 2019nv天堂香蕉在线观看 | 精品夜夜澡人妻无码av蜜桃 | 亚洲天堂2017无码 | 国产精品亚洲专区无码不卡 | 熟妇激情内射com | 国产激情艳情在线看视频 | 婷婷色婷婷开心五月四房播播 | 亚洲国产av精品一区二区蜜芽 | 一本久久a久久精品vr综合 | 内射欧美老妇wbb | 中文字幕无码日韩欧毛 | 亚洲精品午夜无码电影网 | 国产在热线精品视频 | 日韩亚洲欧美精品综合 | 99久久人妻精品免费二区 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲综合精品香蕉久久网 | 国产免费久久精品国产传媒 | 丰满妇女强制高潮18xxxx | 久久久精品456亚洲影院 | 亚洲区小说区激情区图片区 | 色情久久久av熟女人妻网站 | 男女性色大片免费网站 | 中文精品无码中文字幕无码专区 | 国产熟妇另类久久久久 | 精品国产国产综合精品 | av人摸人人人澡人人超碰下载 | 丰满少妇熟乱xxxxx视频 | 久久人妻内射无码一区三区 | 日本护士xxxxhd少妇 | 成人性做爰aaa片免费看不忠 | 日本丰满护士爆乳xxxx | 久久久久久久久888 | 亚洲男人av天堂午夜在 | 永久免费观看国产裸体美女 | 久久久久亚洲精品中文字幕 | 中文字幕久久久久人妻 | 国产美女极度色诱视频www | 国产欧美精品一区二区三区 | 蜜臀aⅴ国产精品久久久国产老师 | 国产成人无码a区在线观看视频app | 中文字幕色婷婷在线视频 | 两性色午夜视频免费播放 | 亚洲中文无码av永久不收费 | 亚洲人成网站免费播放 | 爆乳一区二区三区无码 | 日本在线高清不卡免费播放 | 强开小婷嫩苞又嫩又紧视频 | 久久久www成人免费毛片 | 丰满少妇熟乱xxxxx视频 | 性生交大片免费看l | 无码人妻av免费一区二区三区 | 精品偷拍一区二区三区在线看 | 67194成是人免费无码 | 98国产精品综合一区二区三区 | 岛国片人妻三上悠亚 | 乱人伦人妻中文字幕无码久久网 | 宝宝好涨水快流出来免费视频 | 欧美zoozzooz性欧美 | 免费无码肉片在线观看 | 国产精品无码mv在线观看 | 极品尤物被啪到呻吟喷水 | 欧美人与善在线com | 精品一区二区三区波多野结衣 | 中文字幕无码视频专区 | 两性色午夜免费视频 | 波多野结衣aⅴ在线 | 日日天干夜夜狠狠爱 | 亚洲人成网站在线播放942 | 亚洲成a人片在线观看日本 | 国内揄拍国内精品少妇国语 | 丰满人妻精品国产99aⅴ | 久久久久亚洲精品中文字幕 | www国产亚洲精品久久网站 | 国精品人妻无码一区二区三区蜜柚 | 国产69精品久久久久app下载 | 男人扒开女人内裤强吻桶进去 | 欧美三级不卡在线观看 | 久久久久se色偷偷亚洲精品av | 无码毛片视频一区二区本码 | 无遮挡啪啪摇乳动态图 | 亚洲爆乳精品无码一区二区三区 | 免费无码一区二区三区蜜桃大 | 欧洲精品码一区二区三区免费看 | 国产成人一区二区三区别 | 亚洲娇小与黑人巨大交 | 免费无码的av片在线观看 | 日韩av无码一区二区三区 | 任你躁国产自任一区二区三区 | 亚洲一区av无码专区在线观看 | 国产美女精品一区二区三区 | 国产在线aaa片一区二区99 | 精品国精品国产自在久国产87 | 黑人玩弄人妻中文在线 | 亚洲天堂2017无码中文 | 无码国产色欲xxxxx视频 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲国产精品无码久久久久高潮 | 日本护士xxxxhd少妇 | 久久久久成人精品免费播放动漫 | 无码乱肉视频免费大全合集 | 人妻有码中文字幕在线 | 国产av人人夜夜澡人人爽麻豆 | v一区无码内射国产 | 无码人妻丰满熟妇区五十路百度 | 99在线 | 亚洲 | 亚洲精品久久久久中文第一幕 | 少妇无码av无码专区在线观看 | 亚洲人成影院在线观看 | 精品无码成人片一区二区98 | 国产偷抇久久精品a片69 | 综合网日日天干夜夜久久 | 青青草原综合久久大伊人精品 | www一区二区www免费 | 露脸叫床粗话东北少妇 | 99麻豆久久久国产精品免费 | 老熟女乱子伦 | 国内精品久久久久久中文字幕 | 免费视频欧美无人区码 | 亚洲爆乳精品无码一区二区三区 | 人人澡人人妻人人爽人人蜜桃 | 亚洲啪av永久无码精品放毛片 | 亚洲の无码国产の无码步美 | 国产一区二区三区精品视频 | 国产内射爽爽大片视频社区在线 | 国内精品久久毛片一区二区 | 国产又粗又硬又大爽黄老大爷视 | 中文亚洲成a人片在线观看 | 亚洲精品www久久久 | 日本爽爽爽爽爽爽在线观看免 | 成人无码精品1区2区3区免费看 | 日本欧美一区二区三区乱码 | 久久人人爽人人人人片 | yw尤物av无码国产在线观看 | 一二三四在线观看免费视频 | 男女猛烈xx00免费视频试看 | 中文字幕久久久久人妻 | 久久精品国产一区二区三区肥胖 | 亚洲精品久久久久中文第一幕 | 亚洲男女内射在线播放 | 97色伦图片97综合影院 | 国产精品毛片一区二区 | 两性色午夜视频免费播放 | 在线播放无码字幕亚洲 | 欧美野外疯狂做受xxxx高潮 | 初尝人妻少妇中文字幕 | 国色天香社区在线视频 | аⅴ资源天堂资源库在线 | av无码久久久久不卡免费网站 | 国产精品igao视频网 | 欧美亚洲国产一区二区三区 | 国产成人综合色在线观看网站 | 老熟女重囗味hdxx69 | 精品少妇爆乳无码av无码专区 | 亚洲 激情 小说 另类 欧美 | 久久精品国产日本波多野结衣 | 欧美自拍另类欧美综合图片区 | 久久亚洲日韩精品一区二区三区 | 日日干夜夜干 | 日本精品高清一区二区 | 大肉大捧一进一出视频出来呀 | 国产成人无码午夜视频在线观看 | 欧美日韩色另类综合 | 国产在线一区二区三区四区五区 | 少妇人妻av毛片在线看 | 欧洲极品少妇 | 国产明星裸体无码xxxx视频 | 亚洲色欲久久久综合网东京热 | 国产后入清纯学生妹 | 免费无码的av片在线观看 | 在线播放亚洲第一字幕 | 亚洲国产精华液网站w | 国内精品久久久久久中文字幕 | 人妻少妇精品无码专区二区 | 67194成是人免费无码 | 97久久精品无码一区二区 | 久久99国产综合精品 | 在线精品国产一区二区三区 | 国产xxx69麻豆国语对白 | 国产成人一区二区三区在线观看 | 久久精品国产亚洲精品 | 久久精品国产99精品亚洲 | 成人性做爰aaa片免费看不忠 | 特大黑人娇小亚洲女 | 国产成人精品一区二区在线小狼 | 国精品人妻无码一区二区三区蜜柚 | 日韩无码专区 | 久久www免费人成人片 | 扒开双腿疯狂进出爽爽爽视频 | 精品成在人线av无码免费看 | 色婷婷久久一区二区三区麻豆 | 青青草原综合久久大伊人精品 | 精品欧洲av无码一区二区三区 | 中文字幕精品av一区二区五区 | 无码成人精品区在线观看 | 色 综合 欧美 亚洲 国产 | 亚洲精品成a人在线观看 | 理论片87福利理论电影 | 无码一区二区三区在线观看 | 精品国偷自产在线 | 国产口爆吞精在线视频 | 欧美精品免费观看二区 | 亚洲日本一区二区三区在线 | 青草青草久热国产精品 | 亚洲成av人片在线观看无码不卡 | 色综合久久久无码网中文 | 少妇愉情理伦片bd | 无码福利日韩神码福利片 | 国产精品久久久午夜夜伦鲁鲁 | 国产成人午夜福利在线播放 | 欧美日本免费一区二区三区 | 一本久久伊人热热精品中文字幕 | 国产精品国产三级国产专播 | 欧美日韩视频无码一区二区三 | 欧美刺激性大交 | 亚洲一区二区三区偷拍女厕 | 无码人妻精品一区二区三区不卡 | 久久精品人妻少妇一区二区三区 | 中文字幕亚洲情99在线 | 鲁一鲁av2019在线 | 青草青草久热国产精品 | 日本乱人伦片中文三区 | 久久国产精品偷任你爽任你 | 97夜夜澡人人爽人人喊中国片 | 日韩av无码一区二区三区不卡 | 熟女俱乐部五十路六十路av | 国产成人无码av一区二区 | 国产电影无码午夜在线播放 | 国产亚洲tv在线观看 | 日本一卡二卡不卡视频查询 | 久久久久久a亚洲欧洲av冫 | 粉嫩少妇内射浓精videos | 正在播放老肥熟妇露脸 | 久久综合九色综合97网 | 最新国产乱人伦偷精品免费网站 | 97资源共享在线视频 | 77777熟女视频在线观看 а天堂中文在线官网 | 野狼第一精品社区 | 亚洲国产综合无码一区 | 天天躁夜夜躁狠狠是什么心态 | 国产亚洲精品久久久久久久久动漫 | 日本大乳高潮视频在线观看 | 国产精品国产自线拍免费软件 | 欧美日韩一区二区免费视频 | 久久精品中文字幕大胸 | 亚洲精品一区二区三区四区五区 | 亚洲中文无码av永久不收费 | 强辱丰满人妻hd中文字幕 | 欧美真人作爱免费视频 | 欧美成人午夜精品久久久 | 亚洲日韩av一区二区三区中文 | 少妇邻居内射在线 | 国产精品爱久久久久久久 | 性色欲情网站iwww九文堂 | 国产精品久久久久无码av色戒 | 好男人www社区 | 国产av剧情md精品麻豆 | 久久人人爽人人爽人人片ⅴ | 激情五月综合色婷婷一区二区 | 成人欧美一区二区三区黑人 | 久久zyz资源站无码中文动漫 | 日韩欧美中文字幕公布 | 熟妇人妻无乱码中文字幕 | 漂亮人妻洗澡被公强 日日躁 | 国产亚洲精品久久久ai换 | 成人精品天堂一区二区三区 | 国产精品福利视频导航 | 一本一道久久综合久久 | 天下第一社区视频www日本 | 亚洲高清偷拍一区二区三区 | 成人精品一区二区三区中文字幕 | 天天av天天av天天透 | 鲁大师影院在线观看 | 欧洲熟妇色 欧美 | 未满成年国产在线观看 | 亚洲乱码日产精品bd | 欧美精品一区二区精品久久 | 大胆欧美熟妇xx | 18无码粉嫩小泬无套在线观看 | 激情亚洲一区国产精品 | 曰韩少妇内射免费播放 | 久久无码专区国产精品s | 久久午夜夜伦鲁鲁片无码免费 | 国产精品a成v人在线播放 | 草草网站影院白丝内射 | 亚洲区欧美区综合区自拍区 | 中文无码伦av中文字幕 | 亚洲精品一区国产 | 亚洲一区二区三区偷拍女厕 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 无遮无挡爽爽免费视频 | 中文字幕无码视频专区 | 性欧美videos高清精品 | 国产特级毛片aaaaaa高潮流水 | 人妻熟女一区 | 日韩欧美中文字幕在线三区 | 久激情内射婷内射蜜桃人妖 | 日韩亚洲欧美中文高清在线 | 久久国产精品精品国产色婷婷 | 伊在人天堂亚洲香蕉精品区 | 熟妇人妻中文av无码 | 九九在线中文字幕无码 | 久久精品视频在线看15 | 国产深夜福利视频在线 | 久久精品人妻少妇一区二区三区 | 图片小说视频一区二区 | 1000部夫妻午夜免费 | 国产办公室秘书无码精品99 | 岛国片人妻三上悠亚 | 人人妻人人澡人人爽欧美一区 |