第1章 初識Flask

1.1 虛擬環(huán)境

1.1.1 為什么需要虛擬環(huán)境

學(xué)習(xí)Flask之前抵碟,我們所有的第三方包安裝都是直接通過pip install xx的方式進行安裝的解总,這樣安裝會將那個包安裝到你的系統(tǒng)級的Python環(huán)境中秩仆。但是這樣有一個問題,就是如果你現(xiàn)在用Flask 1.1.x寫了個網(wǎng)站,然后你的領(lǐng)導(dǎo)跟你說,之前有一個舊項目是用Flask 1.0.x開發(fā)的叙甸,讓你來維護,但是Flask 1.1不再兼容Flask 1.0的一些語法了位衩。這時候就會碰到一個問題裆蒸,我如何在我的電腦中同時擁有Flask 1.1Flask 1.0兩套環(huán)境呢?這時候我們就可以通過虛擬環(huán)境來解決這個問題糖驴。

1.1.2 虛擬環(huán)境原理介紹

虛擬環(huán)境相當(dāng)于一個抽屜光戈,在這個抽屜中安裝的任何軟件包都不會影響到其他抽屜哪痰。并且在項目中遂赠,我可以指定這個項目的虛擬環(huán)境來配合我的項目久妆。比如我們現(xiàn)在有一個項目是基于Flask 1.1.x版本,又有一個項目是基于Flask 1.0.x的版本跷睦,那么這時候就可以創(chuàng)建兩個虛擬環(huán)境筷弦,在這兩個虛擬環(huán)境中分別安裝Flask 1.1.xFlask 1.0.x來適配我們的項目。

1.1.3 安裝virtualenv

virtualenv是用來創(chuàng)建虛擬環(huán)境的軟件工具抑诸,我們可以通過pip或者pip3來安裝:

pip install virtualenv
pip3 install virtualenv

1. 創(chuàng)建虛擬環(huán)境

創(chuàng)建虛擬環(huán)境非常簡單烂琴,通過以下命令就可以創(chuàng)建了:

virtualenv [虛擬環(huán)境的名字]

如果你當(dāng)前的Python3/Scripts的查找路徑在Python2/Scripts的前面,那么將會使用python3作為這個虛擬環(huán)境的解釋器蜕乡。如果python2/Scriptspython3/Scripts前面奸绷,那么將會使用Python2來作為這個虛擬環(huán)境的解釋器。

2. 進入環(huán)境

虛擬環(huán)境創(chuàng)建好了以后层玲,那么可以進入到這個虛擬環(huán)境中号醉,然后安裝一些第三方包,進入虛擬環(huán)境在不同的操作系統(tǒng)中有不同的方式辛块,一般分為兩種畔派,第一種是Windows,第二種是*nix

  1. windows進入虛擬環(huán)境:進入到虛擬環(huán)境的Scripts文件夾中润绵,然后執(zhí)行activate线椰。

  2. *nix進入虛擬環(huán)境:source /path/to/virtualenv/bin/activate 一旦你進入到了這個虛擬環(huán)境中,你安裝包尘盼,卸載包都是在這個虛擬環(huán)境中憨愉,不會影響到外面的環(huán)境。

3. 退出虛擬環(huán)境

退出虛擬環(huán)境很簡單卿捎,通過一個命令就可以完成:deactivate配紫。

4. 創(chuàng)建虛擬環(huán)境的時候指定Python解釋器

在電腦的環(huán)境變量中,一般是不會去更改一些環(huán)境變量的順序的娇澎。也就是說比如你的Python2/ScriptsPython3/Scripts的前面笨蚁,那么你不會經(jīng)常去更改他們的位置。但是這時候我確實是想在創(chuàng)建虛擬環(huán)境的時候用Python3這個版本趟庄,這時候可以通過-p參數(shù)來指定具體的Python解釋器:

   virtualenv -p C:\Python36\python.exe [virutalenv name]

1.1.4 virtualenvwrapper

virtualenvwrapper這個軟件包可以讓我們管理虛擬環(huán)境變得更加簡單括细。不用再跑到某個目錄下通過virtualenv來創(chuàng)建虛擬環(huán)境,并且激活的時候也要跑到具體的目錄下去激活戚啥。

1. 安裝 virtualenvwrapper

  1. *nix下安裝:pip install virtualenvwrapper

  2. Windows下安裝:pip install virtualenvwrapper-win

2. virtualenvwrapper基本使用

  1. 創(chuàng)建虛擬環(huán)境:
  mkvirtualenv my_env

那么會在你當(dāng)前用戶下創(chuàng)建一個Env的文件夾奋单,然后將這個虛擬環(huán)境安裝到這個目錄下。 如果你電腦中安裝了python2python3猫十,并且兩個版本中都安裝了virtualenvwrapper览濒,那么將會使用環(huán)境變量中第一個出現(xiàn)的Python版本來作為這個虛擬環(huán)境的Python解釋器呆盖。

  1. 切換到某個虛擬環(huán)境:
   workon my_env
  1. 退出當(dāng)前虛擬環(huán)境:
   deactivate
  1. 刪除某個虛擬環(huán)境:
    rmvirtualenv my_env
  1. 列出所有虛擬環(huán)境:
    lsvirtualenv
  1. 進入到虛擬環(huán)境所在的目錄:
   cdvirtualenv

3. 修改mkvirtualenv的默認路徑

我的電腦->右鍵->屬性->高級系統(tǒng)設(shè)置->環(huán)境變量->系統(tǒng)變量中添加一個參數(shù)WORKON_HOME,將這個參數(shù)的值設(shè)置為你需要的路徑贷笛。

4. 創(chuàng)建虛擬環(huán)境的時候指定Python版本

在使用mkvirtualenv的時候应又,可以指定--python的參數(shù)來指定具體的python路徑:

 mkvirtualenv --python==C:\Python36\python.exe my_env

1.2 認識web

1.2.1 url詳解

URLUniform Resource Locator的簡寫,統(tǒng)一資源定位符乏苦。

一個URL由以下幾部分組成:

 scheme://host:port/path/?query-string=xxx#anchor
  • scheme:代表的是訪問的協(xié)議株扛,一般為http或者https以及ftp等。

  • host:主機名汇荐,域名洞就,比如www.baidu.com

  • port:端口號掀淘。當(dāng)你訪問一個網(wǎng)站的時候旬蟋,瀏覽器默認使用80端口。

  • path:查找路徑革娄。比如:www.reibang.com/trending/now倾贰,后面的trending/now就是path

  • query-string:查詢字符串稠腊,比如:www.baidu.com/s?wd=python躁染,后面的wd=python就是查詢字符串。

  • anchor:錨點架忌,后臺一般不用管吞彤,前端用來做頁面定位的。

注意:URL中的所有字符都是ASCII字符集叹放,如果出現(xiàn)非ASCII字符饰恕,比如中文,瀏覽器會進行編碼再進行傳輸井仰。

1.2.2 web服務(wù)器和應(yīng)用服務(wù)器以及web應(yīng)用框架

  • web服務(wù)器:負責(zé)處理http請求埋嵌,響應(yīng)靜態(tài)文件,常見的有Apache俱恶,Nginx以及微軟的IIS.

  • 應(yīng)用服務(wù)器:負責(zé)處理邏輯的服務(wù)器雹嗦。比如phppython的代碼合是,是不能直接通過nginx這種web服務(wù)器來處理的了罪,只能通過應(yīng)用服務(wù)器來處理,常見的應(yīng)用服務(wù)器有uwsgi聪全、tomcat等泊藕。

  • web應(yīng)用框架:一般使用某種語言,封裝了常用的web功能的框架就是web應(yīng)用框架难礼,flask娃圆、Django以及Java中的SSH(Structs2+Spring3+Hibernate3)框架都是web應(yīng)用框架玫锋。

1.2.3 Content-type和Mime-type的作用和區(qū)別

兩者都是指定服務(wù)器和客戶端之間傳輸數(shù)據(jù)的類型,區(qū)別如下:

  • Content-type:既可以指定傳輸數(shù)據(jù)的類型讼呢,也可以指定數(shù)據(jù)的編碼類型撩鹿,例如:text/html;charset=utf-8
  • Mime-type:不能指定傳輸?shù)臄?shù)據(jù)編碼類型。例如:text/html

常用的數(shù)據(jù)類型如下:

  • text/html(默認的吝岭,html文件)

  • text/plain(純文本)

  • text/css(css文件)

  • text/javascript(js文件)

  • application/x-www-form-urlencoded(普通的表單提交)

  • multipart/form-data(文件提交)

  • application/json(json傳輸)

  • application/xml(xml文件)

1.3 Flask簡介

Flask是一款非常流行的Python Web框架三痰,出生于2010年,作者是Armin Ronacher,本來這個項目只是作者在愚人節(jié)的一個玩笑窜管,后來由于非常受歡迎,進而成為一個正式的項目稚机。目前為止最新的版本是1.1.2幕帆。

Flask自2010年發(fā)布第一個版本以來,大受歡迎赖条,深得開發(fā)者的喜愛失乾,并且在多個公司已經(jīng)得到了應(yīng)用,Flask能如此流行的原因纬乍,可以分為以下幾點:

  • 微框架碱茁、簡潔、只做他需要做的仿贬,給開發(fā)者提供了很大的擴展性纽竣。

  • Flask和相關(guān)的依賴(Jinja2Werkzeug)設(shè)計得非常優(yōu)秀茧泪,用起來很爽蜓氨。

  • 開發(fā)效率非常高,比如使用SQLAlchemyORM操作數(shù)據(jù)庫可以節(jié)省開發(fā)者大量書寫sql的時間队伟。

  • 社會活躍度非常高穴吹。

Flask的靈活度非常之高,他不會幫你做太多的決策嗜侮,即使做已經(jīng)幫你做出選擇港令,你也能非常容易的更換成你需要的,比如:

  • 使用Flask開發(fā)數(shù)據(jù)庫的時候锈颗,具體是使用SQLAlchemy還是MongoEngine或者是不用ORM而直接基于MySQL-Python這樣的底層驅(qū)動進行開發(fā)都是可以的顷霹,選擇權(quán)完全掌握在你自己的手中。區(qū)別于Django宜猜,Django內(nèi)置了非常完善和豐富的功能泼返,并且如果你想替換成你自己想要的,要么不支持姨拥,要么非常麻煩绅喉。

  • 把默認的Jinija2模板引擎替換成Mako引擎或者是其他模板引擎都是非常容易的渠鸽。

1.3.1 flask文檔

中文文檔: https://dormousehole.readthedocs.io/en/latest/

英文文檔: https://flask.palletsprojects.com/en/1.1.x/

1.3.2 安裝Flask

我們可以通過pip或者pip3來安裝Flask

 # Python2或者Python3安裝方式
 pip install flask
# Python3安裝方式
 pip3 install flask

執(zhí)行上面命令后,除了安裝Flask包外柴罐,同時被安裝的還有5個依賴包徽缚,它們的介紹如圖所示:

Flask安裝依賴

1.4 第一個Flask程序

用Pycharm新建一個Flask項目,新建項目的截圖如下:

img

點擊后創(chuàng)建一個新項目革屠,然后在文件中書寫代碼:

 #coding: utf8
?
 # 從flask這個包中導(dǎo)入Flask這個類
 # Flask這個類是項目的核心凿试,以后很多操作都是基于這個類的對象
 # 注冊url、注冊藍圖等都是基于這個類的對象
 from flask import Flask
?
 # 創(chuàng)建一個Flask對象似芝,傳遞__name__參數(shù)進去
 # __name__參數(shù)的作用:
 # 1. 可以規(guī)定模版和靜態(tài)文件的查找路徑
 # 2. 以后一些Flask插件那婉,比如Flask-migrate、Flask-SQLAlchemy如果報錯了党瓮,那么Flask
 # 可以通過這個參數(shù)找到具體的錯誤位置
 app = Flask(__name__)
?
 # app.route裝飾器映射URL和執(zhí)行的函數(shù)详炬。這個設(shè)置將根URL映射到了hello_world函數(shù)上
 # @app.route:是一個裝飾器
 # @app.route('/')就是將url中的/映射到hello_world這個視圖函數(shù)上面
 # 以后你訪問我這個網(wǎng)站的/目錄的時候,會執(zhí)行hello_world這個函數(shù)寞奸,然后將這個函數(shù)的返回值
 # 返回給瀏覽器呛谜。
 # wwww.baidu.com/ -> hello_world函數(shù)
 @app.route('/')
 def hello_world():
 return 'Hello World!'


?  # 如果這個文件是作為一個主文件運行,那么就執(zhí)行app.run()方法
  # 也就是啟動這個網(wǎng)站
 if __name__ == '__main__':
 # app.run()
 # 運行本項目枪萄,host=0.0.0.0可以讓其他電腦也能訪問到該網(wǎng)站隐岛,port指定訪問的端口。默認的host是127.0.0.1瓷翻,port為5000
 app.run(host='0.0.0.0',port=9000)

然后點擊運行聚凹,在瀏覽器中輸入 http://127.0.0.1:9000就能看到hello world了。需要說明一點的是逻悠,app.run這種方式只適合于開發(fā)元践,如果在生產(chǎn)環(huán)境中,應(yīng)該使用Gunicorn或者uWSGI來啟動童谒。如果是在終端運行的单旁,可以按ctrl+c來讓服務(wù)停止。

1.4.1 用Flask內(nèi)置命令行的方式啟動Flask

上面例子是通過Pycharm點擊運行來啟動Flask或者使用cmd來啟動Flask(cmd進入項目目錄然后輸入python app.py)饥伊,其實Flask通過依賴包Click內(nèi)置了一個CLI象浑,我們可以執(zhí)行Flask內(nèi)置的命令來啟動Flask:

通過Flask內(nèi)置命令啟動Flask服務(wù)
flask run命令還可以指定主機和端口,只需要在后面加上--host=0.0.0.0 --port=8000琅豆,這兩個配置可以指定其中任意一個也可以兩個同時指定:
指定主機和端口
需要注意的是因為我們的主模塊名為app.py愉豺,所以flask run命令會自動尋找程序?qū)嵗绻覀兊闹鞒绦蚰K是其他名稱茫因,比如hello.py蚪拦,那么需要設(shè)置環(huán)境變量FLASK_APP,否則運行flask run將找不到主模塊,不能啟動Flask服務(wù)驰贷。

# Linux或macOS系統(tǒng)設(shè)置FLASK_APP
$ export FLASK_APP=hello
# Windows系統(tǒng)設(shè)置FLASK_APP
> set FLASK_APP=hello

1.4.2 Flask依賴包Click內(nèi)置的其他命令

Flask除了內(nèi)置flask runset FLASK_APP命令外還有一些其他命令:

  • set FLASK_ENV:設(shè)置運行環(huán)境有兩個取值development(開發(fā)環(huán)境)和production(生產(chǎn)環(huán)境)盛嘿,默認是生產(chǎn)環(huán)境,設(shè)置為開發(fā)環(huán)境會自動開啟debug調(diào)試
  • flask shell:類似于Python shell括袒,會打開shell命令模式次兆,自動包含flask程序上下文,以及已經(jīng)導(dǎo)入的app實例
  • flask --help:查看Flask可用的命令及其說明文檔
    設(shè)置開發(fā)環(huán)境
    flask shell命令

1.4.3 自定義Flask命令

除了Flask內(nèi)置的命令锹锰,我們還可以自定義命令芥炭,自定義命令分以下幾步:

  • 建立任意一個函數(shù)
  • 為所建函數(shù)添加app.cli.command()裝飾器,裝飾器里可以添加參數(shù)恃慧,這個參數(shù)會作為運行時的命令名稱园蝠,不添加參數(shù),默認使用自定義的函數(shù)名稱為命令名稱
  • 然后在CLI下運行flask 自定義函數(shù)名
    例如我們自定義一個hello()命令函數(shù)糕伐,我們運行自定義命令時會在CLI中輸出hello world砰琢!
import click

# 可以在裝飾器里添加參數(shù),這個參數(shù)會作為運行時的命令名稱
# 如@app.cli.command('say-hello')良瞧,運行時輸入 flask say-hello
@app.cli.command()
def hello():
  # click模塊的echo()函數(shù)可以在命令界面輸出字符
  click.echo('hello world!')
自定義命令

1.5 app初始化參數(shù)

app = Flask()的可選參數(shù):
import_name: 導(dǎo)入路徑(尋找靜態(tài)目錄與模板目錄位置的參數(shù)),一般寫__name__训唱。
static_url_path:訪問靜態(tài)資源的前綴褥蚯,默認static,這個前綴目錄下都是靜態(tài)資源况增。
static_folder: 靜態(tài)目錄的名字赞庶,默認static,其實就是項目中項目目錄存放靜態(tài)資源文件夾的名字澳骤。
template_folder: 模板目錄的名字歧强,默認templates, 其實就是項目中項目目錄存放模板文件文件夾的名字为肮。

from flask import Flask

app = Flask(__name__,static_url_path='data'摊册,static_folder="front",template_folder="html_source" )
""" 
  這樣定義后,我們在瀏覽器訪問靜態(tài)資源就不能使用默認的前綴static(http://127.0.0.1:5000/static/01.jpg)颊艳,
  需要加上data前綴茅特,http://127.0.0.1:5000/data/01.jpg,而且我們項目目錄中存放靜態(tài)資源的文件夾的名字
  就不能是默認的static而要用定義了的front棋枕,最后我們項目目錄中存放模板的文件夾的名字就不能是默認templates白修,
  而要使用定義的html_source
"""

1.6 配置參數(shù)

有5種方式來設(shè)置Flask的配置參數(shù),使用app.config.from_pyfileapp.config.from_object重斑,app.config.upgrade()兵睛,app.config[key]=valueapp.config.from_envvar是從虛擬環(huán)境中讀取配置參數(shù)(一般不用):

  1. 使用配置文件,項目里新建一個文件(文件可以是.py文件或者.txt文件等)祖很,把相關(guān)的配置寫到該文件中然后通過app對象的config屬性的from_pyfile 方式來導(dǎo)入配置文件笛丙。如在項目目錄中定義配置文件為"config.cfg",在程序中引入配置文件方式:app.config.from_pyfile("config.cfg")突琳,路徑可以是相對路徑或者絕對路徑若债,這種方式,可以傳遞silent=True拆融,那么這個靜態(tài)文件沒有找到的時候蠢琳,不會拋出異常漾月,我們在文件中定義的配置參數(shù)也不會生效占业。
app.config.from_pyfile('config.cfg',silent=True)
# silent=True表示如果配置文件不存在的時候不拋出異常,默認是為False惦费,會拋出異常趟脂。
  1. 從對象中導(dǎo)入泰讽,一般是定義一個配置參數(shù)的類(類名可以自定義,一般類名是Config)昔期,再把相關(guān)的參數(shù)配置以類屬性的方式定義已卸,然后通過app對象的config屬性的from_ object方式來導(dǎo)入。如定義一個Config類:
class Config(object):  
        DEBUG = True
# 導(dǎo)入方式
app.config.from_object(Config)

導(dǎo)入方式:app.config.from_object(Config),可以不用實例化一個Config對象硼一,因為類也是對象累澡,flask會自動從Config類中讀取參數(shù)

也可以在項目目錄里定義一個.py文件,然后在主app文件中導(dǎo)入般贼,再使用app.config.from_object()的方式來配置愧哟,這種方式和使用app.config.from_pyfile()不同在于需要導(dǎo)入.py文件,而且app.config.from_pyfile()方式不要導(dǎo)入但是需要指定配置文件位置及其文件后綴

# 導(dǎo)入項目目錄里定義的config.py文件
import config

# 配置config
app.config.from_object(config)
  1. 可以通過app.config[key]=value哼蛆,類似于字典的方式直接把相關(guān)的配置參數(shù)加上蕊梧。如:
app = Flask(__name__)
app.config['DEBUG'] = True
  1. 通過app.config.upgrade(),因為app.config是字典的一個子類腮介,所以它可以類似字典的方式添加配置參數(shù)肥矢,可以用字典的upgrade()方法,其實第3和第4種方法本質(zhì)上是一樣的萤厅,不過upgrade()方法可以一次性添加多個配置參數(shù)
app = Flask(__name__)
app.config.upgrade(DEBUG = True)
  1. 通過環(huán)境變量的方式來配置參數(shù)橄抹,然后通過app.config.from_envvar()來讀取配置參數(shù)
# 在環(huán)境變量中設(shè)置MyAppConfig,并在其中設(shè)置配置參數(shù)
app.config.from_envvar('MyAppConfig')

1.6.1 在視圖讀取配置參數(shù)

如果我們需要指定一個配置參數(shù)它的值是什么惕味,我們有2種方法:

  • app.config.get()按照字典取值的方法獲取配置參數(shù)的值或者是先導(dǎo)入current_app再用current_app.config.get()按照字典取值的方法獲取配置參數(shù)的值楼誓,如果沒有定義該配置參數(shù)將返回None
  • app.config[key]按照字典取值的方式來獲取配置參數(shù),如果沒有定義該配置參數(shù)將返回None

1.6.2 app.run的參數(shù)

啟動app可以傳參數(shù)名挥,比如host疟羹、portdebug,如果是配置參數(shù)榄融,配置參數(shù)只能傳debug参淫,如果想在同一個局域網(wǎng)下的其他電腦訪問自己電腦上的Flask網(wǎng)站,那么可以在app.run()中設(shè)置host='0.0.0.0'才能訪問得到

app.run(host="0.0.0.0", port=5000,debug=True)

1.7 開啟debug模式

1.7.1 為什么需要開啟DEBUG模式

  1. 如果開啟了DEBUG模式愧杯,那么在代碼中如果拋出了異常涎才,在瀏覽器的頁面中可以看到具體的錯誤信息,以及具體的錯誤代碼位置力九。方便開發(fā)者調(diào)試耍铜。
  2. 如果開啟了DEBUG模式,那么以后在Python代碼中修改了任何代碼跌前,只要按ctrl+s棕兼,flask就會自動的重新記載整個網(wǎng)站。不需要手動點擊重新運行抵乓。

1.7.2 debug配置的7種方式

debug配置的其中5種方式其實就是上面說的如何導(dǎo)入配置參數(shù)的那5種方式伴挚,還有兩種方式也講到了,就是在命令行使用set FLASK_ENV=development灾炭,然后再使用flask run會自動啟用debug模式茎芋,不過這種配置僅限于flask run啟動,還有一種配置方式就是app.run(debug=True)在Pycharm中有些配置方式是沒有效果

1.7.3 PIN碼

開啟了debug模式后蜈出,flask會自動生成一個PIN碼败徊,PIN碼用于頁面調(diào)試如果想要在網(wǎng)頁上調(diào)試代碼,那么應(yīng)該輸入PIN碼掏缎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市煤杀,隨后出現(xiàn)的幾起案子眷蜈,更是在濱河造成了極大的恐慌,老刑警劉巖沈自,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌儒,死亡現(xiàn)場離奇詭異,居然都是意外死亡枯途,警方通過查閱死者的電腦和手機忌怎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酪夷,“玉大人榴啸,你說我怎么就攤上這事⊥砹耄” “怎么了鸥印?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我库说,道長狂鞋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任潜的,我火速辦了婚禮骚揍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啰挪。我一直安慰自己信不,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布脐供。 她就那樣靜靜地躺著浑塞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪政己。 梳的紋絲不亂的頭發(fā)上酌壕,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音歇由,去河邊找鬼卵牍。 笑死,一個胖子當(dāng)著我的面吹牛沦泌,可吹牛的內(nèi)容都是我干的糊昙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼谢谦,長吁一口氣:“原來是場噩夢啊……” “哼释牺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起回挽,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤没咙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后千劈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祭刚,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年墙牌,在試婚紗的時候發(fā)現(xiàn)自己被綠了涡驮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡喜滨,死狀恐怖捉捅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸿市,我是刑警寧澤锯梁,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布即碗,位于F島的核電站,受9級特大地震影響陌凳,放射性物質(zhì)發(fā)生泄漏剥懒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一合敦、第九天 我趴在偏房一處隱蔽的房頂上張望初橘。 院中可真熱鬧,春花似錦充岛、人聲如沸保檐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夜只。三九已至,卻和暖如春蒜魄,著一層夾襖步出監(jiān)牢的瞬間扔亥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工谈为, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旅挤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓伞鲫,卻偏偏與公主長得像粘茄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秕脓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359