Packer.Odoo.10---Chapter 4

模塊數(shù)據(jù)

很多Odoo模型中的定義郑现,例如用戶視圖界面,安全規(guī)則切揭,實(shí)際上都是儲存在特殊的數(shù)據(jù)庫表中哩罪。我們在模塊中編寫的XML,CSV文件并不是在Odoo運(yùn)行時(shí)使用的授霸,這些文件的意義是在Odoo運(yùn)行前把我們定義好的那些視圖,規(guī)則全部加在到數(shù)據(jù)庫表中际插。
因?yàn)檫@個(gè)原因碘耳,所有Odoo中很重要的一個(gè)部分就是數(shù)據(jù)表示(序列化)那些文件中的數(shù)據(jù)以便Odoo加載它們到數(shù)據(jù)庫中。
模塊可以擁有作為默認(rèn)或者用來示范展示的數(shù)據(jù)框弛,數(shù)據(jù)表示允許添加那些數(shù)據(jù)到我們的模塊中辛辨。另外,理解Odoo的數(shù)據(jù)表示格式對于導(dǎo)入或者導(dǎo)出業(yè)務(wù)環(huán)境中的數(shù)據(jù)是非常重要的
首先,讓我們來了解下Odoo數(shù)據(jù)展示中最為關(guān)鍵的部分——外部id的概念

理解外部id

人們用自己可以理解的字符串標(biāo)識符來表示的Odoo中的記錄,這個(gè)標(biāo)識符確保了記錄的唯一性.這個(gè)字符串標(biāo)識符就是外部id(external identifier)或者稱為XML ID.
這么做的原因主要是:

  • 當(dāng)我們更新我們的模塊時(shí)愉阎,會重新加載定義在其中的XML绞蹦,CSV數(shù)據(jù)文件力奋,為了避免在數(shù)據(jù)庫中創(chuàng)建新的重復(fù)數(shù)據(jù)榜旦,我們使用外部id來進(jìn)行監(jiān)測,若原來的數(shù)據(jù)庫中已有這個(gè)外部id景殷,就只對其做更新溅呢。
  • 另一個(gè)原因是為了支持那些互相關(guān)聯(lián)的數(shù)據(jù),數(shù)據(jù)記錄必須能被另外的數(shù)據(jù)記錄關(guān)聯(lián)到猿挚。當(dāng)一個(gè)模塊被安裝時(shí)咐旧,底層的實(shí)際操作是用自動連續(xù)生成的數(shù)字id來標(biāo)識不同的數(shù)據(jù)庫,這些數(shù)字id不方便我們記憶绩蜻。通過外部id铣墨,我們可以直接與數(shù)據(jù)庫中的記錄關(guān)聯(lián)起來,不需要事先知道那些記錄的具體id值办绝∫猎迹可以把外部id理解為一個(gè)中間表
  • ir.model.data就是這張中間表,它記錄了外部id與實(shí)際數(shù)據(jù)庫id之間的映射關(guān)系
  • Setting | Technical | External Identifiers 這里面就存放了ir.model.data這個(gè)表。里面存放著已經(jīng)存在的映射關(guān)系孕蝉。通過在里面搜索我們的'todo_app'
ir.model.data
  • 我們發(fā)現(xiàn)圖中有外部id的完整id(Complete ID)的存在屡律,它的生成策略:使用'.'作為分隔符,以模塊的包名為開頭降淮。后面為我們定義的id的值超埋。例:todo_app.action_todo_task
    所以只要在單獨(dú)模塊中保持外部id的唯一性即可,不同模塊因?yàn)榘煌遣粫兄貜?fù)風(fēng)險(xiǎn)的佳鳖。
  • 在數(shù)據(jù)文件中使用外部id來調(diào)用記錄時(shí)霍殴,我們
    能夠選擇完整外部id跟普通外部id。同一個(gè)模塊的記錄我們只需要使用普通外部id系吩,當(dāng)使用不同模塊的記錄時(shí)就需要使用網(wǎng)站外部id来庭。
查看外部id

當(dāng)我們準(zhǔn)備模塊的默認(rèn)及演示數(shù)據(jù)時(shí),通常需要知道它們的外部id來進(jìn)行關(guān)聯(lián)淑玫。我們可以通過啟動開發(fā)者模式開更加快速的查看它們的外部id
作為演示:
我們打開Setting | Users 點(diǎn)擊‘Demo’用戶巾腕,在新出來的表單右上角點(diǎn)擊開發(fā)者菜單(一個(gè)小爬蟲樣子).選擇View Metadata.就可以看到'Demo'用戶的外部id信息.

Demo外部id

如果是tree,form等view視圖絮蒿,可以先選擇Edit<view type> 在跳出的編輯視圖左上角選擇View Metadata

左上角小爬蟲標(biāo)識點(diǎn)view metadata

導(dǎo)出導(dǎo)入數(shù)據(jù)

我們下面來詳細(xì)的說下如何在用戶界面導(dǎo)出導(dǎo)入數(shù)據(jù)尊搬。

導(dǎo)出數(shù)據(jù)

在列表(list)視圖中,導(dǎo)出數(shù)據(jù)是一個(gè)基本功能土涝。

復(fù)選框中More按鈕選擇Export
  • 從Odoo9開始佛寿,我們可以導(dǎo)出符合當(dāng)前過濾條件的所有數(shù)據(jù)而不是只是當(dāng)前顯示的數(shù)據(jù),這十分有利于導(dǎo)出無法全部現(xiàn)在在當(dāng)屏幕龐大的記錄集合。

點(diǎn)擊Export 選項(xiàng)會跳出一個(gè)對話表單冀泻,我們可以在表單中選擇需要導(dǎo)出的數(shù)據(jù)字段常侣。Import-Compatible Export 選項(xiàng)讓我們能夠重新利用數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)到Odoo。

數(shù)據(jù)導(dǎo)出對話表單

導(dǎo)出數(shù)據(jù)的格式可以是CSV或者Excel文件弹渔,我們選擇CSV胳施,這更利于理解導(dǎo)出數(shù)據(jù)的格式。接下來肢专,選擇我們需要導(dǎo)出的字段舞肆,點(diǎn)擊 Export To File 就可以進(jìn)行導(dǎo)出數(shù)據(jù)的下載。
打開下載下來的CSV文件博杖,里面的記錄如下:

"id","name","user_id/id","date_deadline","is_done"
"todo_user.todo_task_a","install Odoo","base.user_root","2017-02-01","False"
"todo_user.todo_task_b","Create dev database","base.user_root","","False"
  • 注意到Odoo導(dǎo)出時(shí)會自動添加一個(gè)’id‘列椿胯。這個(gè)id列就是每條記錄的外部id。如果外部id為None剃根。會生成一個(gè)__export__來代替實(shí)際的模塊名哩盲。
導(dǎo)入數(shù)據(jù)

首先我們要確保導(dǎo)入數(shù)據(jù)功能開啟,在Odoo9之后狈醉,這個(gè)功能是默認(rèn)開啟的廉油。開啟方法 Settings |General Settings| Import / Export 勾選Allow users to import data from CSV/XLS/XLSX/ODS files即可。

  • 這個(gè)功能的實(shí)際提供是由 Initial Setup Tools(技術(shù)名稱為base_setup)包實(shí)現(xiàn)的.
    所以上面勾選的 Allow users..的實(shí)際就是安裝了base_setup舔糖。
    我們首先編輯我們需要導(dǎo)入的CSV文件的數(shù)據(jù)格式娱两。還是使用剛才下載的CSV文件,我們添加一些新的數(shù)據(jù)金吗,保持‘id’這一列為空十兢。
    csv文件中:

    • id作為外部ID是用來檢測記錄是否已經(jīng)在Odoo中存在,避免添加重復(fù)的記錄.在我們的例子中,保持空白即可
  • 添加兩條數(shù)據(jù)到我們剛下載的csv文件中.

,"test1","base.user_root","","False"
,"test2","base.user_root","2017-9-28","False"

點(diǎn)擊 Import 按鈕。選擇我們的csv文件摇庙。會顯示出我們新添加的記錄旱物,點(diǎn)擊 Validate 按鈕進(jìn)行數(shù)據(jù)驗(yàn)證,無誤后點(diǎn)擊 Import 即可導(dǎo)入卫袒。

導(dǎo)入驗(yàn)證表單

csv文件中的關(guān)聯(lián)記錄

在前面的例子中宵呛,我們發(fā)現(xiàn)每個(gè)task的負(fù)責(zé)人user_id/id都是選用base.user_root的用戶,即管理員‘a(chǎn)dministrator'。這個(gè)字段其實(shí)是個(gè)多對一的關(guān)系(外鍵)夕凝。base.user_root代表了管理員的外部id.

  • 使用數(shù)據(jù)庫id只在導(dǎo)入/導(dǎo)出同一個(gè)數(shù)據(jù)庫時(shí)可以使用,通常來說,我們都是使用外部id來定義關(guān)聯(lián)記錄的

關(guān)聯(lián)列使用/ id 表示添加外部id標(biāo)識符宝穗,使用/.id表示數(shù)據(jù)庫id標(biāo)識符. (這里也可以使用:來代替/)
相似的,多對多關(guān)系也是被支持的,一個(gè)很好的例子就是用戶跟用戶組:

  • 每個(gè)用戶能夠在多個(gè)用戶組中,一個(gè)用戶組也能包含多個(gè)用戶,這里的列就需要使用/id來添加,說明字段接受外部id作為標(biāo)識符來引用對應(yīng)的記錄.
  • example: 在我們的to-do task 關(guān)注者中,有一個(gè)’to-do tasks‘跟‘partner’的多對多關(guān)系,我們的列名應(yīng)該定義為follower_ids/id,添加字段值時(shí)如下
"__export__.res_partner_1,__export__.res_partner_2"
  • 最后,對于一對多關(guān)系,可以看做是多對一關(guān)系的反轉(zhuǎn).我們可以從公司(company)模型中找到這樣的例子:每個(gè)公司有多個(gè)銀行賬戶(one2many),相對而言,多個(gè)銀行賬戶只屬于同一個(gè)公司(many2one).
    在我們導(dǎo)入公司數(shù)據(jù)時(shí),就可以通過額外的csv文件來添加多個(gè)銀行賬戶
    • 下面就是一個(gè)公司擁有三個(gè)銀行賬戶的例子:
id,name,bank_ids/id,bank_ids/acc_number,bank_ids/state
base.main_company,YourCompany,__export__.res_partner_bank_4,123456789,bank
,,__export__.res_partner_bank_5,135792468,bank
,,__export__.res_partner_bank_6,1122334455,bank
  • 從上面的代碼中码秉,首先前面2列逮矛,‘id’跟‘name’指定了我們的公司(記錄頭),后面的3列都以bank_ids/為前綴。我們的3條新增記錄都有各自的數(shù)據(jù).第一條記錄有公司和第一家銀行的記錄,后面2條記錄只有額外的公司跟銀行的記錄.

從GUI界面導(dǎo)入導(dǎo)出數(shù)據(jù)是非常有必要的转砖。在新創(chuàng)建的Odoo實(shí)例設(shè)置數(shù)據(jù)或者為Odoo模塊準(zhǔn)備數(shù)據(jù)文件十分有用须鼎。接下來,我們要學(xué)習(xí)跟多的關(guān)于數(shù)據(jù)文件在模塊中的使用。


模塊數(shù)據(jù)

模塊的參數(shù)設(shè)置功能通常通過加載默認(rèn)數(shù)據(jù)跟演示數(shù)據(jù)來實(shí)現(xiàn)晋控。我們通常使用CSV跟XML文件來進(jìn)行這樣的操作汞窗,其實(shí)YAML文件也是能夠被Odoo所使用的,但是我們很少用赡译。
CSV文件在模塊數(shù)據(jù)中的使用跟我們以前引入新功能的操作是一樣的仲吏。唯一的限制就是csv的文件名必須與模型的名字一樣。
一個(gè)很常見的方法就是使用csv文件來設(shè)置訪問安全定義,通過把csv加載到'ir.model.access'這個(gè)模型中.因此,我們通常把這樣的csv文件名字定義為
'ir.model.access.csv'.

演示數(shù)據(jù)

演示數(shù)據(jù)對于模塊案例展示捶朵,模塊數(shù)據(jù)庫測試來說是十分有用的蜘矢。
我們通常需要把演示數(shù)據(jù)聲明在__manifest__.py中的demo屬性里.就像data屬性,這是一個(gè)放置演示數(shù)據(jù)文件路徑的列表.
為我們的todo_user模塊添加演示數(shù)據(jù)。我們把需要添加的演示數(shù)據(jù)放在data子文件夾中.創(chuàng)建data/todo.task.csv.代碼如下

id,name,user_id/id,date_deadline
todo_task_a,"install Odoo","base.user_root","2017-02-01"
todo_task_b,"Create dev database","base.user_root",""

然后添加該csv文件路徑到__manifest__.pydemo屬性中
'demo':['data/todo.task.csv'],
下次我們更新模塊時(shí),csv文件中的數(shù)據(jù)就作為演示數(shù)據(jù)被添加到我們的模塊中.
XML文件也可以從來加載模塊數(shù)據(jù).接下來我們來學(xué)習(xí)一些CSV數(shù)據(jù)文件無法實(shí)現(xiàn)而XML數(shù)據(jù)文件可以做到的事.


XML數(shù)據(jù)文件

XML比CSV在加載數(shù)據(jù)的過程中具有更加有力的控制综看。xml的命名不需要專門匹配模型名稱因?yàn)閤ml的格式更加豐富,數(shù)據(jù)信息都是保存在xml元素中的岖食。
我們在前面的章節(jié)已經(jīng)使用過xml數(shù)據(jù)文件红碑。用戶界面組件,像視圖跟菜單名稱泡垃,實(shí)際上都是存儲在系統(tǒng)模型中的記錄析珊。xml文件在模塊中的作用就是用來加載這些記錄到服務(wù)器中。
我們在‘todo_user'中添加第二個(gè)數(shù)據(jù)文件,'data/todo_data.xml'.加入下面的內(nèi)容:

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <!--data to load-->
    <record model="todo.task" id="todo_task_c">
        <field name="name">Reinstall Odoo</field>
        <field name="user_id" ref="base.group_user"/>
        <field name="date_deadline">2017-08-05</field>
        <field name="is_done" eval="False"/>
    </record>
</odoo>

這個(gè)xml文件與前面的csv文件的作用是一樣的蔑穴。添加一條名為’Reinstall Odoo‘的task記錄忠寻。

  • XML數(shù)據(jù)文件以<odoo>為頂部元素,在<odoo>中可以有多個(gè)<record>元素用來添加數(shù)據(jù)記錄。
  • <record>元素有2個(gè)必要的屬性:model:關(guān)聯(lián)的模型
    id:記錄的外部id
    <field>標(biāo)簽用來表示當(dāng)前記錄的字段.在<field>中我無法使用"user_id/id"這樣的格式,而是通過"ref"這個(gè)屬性來寫入關(guān)聯(lián)記錄的外部id.
數(shù)據(jù)的noupdate屬性

當(dāng)數(shù)據(jù)被重復(fù)加載時(shí)存和,記錄會被后一次的加載數(shù)據(jù)所覆蓋奕剃,這就意味著每次更新模塊,我們以前在數(shù)據(jù)庫中進(jìn)行的手工設(shè)置都可能被覆蓋掉捐腿。尤其當(dāng)我們自己定制了視圖后纵朋,一次模塊更新可能會丟失所有定制數(shù)據(jù)。正確的方法應(yīng)該是通過繼承來擴(kuò)展我們的視圖茄袖。
這個(gè)重新導(dǎo)入的操作是默認(rèn)的操软,但是我們可以對它進(jìn)行改變,我們可以在數(shù)據(jù)文件中對<odoo>
或者<data>元素加入noupdate="1"這個(gè)屬性.這個(gè)屬性意味著我們數(shù)據(jù)文件中的記錄只在模塊安裝時(shí)被創(chuàng)建,當(dāng)模塊更新時(shí)不會對這些記錄產(chǎn)生任何影響.

在xml中定義記錄

每個(gè)<record>元素有2個(gè)基礎(chǔ)的屬性
'id':代表了記錄的外部id
'model':代表了我們需要?jiǎng)?chuàng)建記錄的目標(biāo)模型
'<field>':為模型的字段賦值.它有多種賦值方法

設(shè)置字段的值

name屬性定義了需要被賦值的字段.要根據(jù)具體的字段類型來賦值.如果字段是日期,可以使用"YYYY-mm-dd"這樣的格式,如果是布爾類型,任何非空的都會被認(rèn)為是True宪祥。而"0"跟"False"則會被轉(zhuǎn)換為False

通過表達(dá)式設(shè)置字段值

可以使用eval這個(gè)屬性定義Python表達(dá)式來進(jìn)行賦值.
對于日期處理來說,下面的模塊是可以被使用的:time, datetime,timedelta,relativedelta.它們允許你計(jì)算日期的值,它們在演示或者測試數(shù)據(jù)時(shí)被頻繁的使用聂薪。舉例來說,把日期改為昨天蝗羊,我們可以這樣寫代碼:

<field name="date_deadline" eval=
"(datetime.now() + timedelta(-1)).strftime('%Y-%m-%d')"/>

在eval表達(dá)式中,ref()函數(shù)是同樣可以被使用的,這通常被用來把一個(gè)外部id轉(zhuǎn)換為關(guān)聯(lián)的數(shù)據(jù)庫id.這在為關(guān)系型字段設(shè)置值時(shí)是非常有用的.舉例來說,我們可以為user_id賦值:

<field name="user_id" eval="ref('base.group_user')"/>
為關(guān)系型字段賦值

在上面的代碼中我們通過ref()函數(shù)來為'many2one'的關(guān)系型字段賦值,其實(shí)我們在<field>元素中使用'ref'屬性直接通過外部id來進(jìn)行'many2one'字段的賦值

<field name="user_id" ref="base.user_demo"/>

對于‘one2many’和‘many2many’字段藏澳,有時(shí)候我們需要一個(gè)外部id的list列表。所以O(shè)doo提供給我們一個(gè)特殊的表達(dá)式來進(jìn)行這種類型字段的賦值肘交。

我們來看下一個(gè)來自O(shè)doo官方的app實(shí)例笆载,為tag_ids字段提供了一個(gè)關(guān)系型記錄的list列表

<field name="tag_ids"
 eval="[(6,0,[ref('vehicle_tag_leasing'),ref('fleet.vehicle_tag_compact'),ref('fleet.vehicle_tag_senior')])]"/>

為了填入一個(gè)一對多字段,我們使用了一個(gè)有3個(gè)元組的list列表。下面是剛才代碼中每個(gè)元組命令的使用解釋:

  • (0, _, { 'field' : value}):創(chuàng)建了一個(gè)新的記錄凉驻,并與其關(guān)聯(lián)
  • (1, id, { 'field' : value}):更新一個(gè)已經(jīng)關(guān)聯(lián)的記錄
  • (2, id,_): 解除并刪除一條相關(guān)記錄
  • (3, id, _):解除但不刪除一條相關(guān)記錄
  • (4, id, _): 關(guān)聯(lián)一個(gè)已經(jīng)存在的記錄
  • (5, _, _): 解除但不刪除所有已經(jīng)關(guān)聯(lián)的記錄
  • (6,_,[ids]): 使用提供的數(shù)據(jù)list列表來代替已經(jīng)關(guān)聯(lián)的數(shù)據(jù)
    上面的元組命令中的下劃線可以用0或者False來填充腻要。
常用模型的縮寫形式

在我們的第二章中,會發(fā)現(xiàn)在xml 文件中有很多于<record>相似的xml元素,如<act_window>和<menuitem>.這些是我們常用模型的縮寫格式

  • <act_window>: 窗口動作模型,ir.actions.act_window
  • <menuitem>: 目錄模型,ir.ui.menu
  • <report>: 報(bào)告動作模型,ir.actions.report.xml
  • <template>: Qweb模板儲存模型,ir.ui.view
  • <url> :URL動作模型,ir.actions.act_url

其他xml數(shù)據(jù)文件動作

刪除記錄

<delete>元素:通過直接定義或者搜索domain來找到數(shù)據(jù)庫id 或者外部id進(jìn)行刪除.使用搜索視圖

<delete model="ir.rule"
search="[('id', '=',ref('todo_app.todo_task_user_rule'))]" />

直接使用外部id:

<delete model="ir.rule"
id="todo_app.todo_task_user_rule" />
觸發(fā)方法跟工作流

一個(gè)xml文件還能夠執(zhí)行方法當(dāng)它加載<function>元素中的函數(shù)定義時(shí).這種用法通常用來設(shè)置跟測試數(shù)據(jù),舉例來說,CRM 應(yīng)用使用它來設(shè)置展示數(shù)據(jù)

<function model="crm.lead" name="action_set_lost"
eval="[ref('crm_case_7'), ref('crm_case_9'),
ref('crm_case_11'), ref('crm_case_12')]
,{'install_mode': True}"/>
  • 上面的代碼用來執(zhí)行’crm.lead‘模型只不過的’action_set_lost'方法涝登。通過eval屬性傳入2個(gè)參數(shù)雄家,第一個(gè)參數(shù)是需要起作用的IDs列表,另一個(gè)是我們要用的上下文環(huán)境胀滚。

另一個(gè)xml數(shù)據(jù)文件執(zhí)行動作的方法是通過<workflow>元素觸發(fā)Odoo的工作流趟济。工作流能夠改變銷售訂單的狀態(tài)或者把銷售訂單轉(zhuǎn)成發(fā)票,Odoo10中的銷售應(yīng)用已經(jīng)不再使用工作流,但是我們依然能在示例數(shù)據(jù)中找到這樣的例子:

<workflow model="sale.order"
ref="sale_order_4"
action="order_confirm"/>

這個(gè)模型中,‘ref’屬性標(biāo)識了我們需要執(zhí)行工作流實(shí)例咽笼,‘a(chǎn)ction’是一個(gè)傳入工作流實(shí)例的信號顷编。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剑刑,隨后出現(xiàn)的幾起案子媳纬,更是在濱河造成了極大的恐慌,老刑警劉巖施掏,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钮惠,死亡現(xiàn)場離奇詭異,居然都是意外死亡七芭,警方通過查閱死者的電腦和手機(jī)素挽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狸驳,“玉大人预明,你說我怎么就攤上這事⌒坷” “怎么了贮庞?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長究西。 經(jīng)常有香客問我窗慎,道長,這世上最難降的妖魔是什么卤材? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任遮斥,我火速辦了婚禮,結(jié)果婚禮上扇丛,老公的妹妹穿的比我還像新娘术吗。我一直安慰自己,他們只是感情好帆精,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布较屿。 她就那樣靜靜地躺著隧魄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隘蝎。 梳的紋絲不亂的頭發(fā)上购啄,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音嘱么,去河邊找鬼狮含。 笑死,一個(gè)胖子當(dāng)著我的面吹牛曼振,可吹牛的內(nèi)容都是我干的几迄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼冰评,長吁一口氣:“原來是場噩夢啊……” “哼映胁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起集索,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屿愚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后务荆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡穷遂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年函匕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚪黑。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盅惜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忌穿,到底是詐尸還是另有隱情抒寂,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布掠剑,位于F島的核電站屈芜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏朴译。R本人自食惡果不足惜井佑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眠寿。 院中可真熱鬧躬翁,春花似錦、人聲如沸盯拱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宁舰,卻和暖如春拼卵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背明吩。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工间学, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人印荔。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓低葫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仍律。 傳聞我的和親對象是個(gè)殘疾皇子嘿悬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容