国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Python中配置環(huán)境變量的幾種姿勢

共 9712字,需瀏覽 20分鐘

 ·

2021-03-17 13:36


大家好,歡迎來到 Crossin的編程教室 !

在運行一個項目的時候,我們經(jīng)常會遇到設置不同環(huán)境的需求,如設置是開發(fā)環(huán)境、測試環(huán)境還是生產(chǎn)環(huán)境,或者在某些設置里面可能還需要設置一些變量開關,如設置調試開關、日志開關、功能開關等等。

這些變量其實就是在項目運行時我們給項目設置的一些參數(shù)。這些參數(shù)一般情況來說,可以有兩種設置方法,一種是通過命令行參數(shù),一種是通過環(huán)境變量。二者的適用范圍不同,在不同的場景下我們可以選用更方便的方式來實現(xiàn)參數(shù)的設置。

本節(jié)我們以 Python 項目為例,說說環(huán)境變量的設置。

設置和獲取環(huán)境變量

首先,我們先來了解一下在 Python 項目里面怎樣設置和獲取變量。

首先讓我們定義一個最簡單的 Python 文件,命名為 main.py,內容如下:

import os
print(os.environ['VAR1'])

在這里我們導入了 os 模塊,它的 environ 對象里面就包含了當前運行狀態(tài)下的所有環(huán)境變量,它其實是一個os._Environ對象,我們可以通過類似字典取值的方式從中獲取里面包含的環(huán)境變量的值,如代碼所示。

好,接下來我們什么也不設置,直接運行,看下結果:

python3 main.py

結果如下:

raise KeyError(key) from None
KeyError: 'VAR1'

直接拋出來了一個錯誤,這很正常,我們此時并沒有設置 VAR1 這個環(huán)境變量,當然會拋出鍵值異常的錯誤了。

接下來我們在命令行下進行設置,運行如下命令:

VAR1=germey python3 main.py

運行結果如下:

germey

可以看到我們在運行之前,在命令行之前通過鍵值對的形式對環(huán)境變量進行設置,程序就可以獲取到 VAR1 這個值了,成功打印出來了 germey。

但這個環(huán)境變量是永久的嗎?我們這次再運行一遍原來的命令:

python3 main.py

結果如下:

raise KeyError(key) from None
KeyError: 'VAR1'

嗯,又拋錯了。

這說明了什么,在命令行的前面加上的這個環(huán)境變量聲明只能對當前執(zhí)行的命令生效。

好,那既然如此,我難道每次運行都要在命令行前面加上這些聲明嗎?那豈不麻煩死了。

當然有解決方法,我們使用 export 就可以了。

比如這里,我們執(zhí)行如下命令:

export VAR1=germey

執(zhí)行完這個命令之后,當前運行環(huán)境下 VAR1 就被設置成功了,下面我們運行的命令都能獲取到 VAR1 這個環(huán)境變量了。

下面來試試,還是執(zhí)行原來的命令:

python3 main.py

結果如下:

germey

可以,成功獲取到了 VAR1 這個變量,后面我們運行的每一個命令就都會生效了。

但等一下,這個用了 export 就是永久生效了嗎?

其實并不是,其實這個 export 只對當前的命令行運行環(huán)境生效,我們只要把命令行關掉再重新打開,之前用 export 設置的環(huán)境變量就都沒有了。

可以試試,重新打開命令行,再次執(zhí)行原來的命令,就會又拋出鍵值異常的錯誤了。

那又有同學會問了,我要在每次命令行運行時都想自動設置好環(huán)境變量怎么辦呢?

這個就更好辦了,只需要把 export 的這些命令加入到~/.bashrc文件里面就好了,每次打開命令行的時候,系統(tǒng)都會自動先執(zhí)行以下這個腳本里面的命令,這樣環(huán)境變量就設置成功了。當然這里面還有很多不同的文件,如~/.bash_profile~/.zshrc、~/.profile、/etc/profile等等,其加載是有先后順序的,大家感興趣可以去了解下。

好了,扯遠了,我們現(xiàn)在已經(jīng)了解了如何設置環(huán)境變量和基本的環(huán)境變量獲取方法了。


更安全的獲取方式

但是上面的這種獲取變量的方式實際上是非常不友好的,萬一這個環(huán)境變量沒設置好,那豈不是就報錯了,這是很不安全的。

所以,下面再介紹幾種比較友好的獲取環(huán)境變量的方式,即使沒有設置過,也不會報錯。

我們可以把中括號取值的方式改成 get 方法,如下所示:

import os
print(os.environ.get('VAR1'))

這樣就不會報錯了,如果 VAR1 沒設置,會直接返回 None,而不是直接報錯。

另外我們也可以給 get 方法傳入第二個參數(shù),表示默認值,如下所示:

import os
print(os.environ.get('VAR1', 'germey'))

這樣即使我們如果設置過 VAR1,他就會用 germey 這個字符串代替,這就完成了默認環(huán)境變量的設置。

下面還有幾種獲取環(huán)境變量的方式,總結如下:

import os
print(os.getenv('VAR1', 'germey'))

這個方式比上面的寫法更簡單,功能完全一致。

弊端

但其實上面的方法有一個不方便的地方,如果我們想要設置非字符串類型的環(huán)境變量怎么辦呢?比如設置 int 類型、float 類型、list 類型,可能我們的寫法就會變成這個樣子:

import os
import json

VAR1 = int(os.getenv('VAR1', 1))
VAR2 = float(os.getenv('VAR2', 5.5))
VAR3 = json.loads(os.getenv('VAR3'))

然后設置環(huán)境變量的時候就變成這樣子:

export VAR1=1
export VAR2=2.3
export VAR3='["1", "2"]'

這樣才能成功獲取到結果,打印出來結果如下:

1
2.3
['1', '2']

不過看下這個,寫法也太奇葩了吧,又是類型轉換,又是 json 解析什么的,有沒有更好的方法來設置。

environs

當然有的,下面推薦一個 environs 庫,利用它我們可以輕松地設置各種類型的環(huán)境變量。

這是一個第三方庫,可以通過 pip 來安裝:

pip3 install environs

好,安裝之后,我們再來體驗一下使用 environs 來設置環(huán)境變量的方式。

from environs import Env

env = Env()
VAR1 = env.int('VAR1', 1)
VAR2 = env.float('VAR2', 5.5)
VAR3 = env.list('VAR3')

這里 environs 直接提供了 int、float、list 等方法,我們就不用再去進行類型轉換了。

與此同時,設置環(huán)境變量的方式也有所變化:

export VAR1=1
export VAR2=2.3
export VAR3=1,2

這里 VAR3 是列表,我們可以直接用逗號分隔開來。

打印結果如下:

1
2.3
['1', '2']

官方示例

下面我們再看一個官方示例,這里示例了一些常見的用法。

首先我們來定義一些環(huán)境變量,如下:

export GITHUB_USER=sloria
export MAX_CONNECTIONS=100
export SHIP_DATE='1984-06-25'
export TTL=42
export ENABLE_LOGIN=true
export GITHUB_REPOS=webargs,konch,ped
export COORDINATES=23.3,50.0
export LOG_LEVEL=DEBUG

這里有字符串、有日期、有日志級別、有字符串列表、有浮點數(shù)列表、有布爾。

我們來看下怎么獲取,寫法如下:

from environs import Env

env = Env()
env.read_env() # read .env file, if it exists
# required variables
gh_user = env("GITHUB_USER") # => 'sloria'
secret = env("SECRET") # => raises error if not set

# casting
max_connections = env.int("MAX_CONNECTIONS") # => 100
ship_date = env.date("SHIP_DATE") # => datetime.date(1984, 6, 25)
ttl = env.timedelta("TTL") # => datetime.timedelta(0, 42)
log_level = env.log_level("LOG_LEVEL") # => logging.DEBUG

# providing a default value
enable_login = env.bool("ENABLE_LOGIN", False) # => True
enable_feature_x = env.bool("ENABLE_FEATURE_X", False) # => False

# parsing lists
gh_repos = env.list("GITHUB_REPOS") # => ['webargs', 'konch', 'ped']
coords = env.list("COORDINATES", subcast=float) # => [23.3, 50.0]

通過觀察代碼可以發(fā)現(xiàn)它提供了這些功能:

  • 通過 env 可以設置必需定義的變量,如果沒有定義,則會報錯。
  • 通過 date、timedelta 方法可以對日期或時間進行轉化,轉成 datetime.date 或 timedelta 類型。
  • 通過 log_level 方法可以對日志級別進行轉化,轉成 logging 里的日志級別定義。
  • 通過 bool 方法可以對布爾類型變量進行轉化。
  • 通過 list 方法可以對逗號分隔的內容進行 list 轉化,并可以通過 subcast 方法對 list 的每個元素進行類型轉化。

可以說有了這些方法,定義各種類型的變量都不再是問題了。

支持類型

總的來說,environs 支持的轉化類型有這么多:

  • env.str
  • env.bool
  • env.int
  • env.float
  • env.decimal
  • env.list(accepts optionalsubcastkeyword argument)
  • env.dict(accepts optionalsubcastkeyword argument)
  • env.json
  • env.datetime
  • env.date
  • env.timedelta(assumes value is an integer in seconds)
  • env.url
  • env.uuid
  • env.log_level
  • env.path(casts to apathlib.Path)

這里 list、dict、json、date、url、uuid、path 個人認為都還是比較有用的,另外 list、dict 方法還有一個 subcast 方法可以對元素內容進行轉化。

對于 dict、url、date、uuid、path 這里我們來補充說明一下。

下面我們定義這些類型的環(huán)境變量:

export VAR_DICT=name=germey,age=25
export VAR_JSON='{"name": "germey", "age": 25}'
export VAR_URL=https://cuiqingcai.com
export VAR_UUID=762c8d53-5860-4d5d-81bc-210bf2663d0e
export VAR_PATH=/var/py/env

需要注意的是,DICT 的解析,需要傳入的是逗號分隔的鍵值對,JSON 的解析是需要傳入序列化的字符串。

解析寫法如下:

from environs import Env

env = Env()
VAR_DICT = env.dict('VAR_DICT')
print(type(VAR_DICT), VAR_DICT)

VAR_JSON = env.json('VAR_JSON')
print(type(VAR_JSON), VAR_JSON)

VAR_URL = env.url('VAR_URL')
print(type(VAR_URL), VAR_URL)

VAR_UUID = env.uuid('VAR_UUID')
print(type(VAR_UUID), VAR_UUID)

VAR_PATH = env.path('VAR_PATH')
print(type(VAR_PATH), VAR_PATH)

運行結果如下:

<class 'dict'> {'name': 'germey', 'age': '25'}
<class 'dict'> {'name': 'germey', 'age': 25}
<class 'urllib.parse.ParseResult'> ParseResult(scheme='https', netloc='cuiqingcai.com', path='', params='', query='', fragment='')
<class 'uuid.UUID'> 762c8d53-5860-4d5d-81bc-210bf2663d0e
<class 'pathlib.PosixPath'> /var/py/env

可以看到,它分別給我們轉化成了 dict、dict、ParseResult、UUID、PosixPath 類型了。

在代碼中直接使用即可。

文件讀取

如果我們的一些環(huán)境變量是定義在文件中的,environs 還可以進行讀取和加載,默認會讀取本地當前運行目錄下的.env文件。

示例如下:

from environs import Env

env = Env()
env.read_env()
APP_DEBUG = env.bool('APP_DEBUG')
APP_ENV = env.str('APP_ENV')
print(APP_DEBUG)
print(APP_ENV)

下面我們在.env文件中寫入如下內容:

APP_DEBUG=false
APP_ENV=prod

運行結果如下:

False
prod

沒問題,成功讀取。

當然我們也可以自定義讀取的文件,如.env.test文件,內容如下:

APP_DEBUG=false
APP_ENV=test

代碼則可以這么定義:

from environs import Env

env = Env()
env.read_env(path='.env.test')
APP_DEBUG = env.bool('APP_DEBUG')
APP_ENV = env.str('APP_ENV')

這里就通過 path 傳入了定義環(huán)境變量的文件路徑即可。

前綴處理

environs 還支持前綴處理,一般來說我們定義一些環(huán)境變量,如數(shù)據(jù)庫的連接,可能有 host、port、password 等,但在定義環(huán)境變量的時候往往會加上對應的前綴,如 MYSQL_HOST、MYSQL_PORT、MYSQL_PASSWORD 等,但在解析時,我們可以根據(jù)前綴進行分組處理,見下面的示例:

# export MYAPP_HOST=lolcathost
# export MYAPP_PORT=3000

with env.prefixed("MYAPP_"):
host = env("HOST", "localhost") # => 'lolcathost'
port = env.int("PORT", 5000) # => 3000

# nested prefixes are also supported:

# export MYAPP_DB_HOST=lolcathost
# export MYAPP_DB_PORT=10101

with env.prefixed("MYAPP_"):
with env.prefixed("DB_"):
db_host = env("HOST", "lolcathost")
db_port = env.int("PORT", 10101)

可以看到這里通過 with 和 priefixed 方法組合使用即可實現(xiàn)分區(qū)處理,這樣在每個分組下再賦值到一個字典里面即可。

合法性驗證

有些環(huán)境變量的傳入是不可預知的,如果傳入一些非法的環(huán)境變量很可能導致一些難以預料的問題。比如說一些可執(zhí)行的命令,通過環(huán)境變量傳進來,如果是危險命令,那么會非常危險。

所以在某些情況下我們需要驗證傳入的環(huán)境變量的有效性,看下面的例子:

# export TTL=-2
# export NODE_ENV='invalid'
# export EMAIL='^_^'

from environs import Env
from marshmallow.validate import OneOf, Length, Email

env = Env()

# simple validator
env.int("TTL", validate=lambda n: n > 0)
# => Environment variable "TTL" invalid: ['Invalid value.']


# using marshmallow validators
env.str(
"NODE_ENV",
validate=OneOf(
["production", "development"], error="NODE_ENV must be one of: {choices}"
),
)
# => Environment variable "NODE_ENV" invalid: ['NODE_ENV must be one of: production, development']

# multiple validators
env.str("EMAIL", validate=[Length(min=4), Email()])
# => Environment variable "EMAIL" invalid: ['Shorter than minimum length 4.', 'Not a valid email address.']

在這里,我們通過 validate 方法,并傳入一些判斷條件。如 NODE_ENV 只允許傳入 production 和 develpment 其中之一;EMAIL 必須符合 email 的格式。

這里依賴于 marshmallow 這個庫,里面有很多驗證條件,大家可以了解下。

如果不符合條件的,會直接拋錯,例如:

marshmallow.exceptions.ValidationError: ['Invalid value.']

關于 marshmallow 庫的用法,大家可以參考:https://marshmallow.readthedocs.io/en/stable/,后面我也抽空寫一下介紹下。

最后再附一點我平時定義環(huán)境變量的一些常見寫法,如:

import platform
from os.path import dirname, abspath, join
from environs import Env
from loguru import logger

env = Env()
env.read_env()

# definition of flags
IS_WINDOWS = platform.system().lower() == 'windows'

# definition of dirs
ROOT_DIR = dirname(dirname(abspath(__file__)))
LOG_DIR = join(ROOT_DIR, env.str('LOG_DIR', 'logs'))

# definition of environments
DEV_MODE, TEST_MODE, PROD_MODE = 'dev', 'test', 'prod'
APP_ENV = env.str('APP_ENV', DEV_MODE).lower()
APP_DEBUG = env.bool('APP_DEBUG', True if APP_ENV == DEV_MODE else False)
APP_DEV = IS_DEV = APP_ENV == DEV_MODE
APP_PROD = IS_PROD = APP_DEV == PROD_MODE
APP_TEST = IS_TEST = APP_ENV = TEST_MODE

# redis host
REDIS_HOST = env.str('REDIS_HOST', '127.0.0.1')
# redis port
REDIS_PORT = env.int('REDIS_PORT', 6379)
# redis password, if no password, set it to None
REDIS_PASSWORD = env.str('REDIS_PASSWORD', None)
# redis connection string, like redis://[password]@host:port or rediss://[password]@host:port
REDIS_CONNECTION_STRING = env.str('REDIS_CONNECTION_STRING', None)

# definition of api
API_HOST = env.str('API_HOST', '0.0.0.0')
API_PORT = env.int('API_PORT', 5555)
API_THREADED = env.bool('API_THREADED', True)

# definition of flags
ENABLE_TESTER = env.bool('ENABLE_TESTER', True)
ENABLE_GETTER = env.bool('ENABLE_GETTER', True)
ENABLE_SERVER = env.bool('ENABLE_SERVER', True)

# logger
logger.add(env.str('LOG_RUNTIME_FILE', 'runtime.log'), level='DEBUG', rotation='1 week', retention='20 days')
logger.add(env.str('LOG_ERROR_FILE', 'error.log'), level='ERROR', rotation='1 week')

這里定義了一些開發(fā)環(huán)境、日志路徑、數(shù)據(jù)庫連接、API 設置、開關設置等等,是從我之前寫的一個代理池項目拿來的,大家可以參考:https://github.com/Python3WebSpider/ProxyPool。

好了,以上就是一些環(huán)境變量的定義方法。

如果文章對你有幫助,歡迎轉發(fā)/點贊/收藏~

作者:崔慶才
來源:進擊的Coder


_往期文章推薦_

Python中常見的配置文件寫法




如需了解付費精品課程教學答疑服務
請在Crossin的編程教室內回復: 666

瀏覽 40
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩在线观看视频免费| 一区二区无码精品| 97伊人超碰| 久在草| 色青娱乐| 日本人妻A片成人免费看片| 六月激情婷婷| 91在线网址| 超碰2022| 北条麻妃JUX-869无码播放 | 露脸丨91丨九色露脸| 亚洲成人无码AV| 日韩在线中文字幕视频| 老熟妇搡BBBB搡BBBB| 老鸭窝成人视频| 热久久久久久| 欧美老妇大BBBBXXXX| 瘦精品无码一区二区三区四区五区六区七区八区 | 日韩精品人妻中文字幕有| 日韩一级性爱视频| 成人免费视频网站| 狠狠干老司机| 国产AV一区二区三区四区五区 | 亚洲一区2区| 国产免费国产| 操b在线免费观看| 欧美色色色网| 69久久久久久久久久| 亚洲av影院| 无码AV网站| 3D动漫啪啪精品一区二区中文字幕| 五月天无码在线| 亚洲一区二区三区在线视频| 动漫一区二区| 久久国色| 蜜臂AV| 伊人大香蕉在线网| 亚洲AV无码精品岛国| 安徽妇搡BBBB搡BBBB,另类老妇 | 操逼日爱| 亚洲三级片在线观看| 亚洲www啪成人一区二区麻豆| 五月婷婷深深爱| 中文字幕日韩视频| 97超碰资源| 青娱乐最新官网| 中文在线字幕免费观| 欧美囗交大荫蒂免费| 另类老妇奶性BBWBBwBBw| 大香蕉伊人综合在线| 日日干网| 天堂AV无码AV| 国产黄色Av| 久久久久亚洲AV无码专区成人 | 特级特黄AAAAAAAA片| 69AV在线视频| 2021无码| 国产婷婷久久| 四虎884| 中文字幕国产精品| 久久噜噜噜精品国产亚洲综合| 国产香蕉在线观看| 日韩a视频| 99无码国产成人精品| 国产视频一区二区三区四区五区| 五月婷婷无码| 国产9熟妇视频网站| 久久五月视频| 婷婷五月丁香色| 九九九九国产| 日韩精品在线观看免费| 久久蝌蚪窝| 国产精品国三级国产a11| 2025AV在线| 91天堂在线| 中文字幕aV在线| 影音先锋麻豆| 黄色片在线观看视频| 青青草原视频在线| 伊人久久香| 91九色91蝌蚪91成人| 伊人性爱网| 豆花视频免费观看| 天天做天天爽| 大黑人荫蒂BBBBBBBBB| 成人免费毛片蓝莓| 中国老女人操逼视频| 草逼电影| 婷婷在线综合| 五月丁香激情视频| 色婷婷基地| 91人妻成人精品一区二区| 国产成人在线播放| 国产午夜激情| 欧美成人视频| 一区二区操逼| 无码国产传媒精品一区| 一区二区高清无码视频| 五月婷婷俺也去| 黄色片网站视频| 少妇一级婬片内射视频| 日韩小视频+国产| 日韩精品在线视频观看| 夫妻-ThePorn| www.豆花视频成人版| 婷婷国产精品| 婷婷五月丁香激情| 东京热在线免费观看| 久久久无码精品亚洲| 亚洲日韩Av无码中文字幕美国| 一级a片在线观看| 成人在线免费视频观看| 玖玖在线视频| 麻豆传媒视频观看| 国产主播精品在线| 久久燥| 日韩欧美a片| 国产无码做爱视频| 欧美成在线视频| 韩国三级HD久久精品| 国产精品中文| 日韩黄色在线| 久久精品国产亚洲| 国产成人无码A片免费看| 97无码| 亚洲Japanese办公室制服| 91无码视频在线观看| 久久婷婷青青| 免费A片在线| 日韩在线成人中文字幕亚洲| 日日搔av一区二区三区| 91精品内射| 大香蕉尹在线| 亚洲成人三级片| 国产一区二区三区在线| 亚卅毛片| 亚洲中文字幕无码爆乳av| 另类aV| 国产无码性爱| 久久久蜜桃| 69xx视频| 97pao| 成人片天天看片欧美一级| 色秘乱码一区二区三区| 日韩中文久久| 一区二区三区四区无码在线| 在线视频你懂| 91AV成人| 91av免费观看| 久久精品在线视频| 超碰超爽| 色色在线观看| 五月丁香六月色| 欧美在线免费视频| 国产精品1区| 久久爆乳一区二区三区| 免费18蜜桃久久19| 亚洲女人天堂AV| 偷拍视频图片综合网| 波多野结衣大战黑人| 无码一区二区三区在线观看| av不卡在线| 四房婷婷| 婬乱欧美一二三区| 色999亚洲人成色| 自拍视频国产| 91网站免费观看| 天天操中文字幕| 亚洲无码久久| 中字av| 69福利| 天天夜夜操操| 西西西444www无码视| 91狠狠综合| 国产免费一区二区三区免费视频| 国内精品人妻无码久久久影院蜜桃| 91熊猫| 波多野结衣一区二区三区在线观看| 人妻少妇无码精品| 乱伦精品| 国产久久视频在线观看| 欧美成人性爱在线| 香蕉AV777XXX色综合一区| 嫩小槡BBBB槡BBBB槡漫画| 内射毛片| 一级成人片在线观看| 无码人妻一区二区三一区免费n狂飙 | www.四虎成人网站| 北条麻妃精品青青久久价格| 懂色av懂色av粉嫩av| 亚洲乱码中文字幕| 97国产免费| 人人操人人射| 91精品国产一区二区三区四区大| 国产欧美成人在线| 日本操b| 中文字幕专区| A片在线免费播放| 91理伦| 69er小视频| 污网站免费在线观看| 久久精品在线| 亚洲精品18在线观看| 欧美老女人操逼视频| 北条麻妃中文字幕旡码| 狠狠欧美| 精品人妻一区二区免费蜜桃视频| 天美果冻麻豆国产一区| 久久久老熟女一区二区三区91| 国产精品不卡在线| 精品一区二区三区免费毛片| 亚洲成人在线播放| 激情开心站| 日韩在线看片| 国产艹逼视频| gogogo高清在线观看免费直播中国 | 夜夜骚av.一区二区三区四区| 小黄片在线看| 丁香五月在线观看| 青青操原| 精品AV无码| 亚洲欧洲中文字幕| 日本视频网| 免费在线观看亚洲| 国产精品911| 在线观看中文字幕av| 电家庭影院午夜| 欧美三级理论片| 青青草原在线| 高清无码学生妹| 色香蕉在线视频| 97精品在线观看| 天天干天天射天天操| 日韩一区欧美| 不卡视频一区| 黄色高清无码| 性爱一级视频| 欧美色图另类图片| 蜜桃BBwBBWBBwBBw| 偷拍视频网站北条麻妃| 高清无码不卡视频| 国产午夜免费| 成人福利视频| a片在线免费播放| 波多野结衣国产| 熟女导航| 黄色视频免费观看国产| 狠狠综合网| 成人黄色免费视频| 精精国产| 中文字幕乱码中文字幕电视剧| 欲色AV| 亚洲欧洲精品成人久久曰影片| av第一页| 人成视频在线观看| www.av在线播放| 撒尿BBw搡BBwBBw| 欧美成人精品AAA| 无码任你操| 码人妻免费视频| 成人免费毛片AAAAAA片| 精品无码一区二区三区四区五区| 日本高清视频免费观看| 中文字幕av久久久久久欧洲尺码 | 国产黄片在线免费观看| 日逼小视频| 乱子伦国产精品www| 欧美黄色A片| 大香蕉AV电影| 亚洲国产天堂| 乱码中文字幕日韩欧美在线| 伊人久久精品| 麻豆精品在线| 久久久婷婷五月亚洲国产精品 | 久久午夜无码鲁丝| 青青草成人在线| 欧美A片在线免费观看| 日韩高清无码网站| 福利一区二区| 欧美三级网址| 日本成人黄色视频| 国产高清在线免费观看AV片| 成年人黄色视频在线观看| 国产精品视频播放| 中国毛片视频| 国产二区三区| 亚洲AV无码一区二区三区少妇| 国产高清无码在线观看视频 | 永久免费不卡在线观看黄网站| 亚洲人妻影院| 激情欧美| 精品国产AV无码一区二区三区| 亚洲电影中文字幕| 毛片在线看片| 免费Av网站| 一区二区高清无码| 亚洲淫秽视频| 欧美9999| 欧美日韩一级二级三级| 国产性爱精品| 中字无码AV| 亚洲中文字幕观看| 欧美高清无码| 青青草逼视频| 激情操逼| 国产操逼无码| 国产三级片在线免费观看| 免费日韩AV| 蜜桃网站在线观看| 亚洲国产精品自在自线| 色片无码| 成人三级视频| 探花极品无套大学生| 日日干天天操| 日本在线免费视频| A片视频免费看| 国产传媒av| 国产真实露脸乱子伦对白高清视频 | 一本大道久久久久| 国产在线无码视频| 亚洲一本色道中文无码| 狠狠干中文字幕| 亚洲国产女人| 国产精品久久久久久久久久久久久| 欧美日韩中文| 污视频网站在线观看| 九九热九九| 91亚洲国产成人久久精品网站| 五月天性爱| 成人欧美一区二区三区在线观看| 国产A视频| 亚洲AV久久无码| 欧美日韩无码| 成人一区二区电影| 99超碰在线观看| 久久精品视频播放| 国产成人高潮毛片| 久艹99| 五月丁香免费视频| 午夜大黄片| 日本视频一区二区三区| 成人做爱免费看| 中文字幕av一区二区| 三级片在线观看网站| 囯产精品一区二区三区线一牛影视1 | 成人片无码| 成人免看一级a一片| 欧美另类色| www.色在线观看| 一级性爱| 日韩欧美中文在线观看| 91青青草视频| 婷婷丁香五月在线| 亚洲精品无码电影| 一级片国产| 国产又粗又长的视频| 久久久久久久AV| 日韩免费高清无码| 男人的天堂一区| 色婷婷电影| 欧美多人| 日韩在线视频观看| 日日操日日摸| 久久无码区| 亚洲无码www| 欧美黄片AAA| 国产欧美综合在线| 草碰在线视频| 亚洲免费观看高清完整版在va线观 | av中文在线观看| 国产免费av在线| 丁香激情五月| 97AV在线| 大奶一区二区| 久久女女| 福利视频导航自拍| 岛国免费av| 久久婷婷五月丁香| 9999久久久久| 欧美3p视频| 日韩美女毛片| 天天插天天狠天天透| 91无码高清视频| 国产一级a毛一级做a爱| 日韩无码视频一区二区| 国产精品成人视频| 亚洲精品视频免费观看| 三级电影久久麻豆| 人人澡人人澡人人| 亚洲中文字幕免费观看视频| 欧美群交在线| 大色AV| 大香蕉啪啪啪| 亚洲天堂精品视频| 成人无码欧美大片免费看| 国产在线观看av| aV一区二区三区| 北条麻妃久久| 探花在线综合| 欧美成人性爱网址| 黄片免费在线播放| 黄色国产在线| 欧美色图网站| 亚洲伊人综合| 人妻精品电影| 国产淫语| 九九精品免费视频| 日本黄色免费网站| 亚洲色偷精品一区二区三区| 国产一级特黄| 天天看天天射| 青青草公开视频| 青娱乐偷窥成| 免费操逼网| 国产黄色在线看| 日本无码一区二区| 91久久免费视频| 欧美性爱无码在线| 99视频在线播放| 精品国内自产拍在线观看视频| 成人免费视频性爱| 日韩激情片| 在线观看欧美黄片| 内射视频网站| 中文无码播放| 五月丁香婷中文字幕| 123操逼| 亚洲黄色视频网站在线观看| AV女优天堂| 91拍真实国产伦偷精品| 久久久精品欧美| 91麻豆精品91久久久久同性| 操欧美老女人| 肏逼综合网| 色婷操逼| 99精品在线免费观看| 日美女网站| 中文免费高清在线观看视频| 黄片一区二区三区| 午夜视频网站| 加勒比DVD手机在线播放观看视频| 91青青草视频| 中文字幕精品视频在线| 日本AI高清无码在线观看网址 | 51国产视频| 天天日天天爽| 三级黄色毛片| 日本国产黄色| 强伦轩人妻一区二区三区最新版本更新内容 | 日韩av第一页| 国产A片免费视频| 安徽妇搡BBB搡BBBB户外老太太 | 亚洲高清人妻| 欧美精品一二三区| 夜夜av| 白峰美羽人妻AND-499| 91嫩草久久久天美传媒| 日韩乱伦中文字幕| 天堂中文在线a| 色77777| AV色片| 91久久超碰| 大香蕉福利视频导航| 欧美性爱91| 草逼视频免费看| 午夜福利sw| 夜夜国自一区| 久久亚洲免费视频| 久久国产热| 91性爱小视频| 欧美日韩国产一区二区| 欧美啊啊啊| 西西4444www大胆无吗| 美女被操免费网站| 性欧美69| 亚洲色图自拍| 日韩在线视频网| 五月天婷婷视频| 可以免费看AV的网站| 日本有码中文字幕| 91迷奸| 日本中文字幕在线视频| 色噜噜狠狠一区二区三区牛牛影视| 亚洲日韩AV电影| 视频一区在线观看| 亚洲天堂男人| 国产又粗又猛又爽又黄91精品 | 亚洲夜夜撸| 自拍偷拍15p| av天堂一区| 91蝌蚪久久| 日韩在观看线| 日本综合色| 国产精品囯产三级囯产AV野外 | 国产av播放| 毛片2| 欲色AV| 九九热超碰| 亚洲午夜精品成人毛片| 日本一区二区三区四区在线观看 | 国产精品揄拍500视频| 可以看的黄色视频| 性爱午夜视频| 亚洲成人在线免费观看| 婷婷五月丁香激情| 成人性爱视频网| 加勒比无码综合| 一区二区三区在线看| 中文字幕第2页| 成人一级a片| 蝌蚪窝在线视频观看| 日本精品乱伦| 国产乱码一区二区三区的解决方法 | 69AV在线视频| 天天添| 日韩色情网| www.seses| 亚洲高清无码在线观看| 一级黄色视频在线观看| 日本中文字幕免费| 一区二区三区无码专区| 欧美一道本在线| 日韩毛片在线观看| 国产一级a毛一级a毛视频在线网站 | 精品AV国产| 91av视频| 五十路在线视频| 91人人看| 成人理伦A级A片在线论坛| 成人高清在线| 日本无码区| 国精产品一区二区三区| 美日韩中文字幕| 国产黄色视频在线免费看| 久久伊人电影| 91在线成人视频| 日本高清视频网站网wwwwww| 亚洲视频一区二区| 中文字幕观看在线| 在线观看视频免费无码免费视频| 日韩欧美三级在线| 一道本不卡视频| 婷婷五月天激情俺来也| 91玖玖| 97人妻在线视频| 青青草精品在线视频| 日韩欧美三级在线| 亚洲日本一区二区三区| 欧美午夜精品久久久| 夜夜操夜夜爽| 91成人小电影| 成人欧美精品区二区三| A片国产| 欧美性爱AAA| 婷婷五月激情中文字幕| 国产男女性爱视频播放| 无码免费观看视频| 亚洲成人视频免费观看| 无码骚逼| 精品AV无码| 一级特黄毛片| AV-ThePorn| 免费看A级片| 黄片网址| 久久国产免费| 五月色综合| 春宵福利导航| 亚洲日韩成人在线| 午夜黄色视频在线观看| 97伊人超碰| 人妻体体内射精一区二区| 亚洲色在线播放| 国产美女裸体网站| 成人做爰A片AAA毛真人| 亚洲加勒比在线| 91视频www| 国产成人精品av在线观看| 成年人视频免费| 亚洲七区| 欧美精品一区二区三区蜜臀| 国产精品欧美综合在线| 狠狠干综合| 日本黄色三级视频| 成人网站av| 日韩黄色三级| 日韩亚洲中文字幕| 黄色天堂| 5D肉蒲团| 少妇一级婬片内射视频| 亚洲一卡| 亚洲国产av一区| 美女黄色视频永费在线观看网站| 51无码| 日韩欧美国产高清91| 亚洲色图在线视频| 日批免费网站| 欧美日韩在线电影| 俺也去大香蕉| 欧美精品成人免费| 操女人大逼| 北条麻妃三区| 亚洲天堂AV在线观看| 亚洲无码中文字幕视频| 亚洲欧美久久久久久久久久久久| 天天爽夜夜爽AA片免费| 国产一区二区做爱| 无码激情| 高清无码黄片| 青娱乐亚洲领先| 囯产精品宾馆在线精品酒店| 午夜三级福利| 亚洲免费观看高清完整版在va线观 | 国产精品免费一区二区三区四区视频| av日韩在线播放| 中文字幕高清无码在线播放| 天天日天天干麻豆| 美女性爱3P视频| 国产一级A片| 亚洲无码播放| 国产午夜激情| 99热超碰| 中文字幕日韩人妻| 内射学生妹| 日韩视频一区二区| 成人视频在线播放| 成人做爰A片一区二区app| a免费视频| 东北女人操逼| 免费的A片| 精品成人在线| 搡BBBB| 蜜桃BBwBBWBBwBBw| 国产91精品看黄网站在线观看 | 日本成人免费| 91精品国产91久久久久久吃药| 婷婷在线影院| 在线黄网站| 黄一区二区| 色综合九九| 六月丁香综合| 无码男女| 韩国成人免费无码免费视频| 伊人大香蕉在线网| 苍井空一区二区三区四区| 免费v在线观看| 色综合九九| 日韩AⅤ无码一区二区三区| 大香蕉AV电影| 青娱乐亚洲视频在线| 大地资源中文第二页导读内容| 精品久久无码中文字幕| 日本久久播| 免费在线观看黄色网址| 大香蕉熟女| 亚洲丰满熟妇| 中文字幕天堂在线| 色噜噜人妻av中文字幕| 97精品人妻一区二区三区香蕉| 成人在线一区二区三区| 色哟哟在线观看| 一区二区三区观看| 蜜桃传媒av| 国产第56页| 在线观看网址你懂的| 深夜福利18| 99热青青草| 91禁樱桃在线| 日韩人妻无码中文字幕| 精品人妻一区二区免费蜜桃视频| 人人操av| 狠狠操在线视频| www99热| 国产精品无码一区二区三区免费| 中文无码在线| 国产精品欧美综合在线| 国产成人精品无码片区在线观91| 夜色321| 91美女操逼视频| 啪啪视频m3u8| 在线免费观看成人网站| 色婷在线视频| 精品一区二区三区四区五区六区 | 韩国三级HD久久精品HD| 操逼啦| 国产一级A片久久久免费看快餐| 无码人妻精品一区二区三千菊电影| 88AV在线| 精品乱子伦一区二区三区| 国产一级AAAAA片免费| 国产免费一区二区三区| 国产又粗又长又硬黄色一级片 | 狼友视频报放| 国产精品久久久久久亚洲毛片| 粉嫩小泬BBBB免费看| 国产乱子伦一区二区三区视频| 亚洲天堂三级片| 99免费热视频在线| 安徽妇搡BBBB搡BBBB按摩| 撒尿BBw搡BBwBBw| 蜜桃视频一区二区三区四区使用方法| 天天摸夜夜操| 91精品国自产在线观看| 亚洲视频一区二区| 久久一级片| 國模久久| 国产三级偷拍| 中文字幕丰满的翔田千里| 中文字幕免费在线观看视频| 国产精品无码中文在线| 国产一级婬乱片AV片AAA毛片| 中文有码在线| 国产成人A| 欧美成人久久| 91成人视频| 久久6热| 大香蕉久久久久久久| 人人妻人人操人人干| 成人毛片18| 人人爽久久涩噜噜噜网站| 91成人一区| av不卡在线| 精品在线播放| 亚洲AⅤ欧美AⅤ| 热久久视频| 成人精品一区二区无码| 日韩美女免费视频| 色情片在线观看| 99涩涩| 天堂中文字幕在线观看| 成人小说视频在线社区| 老司机在线免费视频| 先锋AV资源站| 丁香五月婷婷中文字幕| 日皮在线观看| 色婷婷AV一区二区三区软件| 奇米狠狠干| 国产精品色在线回看| 蜜桃av久久久亚洲精品| 亚洲天堂国产视频| 日韩A片在线| 精品成人一区二区三区| 亚洲精品在线观看视频| 免费在线a| 人妻公日日澡久久久| 日韩熟妇人妻中文字幕| 色情网站在线| 久草国产精品| 国产精品久久久久久久久久久免费看 | 国产激情av| 亚洲性爱片| 成年人免费网站| 国产主播第一页| 亚洲偷拍网| 久久精品视频18| 日韩欧美亚洲| 专肏老妇人大逼| 午夜视频网站| 久久男人| 三级三级久久三级久久18| 丁香五月在线观看| 国产AV日韩AⅤ亚洲AV中文| 在线视频播放| 在线观看国产小视频| 99视频久久| 香蕉伊人网| 亚洲三级网站在线观看| 日本日逼网| 国产97在线视频| 国内精品卡一卡二卡三| 青青草视频在线免费观看| 91成人情欲影视网| 亚洲成人电影天堂| 激情综| 中文字幕不卡视频| 波多野结衣无码视频在线观看 | 91迷奸| 看免费操逼视频| 亚洲无码免费播放| 操片免费| 亚洲视频区| 四川妇搡BBBB搡BBBB| 91久久久久久久久久久久18| 99久久婷婷国产综合精品hsex| 自拍偷拍视频网站| 欧美色色网| 成人网站视频| 好操吊| 成人做爰100部免费网站| 蜜桃一区二区三区| 搞搞电影91| 成人自拍电影| 大茄子熟女AV导航| 在线日韩视频| 中文字幕免| 蜜桃人妻无码AV天堂三区| 亚洲欧美网站| 久久成人免费| 大香蕉亚洲成人| 久久久精品中文字幕麻豆发布| 六月婷婷中文字幕| 国产白丝在线观看| 日本成人午夜福利| 国产欧美日韩综合在线视频| 欧美又粗又长| 久草综合视频| 亚洲人在线观看| 男女福利视频| 91爱搞| 操操操操操| 狼人综合色| 国产熟妇码视频app| 五月天狠狠干| 苍井空亚洲精品AA片在线播放| 精品国产一级A片黄毛网站 | 亚洲狼人综合网| AV在线资源网| 成人自拍视频| 国产成人三级片在线观看| 亚洲精品女人久久久| 五月开心婷婷| 亚洲天堂av在线观看| 中国美女一级黄片| 国产伦精一品二品三品app| 91成人亚洲| 亚洲精品一区二区三区四区高清| 大香蕉9999| 国产精品国产精品国产专区不卡 | 精品AAA| 国产精品无码专区AV免费播放| 日本黄色电影网址| 亚洲AV无码成人精品区东京热| 国产精品扒开腿做爽爽爽视频| 91九色91蝌蚪91窝成人| 亚洲第一成人网站| 日韩在线综合网| 999大香蕉| 露脸丨91丨九色露脸| 120分钟婬片免费看| 色欲欲www成人网站| 陈冠希和张柏芝mv| 黄色亚洲无码| 黄色片无码| 午夜成人免费视频| 一区二区三区操逼| 亚洲综合视频网| 成人AV中文解说水果派| 天堂无线av无码av| 久久久91人妻无码精品蜜桃ID | 爽好紧别夹喷水欧美| 亚洲日韩在线a成| 中文成人无字幕乱码精品区| 亚洲操操操| 囯产一级黄片| 裸体美女视频欧美18| 亚洲国产一区二区三区| 黄色污污污网站| 精品蜜桃秘一区二区三区在线播放| 成人无码一区二区| 少妇熟女视频一区二区三区| 日本精品黄色| 日韩综合一区| 青青操原| 豆花视频免费观看| 97精品国产| 免费的a片| 国产AV久久| 成人黄色免费视频| 午夜福利老司机| 日韩经典无码| 88AV视频| 国产91无码| 热久久久久| 嫩BBB槡BBBB槡BBB小号| 91鲁| 日韩一二三| 大香蕉玖玖| 这里只有精品久久| 97人妻精品| 日韩成人免费在线| 九九精品久久| 超碰老熟女| 亚洲欧美日韩动漫| www.干| 黄色网页免费观看| 这里只有精品在线观看| 91一区| 91av一区二区三区| 99色网站| 日韩成人黄色视频| 亚洲性爱在线视频| AV电影在线观看| 大香蕉大香蕉免费网| 伊人中文在线| 日本黄色视频电影| 高清中文字幕在线A片| 午夜香蕉| www.av在线播放| 久久精品www人人爽人人| 中文字幕片av| 精品视频日韩|