Odoo開發(fā)要領 — 第一章、快速開始

Odoo的開發(fā)模式和基本概念

Odoo提供了一個快速開發(fā)的框架尤其是比較適合商業(yè)場景的一些應用開發(fā),這些應用通常都是對一些業(yè)務上的記錄進行一些增刪改查的工作匈庭。不僅如此,Odoo還提供了豐富的組件用以制作用戶的交互浑劳,如看板阱持、日歷等日常功能。

以下我們分為五個板塊介紹Odoo:
首先魔熏,我們整體的對Odoo框架做一個整體的概覽衷咽,設置開發(fā)環(huán)境,并生成自己的第一個Odoo應用蒜绽;當整體熟悉了 Odoo的主要組件后镶骗,我們將深入,更細節(jié)地了解Odoo的三層業(yè)務架構躲雅,這三大板塊分別是模型層鼎姊、業(yè)務邏輯層、和表現(xiàn)層相赁;當我們建立了自己的應用后相寇,最后我們需要測試、發(fā)布到一個生產環(huán)境并維護钮科。

在這個章節(jié)中唤衫,我們會快速開始,在未搭建開發(fā)環(huán)境錢绵脯,首先建立Odoo的Web用戶界面佳励。我們將會學習一些關于Odoo架構的東西,幫助我們理解哪些組件比較適合蛆挫,然后我們會建立一個簡單的圖書館應用赃承,如何在現(xiàn)有模型中增加字段,如何新增新的模型璃吧,并為其新增自定義的用戶界面楣导,使其可用。

在我們親身使用開發(fā)者模式前畜挨,首先在一個更高的層級筒繁,看看Odoo的整體架構。

Odoo 架構

Odoo是一個多層的架構巴元,我們看到的主要有一下三層:數(shù)據(jù)毡咏、邏輯和表現(xiàn)層


odoo1-1.png

數(shù)據(jù)層是最底的一層,它負責數(shù)據(jù)的存儲和持久化逮刨,Odoo使用 PostgreSQLSever來完成這一層工作呕缭,PostgreSQL是唯一被支持的關系型數(shù)據(jù)庫堵泽,這是設計者的選擇,其他的數(shù)據(jù)庫如MySQL等都不受支持恢总,其他諸如文檔迎罗、圖像等,通常以文件系統(tǒng)方式存儲片仿。

邏輯層是由Odoo服務器控制纹安,負責所有對數(shù)據(jù)層的交互。在正常情況下砂豌,只允許該層直接訪問數(shù)據(jù)庫以保證數(shù)據(jù)安全與同步厢岂。在Odoo的核心,有一個ORM(對象關系模型)引擎阳距,ORM提供提供豐富的API以供新增的模塊和數(shù)據(jù)交互使用塔粒。

舉個例子,合作商數(shù)據(jù)實體筐摘,像顧客和供應商卒茬,在ORM中作為一個模型,這個模型是一個Python的對象蓄拣,支持多種的交互方法扬虚,例如,create方法可以新建合作商記錄球恤,read方法可以查詢當前的記錄和詳細數(shù)據(jù)。這些在對象里的方法可以實現(xiàn)特定的業(yè)務邏輯荸镊,例如create方法可以設置某些默認值或者做某些驗證的規(guī)則咽斧,read方法可能支持某些字段的計算,為用戶的操作設定不同的權限躬存。

表現(xiàn)層作為展現(xiàn)數(shù)據(jù)與用戶交互.它是一個負責對所有用戶操作執(zhí)行的客戶端響應张惹。這個客戶端通過與ORM的API交互去完成讀、寫岭洲、驗證或執(zhí)行其他的一些操作宛逗,通過遠程方法調用(RPCS)去呼叫ORM的API方法調用。這些操作會發(fā)到odoo服務器做處理盾剩,然后將結果返回到客戶端以做進一步處理雷激。

在表現(xiàn)層里,Odoo提供了一個全功能開箱即用的Web客戶端告私,這個Web客戶端支持業(yè)務邏輯需要的所有屬性如:登錄會話屎暇,導航菜單,數(shù)據(jù)列表驻粟,表單等等根悼。雖然全局的外觀不像一個前端人員設想的那樣可定制化,但是它已經可以很輕松地區(qū)創(chuàng)建一個風格統(tǒng)一的用戶功能模塊。

其中一個補充的顯示層是集成的網(wǎng)站框架挤巡,他提供一個完成靈活性的頁面新建可準確地完成用戶的交互剩彬。像其他CMS框架一樣,旨在減少一些工作量和技術開發(fā)矿卑。這個網(wǎng)站框架支持Web控制器實現(xiàn)特定的邏輯代碼襟衰,使其余模型內的邏輯保持分離,前段開發(fā)人員可以有更大的自由發(fā)揮空間粪摘。

由于Odoo服務器API的開放性瀑晒,以致在幾乎所有的平臺和編程語言的客戶端實現(xiàn)也是可行的。利用Odoo的數(shù)據(jù)和邏輯層實現(xiàn)邏輯徘意,為用戶提供特定的用戶界面苔悦,如構建桌面應用程序,手機應用程序椎咧。

Odoo還有一個特別的第三方客戶端例子叫ERPpeek玖详,他是一個命令行客戶端。允許你鏈接遠程的Odoo服務器實現(xiàn)交互勤讽。這對于有經驗的Odoo開發(fā)人員和系統(tǒng)管理員來說蟋座,使用它去做服務器上的數(shù)據(jù),腳本檢查等高級操作與維護是非常有用的脚牍。后續(xù)我們將在第8章介紹ERPpeek向臀, 即與其他系統(tǒng)集成外部API。

開發(fā)者模式

許多Odoo的自定義都可以直接從用戶界面進行诸狭。

這是更改應用程序一個非橙颍快速的方法。它可以做一些小修改驯遇,例如增加一個字段芹彬,或者做一些較大的自定義,入建立幾個模型叉庐,視圖和菜單項舒帮。

與后面章節(jié)講述的,使用變成工具完成自定義的方式相比陡叠,這些通過用戶UI進行的自定義有不少的限制玩郊。舉個例子,我們不能添加或擴展ORM的方法匾竿,盡管自動化操作可以作為替代方法使用瓦宜,但他們不容易集成到結構化的開發(fā)工作流中,例如運行自動化測試或部署到多個環(huán)境中岭妖、再如質量保證临庇,預生產和生產反璃。

Odoo10.0的時候引入了Odoo Studio,這是一個應用程序設計器假夺,可以從用戶界面創(chuàng)建并進行定制淮蜈。我們不在這里討論Odoo Studio, 它雖然是一個用戶體驗友好的前端已卷,但正如我們在本章節(jié)中介紹到的梧田,它的自定義會得到相同的限制。Odoo Studio確實包含一個很重要的特性侧蘸,就是很方便的到處模塊進行定制裁眯。這對于高級用戶在SaaS實例或更簡單的自建平臺環(huán)境中非常有用。

本書的其余部分將介紹如何以結構化方式對ODOO進行二次開發(fā)讳癌,用代碼編輯器創(chuàng)建附加模塊穿稳。

但在本章中,我們先用開發(fā)者模式特性直接在Web用戶界面對界面進行定制晌坤,因為對于開發(fā)人員來說逢艘,了解和使用這些工具是非常重要的。

但更重要的骤菠,我們通過這些練習它改,需要完成一個目標:更好地理解Odoo應用程序的層次結構,以及他們的組件是如何組織的商乎。

廢話不多說央拖,我們開始來折騰這些工具吧。

圖書館項目介紹

我們會用一個簡單的項目來介紹這些開發(fā)工具:我們會新建一個簡單的圖書館應用截亦,這個應用主要是幫我們去記錄書本和他們的作者爬泥。它可以管理作家的列表和這些書是哪位作家創(chuàng)作的。

我們的圖書館應用需要兩個模型:作家和書本崩瓤。這兩模型屬于多對多的對應關系:每一個作家可以有多本書,每一本書可以有多個作家踩官。

Odoo已經提供了技術名稱為res.partner內置的伙伴關系模型却桶,以表示人員、組織和地址蔗牡。例如客戶颖系、供應商、聯(lián)系人和應用程序用戶都是合作伙伴辩越。我們使用這個模型用于圖書館應用的作者嘁扼,將使事情簡單很多。我們只需要在這個模型上增加一個是否為“作家”的標記黔攒,以及增加一個僅顯示作家的菜單即可趁啸。

而對于書本强缘,我們將創(chuàng)建一個全新的模型,相應的表達不傅,列表視圖以及訪問它們的菜單項旅掂。

創(chuàng)建一個工作數(shù)據(jù)庫

我們需要在一個Odoo測試數(shù)據(jù)庫上工作。

在第二章(安裝與部署開發(fā)環(huán)境)访娶,我們將會介紹如何通過源碼安裝Odoo商虐,并建立自己的開發(fā)環(huán)境。在這里我們先略過崖疤。我們現(xiàn)在現(xiàn)有的ODOO服務器上直接使用用戶的UI開始秘车。

如果你還沒有一個可用的Odoo已安裝的版本,你可以先在odoo.com建立一個測試數(shù)據(jù)庫來完成本章節(jié)劫哼。Odoo.com提供企業(yè)版的用戶接口叮趴,用戶界面和我們提供的截圖有些許不一致,但這并沒太大問題沦偎。要創(chuàng)建一個新的數(shù)據(jù)庫疫向,你可能會被問到選擇一個啟動應用程序,在這一章中沒有特定的應用程序需要遵循豪嚎,但如果你不確定選什么搔驼,選CRM就可以了。

Odoo遵循一個核心開放的商業(yè)模型侈询, 產品分為社區(qū)版和企業(yè)版兩個版本發(fā)布舌涨。企業(yè)版是在社區(qū)版基礎上構建的,它添加了一些高級功能扔字,包括改進的用戶界面囊嘉。在Odoo.com,你將使用企業(yè)版革为,在公共Github倉庫扭粱,你可以找到社區(qū)版。雖然這兩個版本外觀看起來不同震檩,但他們只是表面上的改變琢蛤,兩個版本的用戶界面特性是一樣的

現(xiàn)在,我們通過瀏覽器登錄并進入Odoo的數(shù)據(jù)庫抛虏。對于Odoo在線博其,地址會如http://<mydbname>.odoo.com。對于自己部署的實例迂猴,地址將會是http://<server-address>:8069慕淡。8069是Odoo的默認端口,如果你安裝時使用了不同的端口沸毁,應修改成對應的端口號峰髓。

我們將使用目錄里的應用程序——聯(lián)系人傻寂,所以我們首先安裝它,如果你還安裝儿普,打開頂部菜單崎逃,找到聯(lián)系人,點擊安裝眉孩。


1-2.png

現(xiàn)在我們可以使用這個實力開始工作了个绍,接下來的一步是激活開發(fā)者工具,這讓我們能訪問到Odoo的內部構件浪汪。

激活開發(fā)者模式

在設置界面的右下角巴柿,你可以找到激活開發(fā)者模式的鏈接,點擊它死遭,可以在瀏覽器窗口啟用一些開發(fā)者模式的特性广恢。

!對于Odoo9.0或之前的版本呀潭,開發(fā)者模式在用戶菜單下的钉迷,“關于”對話框窗口中激活,在網(wǎng)頁界面的右上角

我們還有一個激活開發(fā)者模式(帶有資源包)的選項钠署,它所做的是為了防止網(wǎng)頁客戶端壓縮網(wǎng)頁的資源包糠聪,這對于調試網(wǎng)頁是非常有用的,犧牲了速度為代價谐鼎。(下載的文件變大了舰蟆,自然網(wǎng)頁加載的速度會變慢)

為了加載得更快,Web客戶端會將JavaScript和CSS的資源包進行壓縮狸棍,這樣的話身害,就會對網(wǎng)頁調試帶來不便。激活開發(fā)者模式(帶資源包)選項會防止文件壓縮草戈,將網(wǎng)頁資源包單獨的塌鸯,為被壓縮的加載出來。

TIPS:你也可以不進行設置而啟用開發(fā)者模式唐片,只需編輯當前的URL后面加入?debug界赔,或者?debug=assets ,例如牵触,http://myserver/web#home將被更改為http://myserver/web?debug#home。雖然沒用點擊啟用它的連接咐低,但前端框架也支持調試標志揽思,使用?debug=assets 添加到對應的URL來禁止避免對Web前端的資源包進行壓縮。但要注意见擦,導航到其他頁面的時候钉汗,這個參數(shù)不會進行持久化羹令。

當開啟了開發(fā)者模式,我們將會看見有兩個額外的菜單可用:

  • Debug菜單损痰,位于頂部菜單右側的Debug圖標福侈,在用戶名和頭像前面。
  • 技術菜單條目卢未,在設置應用里

1-3.png

開發(fā)人員模式還支持有關表單字段的其他信息肪凛,鼠標指針停留在一個字段上時,工具會提示它的技術信息

我們將在下一步部分介紹和使用這些開發(fā)者模式的特性辽社。

在一個現(xiàn)有的模型上增加字段

增加一個定制字段是一個很常規(guī)的定制操作伟墙,可以直接通過用戶UI進行,不需要新增一個自定義模塊滴铅。

對于我們的圖書館應用戳葵,我們需要增加一個是否為作家的一個字段。作為基礎模型:合作伙伴模型的標記汉匙。以此可以列出所有的作家拱烁。

我們可以通過“設置”應用來完成這項操作,在 “技術->數(shù)據(jù)庫結構->模型” 菜單項目噩翠,查找到 res.partner 模型戏自,模型描述為“聯(lián)系人”的模型。點擊打開相應的表單視圖绎秒,你就可以看到合作伙伴模型具體的屬性浦妄,包括所有的字段列表:


1-4.png

現(xiàn)在,我們可以在列表在底部點擊新增一行了见芹,這時剂娄,一個彈出窗口將會顯示。

讓我們進行一下配置:

  • 字段名稱:x_is_book_author
  • 字段標簽: Is Book Author?
  • 字段類型:布爾值

這個字段必須從x_開始玄呛。這時通過UI直接對模型新增字段強制的阅懦。對附加模塊沒有這個限制。

就這樣徘铝,點擊保存和關閉耳胎,我們新的字段就被添加到字段列表里面了。這個模型可能有超過80個字段惕它,你可能需要通過導航翻到下一頁才能看到他怕午,使用列表右上角的向右箭頭即可。

現(xiàn)在淹魄,點擊左上角的保存按鈕郁惜,保存這些修改。

我們現(xiàn)在新的字段已經對合作伙伴模型可用了甲锡,但對于用戶它還是不可見的兆蕉,因此我們需要將他加入到視圖中羽戒。

但是,在合作伙伴或叫聯(lián)系人模型表單里虎韵,點擊視圖的選項卡易稠,我們可以看到所有定義在res.partner模型上的視圖。你可以看到包蓝,每一個視圖是一個數(shù)據(jù)庫的記錄驶社。修改和增加視圖記錄的結果是,你會在頁面重載的的時候看見它养晋。

在視圖列表中有些重要的事情需要注意衬吆。

我們可以看見有多個視圖類型,如表單绳泉,樹形逊抡,搜索,或者看板零酪。搜索視圖實際上是對右上角搜索欄的可用篩選器定義冒嫡。其他的視圖類型是不同的數(shù)據(jù)顯示方式,其中比較基礎的樹形(用于列表視圖)和窗體(用于詳細信息)

樹形和列表都可以用來引用相同的視圖類型四苇,他們實際上是列表孝凌,而樹形這個名字是因為歷史的原因。在過去的列表視圖里面曾經有過一個“樹”的層次模型月腋。

如果你通過視圖類型進行排序蟀架,你會注意到相同的視圖類型可以有多個定義。實際上榆骚,我們可以有幾個基本的視圖定義片拍,如一個空的繼承視圖。我們也可以有多個擴展視圖妓肢,例如捌省,將字段添加到現(xiàn)有表單。

擴展視圖可以被其他擴展視圖擴展碉钠。在這種情況下纲缓,最后的擴展應用于前面的擴展都已應用于基本視圖之后。

對于res.partner模型喊废,我們看到兩種基本的表單形式的客戶端操作:res.partner.form 和 res.partner.simplified.form祝高。想這些操作在菜單項目中,可以指定要使用的特定基視圖污筷,如果沒有任何定義褂策,可以使用序列最少的一個。你可以把它想成默認視圖,單擊視圖行斤寂,我們將可以看到帶有的視圖的詳細信息,包括序列值揪惦。

要了解用戶界面某一處使用特定的視圖是什么遍搞,我們可以使用Debug菜單去檢查它。讓我們去試一試器腋,點擊聯(lián)系人溪猿,我們會收到一份聯(lián)系人名單,點擊任何卡片纫塌,將會顯示對應的表單視圖≌锵兀現(xiàn)在,我們點擊右上角的調試Debug菜單措左,選擇“編輯視圖:表單”選項:


1-5.png

這將顯示與我們以前在模型中看到的相同的詳細表單依痊,但是實際上視圖的定位位置,如你所建怎披。它是res.partner.form 頁面視圖

在體系架構方面中胸嘁,我們可以看到帶有視圖定義XML。我們可以編輯它來添加我們的新字段凉逛,雖然這是可行的性宏,但是從長遠來看,這不是一個好方法状飞。這個視圖屬于插件模塊毫胜,有時進行模塊升級,這些自定義將會被覆蓋或丟失诬辈。我們可以通過外部ID字段酵使,在這種情況下,它是base.view_partner_form自晰。所以我們知道這個視圖是屬于base模塊的凝化。

修改視圖的正確方法是創(chuàng)建集成的視圖擴展。

首先酬荞,我們需要從原始視圖中選擇一個元素作為擴展點搓劫。我們可以通過檢查基本視圖來選擇一個具有name屬性的XML元素。大多數(shù)情況下混巧,這將是一個<field>元素枪向。這里,我們將選擇<field name="category_id" ...>元素咧党。

現(xiàn)在秘蛔,我們打開Debug菜單,點擊編輯表單頁面選項,選擇繼承的視圖選項卡深员,點擊底部的“添加明細行”负蠕。

彈出窗口會顯示,創(chuàng)建:一個視圖繼承自哪一個倦畅?我們將會填寫以下信息:
-視圖名稱:聯(lián)系人-自定義是否一個作家
-結構:使用下面的XML:

<field name = "category_id" position="after">
  <field name = "x_is_book_author" />
</field>

其他重要的欄目遮糖,如模型、視圖類型叠赐、及繼承視圖欲账,使用默認值即可。

我們現(xiàn)在保存并關閉芭概。在編輯表單視圖窗口保存然后關閉它赛不。我們可以看到更改已經剩下,然后我們重載這個表單視圖罢洲。就是要刷新整個瀏覽器頁面踢故,在大部分的瀏覽器上,我們可以試用快捷鍵F5進行刷新奏路。

增加菜單畴椰,模型和視圖

現(xiàn)在我們新增一個應用功能,而不是擴展現(xiàn)有的一個鸽粉,我們將繼續(xù)完成我們的圖書館項目

首先斜脂,我們需要新建一個圖書館的頂層菜單,我們現(xiàn)在已經新增了作家菜單條目触机,下一步帚戳,我們將創(chuàng)建一個書本的模型,并且增加一個菜單讓用戶可以試用它儡首,然后我們可以為書本模型創(chuàng)建列表和表單視圖片任。

創(chuàng)建菜單

現(xiàn)在我們已經有途徑去列出作家,它是一個合作伙伴列表蔬胯,使用作家標記進去區(qū)分对供。

現(xiàn)在,我們需要新增一個作家菜單使其可以打開這個列表氛濒,篩選掉一些不是作家的合作伙伴辐脖。一個好消息是梅屉,我們可以很簡單的重用了現(xiàn)有的合作伙伴視圖完成這個操作陷寝。

在此之前奉芦,我們首先要建立一個頂部入口菜單去顯示我們的靚仔圖書館應用,下面將包含作家和書籍兩個菜單骗奖。

我們可以在設置里面找到菜單的定制确徙,在“技術”->“用戶界面”-> "菜單項目"醒串,使用下面的信息創(chuàng)建一個新的菜單項目:

  • 菜單:圖書館
  • 上級菜單:(空)
  • 動作:(空)

在子菜單選項卡中,點擊增加明細行鄙皇,新增一下一個子菜單信息如下:

  • 菜單:圖書作者
  • 上級菜單:圖書館(默認值)
  • 動作:選擇 ir.actions.act_window, 在選項列表上右擊創(chuàng)建并編輯芜赌,開啟一個對話框去創(chuàng)建關聯(lián)的視窗操作。為視窗操作設置以下的值
    • 動作名稱: 圖書作者
    • 對象: res.partner (目標模型的技術名稱)


      1-6.png

保存所有表單的信息育苟,圖書館應用的菜單樹已經可以使用了较鼓。


1-7.png

我們重新加載頁面,就可以看到菜單的更改违柏。我們可以看到生成了多級的菜單結構,子菜單項目有關聯(lián)的動作香椎,定義它在選中時發(fā)生什么漱竖。這個動作的名稱將用作呈現(xiàn)視圖的標題。

這里有多種動作可選畜伐,最重要的動作為窗口馍惹、報表和服務器動作。窗口動作是最常見的視圖玛界,在瀏覽器終端顯示視圖万矾。報表動作是用作運行報表。服務器動作是用作定義自動化任務慎框。

此時良狈,我們關心的是用于顯示視圖操作的窗口動作。

我們剛創(chuàng)建的圖書館作者菜單項使用了一個窗口操作笨枯,它是直接從菜單表單創(chuàng)建的薪丁,我們可以查看和從設置|技術|動作菜單選項編輯它,在特殊情況下馅精,我們對窗口操作菜單更感興趣严嗜。

碰巧我們創(chuàng)建的圖書作者太簡單了,而且確實如此洲敢。不要執(zhí)行我們想要的漫玄,它將于所有合作伙伴一起打開一個列表,不管他們是否這本書的作者压彭?集合睦优。我們需要解決這個問題。

打開窗口動作菜單項哮塞,查找我們最近創(chuàng)建的圖書作者操作并編輯它刨秆,我們關心篩選器的部分,在“常規(guī)設置”選項卡內忆畅。

TIP:在許多情況下衡未,使用Debug菜單中的Edit Action選項更方便尸执,它提供編輯用于訪問當前視圖窗口操作的便捷快捷方式。

域值字段可以有一個表達式缓醋,改表達式定義要顯示的記錄的過濾器如失,這種“域表達式”遵循特定的odoo語法,后面的章節(jié)對此進行解釋送粱,現(xiàn)在我們知道它是一個三胞胎列表就足夠了褪贵。

在我們的例子中,我們使用“域值”的表達式是:
| [('x_is_book_author', '=', True)]

為了可用性抗俄,我們還想要創(chuàng)建新的記錄有是否作者標記脆丁。我們可以在試圖上通過設置默認值操作來完成,這是通過上下文方式完成的动雹,上下文是Odoo傳遞會話信息的方式槽卫,包括要使用的默認值。后面幾章將詳細討論它胰蝠,現(xiàn)在我們只需要知道它是一個鍵值對字典歼培。以default_前綴的值為相應字段提供默認值。

在我們的例子中茸塞,上下文值需要的表達式是:
| {'default_x_is_book_author': True}


微信截圖_20190403225703.png

就是這樣躲庄。如果我們現(xiàn)在嘗試Library | Book Authors菜單選項,它應該只列出Is Book Author的合作伙伴?檢查標志钾虐,如果有的話噪窘。如果我們試著創(chuàng)建一個新的圖書作者,我們會看到那個是圖書作者嗎?默認情況下禾唁,復選框將被方便地選中效览。

我們使用的域過濾器不能被用戶刪除〉炊蹋可以設置可以刪除的默認過濾器丐枉,使用上下文啟用默認搜索過濾器。這是通過search_default_鍵完成的掘托,如第9章“后端視圖—設計用戶界面”中所述瘦锹。

創(chuàng)建一個自定義模型

我們現(xiàn)在有一個圖書館的以及菜單,以及有一個作者的菜單項闪盔,是時候添加一個圖書菜單去管理圖書的記錄弯院。

讓我們重新查詢,在設置-> 技術->數(shù)據(jù)結構->模型菜單泪掀,點擊新建听绳,填寫模型的信息如下:

  • 模型描述:Book
  • 模型: x_library_book

我們先保存

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市异赫,隨后出現(xiàn)的幾起案子椅挣,更是在濱河造成了極大的恐慌头岔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鼠证,死亡現(xiàn)場離奇詭異峡竣,居然都是意外死亡,警方通過查閱死者的電腦和手機量九,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門适掰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荠列,你說我怎么就攤上這事类浪。” “怎么了肌似?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵戚宦,是天一觀的道長。 經常有香客問我锈嫩,道長,這世上最難降的妖魔是什么垦搬? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任呼寸,我火速辦了婚禮,結果婚禮上猴贰,老公的妹妹穿的比我還像新娘对雪。我一直安慰自己,他們只是感情好米绕,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布瑟捣。 她就那樣靜靜地躺著,像睡著了一般栅干。 火紅的嫁衣襯著肌膚如雪迈套。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天碱鳞,我揣著相機與錄音桑李,去河邊找鬼。 笑死窿给,一個胖子當著我的面吹牛贵白,可吹牛的內容都是我干的。 我是一名探鬼主播崩泡,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼禁荒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了角撞?” 一聲冷哼從身側響起呛伴,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勃痴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后磷蜀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召耘,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年褐隆,在試婚紗的時候發(fā)現(xiàn)自己被綠了污它。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡庶弃,死狀恐怖衫贬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情歇攻,我是刑警寧澤固惯,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站缴守,受9級特大地震影響葬毫,放射性物質發(fā)生泄漏。R本人自食惡果不足惜屡穗,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一贴捡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧村砂,春花似錦烂斋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至评腺,卻和暖如春帘瞭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歇僧。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工图张, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诈悍。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓祸轮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侥钳。 傳聞我的和親對象是個殘疾皇子适袜,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容