2.構(gòu)建第一個(gè)應(yīng)用程序

來源:http://www.odoov.com/index.php?title=%E7%AC%AC%E4%BA%8C%E7%AB%A0_%E6%9E%84%E5%BB%BA%E6%82%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F


????????可以參考著名的http://todomvc.com/ 項(xiàng)目棒假。
????????我們將創(chuàng)建一個(gè)簡單的 ToDo 應(yīng)用修然,它將允許我們添加新的任務(wù)名眉,當(dāng)任務(wù)完成的時(shí)候標(biāo)記它們奄毡,并最終清除所有的已完成任務(wù)的列表。
????????Odoo遵循 MVC-like 架構(gòu)設(shè)計(jì),當(dāng)實(shí)現(xiàn) To-Do 應(yīng)用的時(shí)候,我們會接觸不同的層。

模型層益老,定義app 的數(shù)據(jù)結(jié)構(gòu)
視圖層,描述用戶界面
控制器層寸莫,支持應(yīng)用的業(yè)務(wù)邏輯

2.1.基本概念

2.1.1.了解應(yīng)用程序和模塊

????????在Odoo中捺萌,經(jīng)常聽見模塊(modules)應(yīng)用程序(application)。那么膘茎,它們有什么區(qū)別呢桃纯?
????????模塊元件是Odoo應(yīng)用程序的組成塊。一個(gè)模塊可以將新功能添加到 Odoo披坏,或修改現(xiàn)有的功能态坦。 它是一個(gè)包含名為manifest.py的清單或描述符文件的目錄,再加上實(shí)現(xiàn)其功能的其余文件棒拂。
????????應(yīng)用程序是將主要功能添加到Odoo的方式伞梯。他們?yōu)楹诵墓δ茉兀鐣?jì)或人力資源帚屉,其它的模塊在此基礎(chǔ)上修改或擴(kuò)展功能谜诫。正因?yàn)槿绱耍麄冊贠doo應(yīng)用程序菜單中高亮顯示攻旦。
????????如果您的模塊很復(fù)雜喻旷,并將新的或重大的功能添加到 Odoo,您可以考慮將它創(chuàng)建為應(yīng)用程序敬特。如果您的模塊只是對現(xiàn)有的 Odoo 中的功能進(jìn)行更改掰邢,則可能不需要將它創(chuàng)建為應(yīng)用程序。
????????在清單中定義模塊是否是應(yīng)用程序伟阔。技術(shù)上它在模塊使用上,沒有任何的影響掰伸。它只是在應(yīng)用程序清單中高亮顯示皱炉。

2.1.2.修改和擴(kuò)展模塊

????????在示例中,我們要記住狮鸭,在新模塊創(chuàng)建時(shí)合搅,要盡可能少的使用依賴關(guān)系多搀。然而,這不是常見情況灾部。大多數(shù)情況下康铭,我們將修改或擴(kuò)展現(xiàn)有的模塊。
????????一般情況下赌髓,通過直接更改它們的源代碼修改現(xiàn)有模塊的功能是一個(gè)很糟糕的方法从藤。對于 Odoo 提供的官方模塊,尤其如此锁蠕。如果這樣做夷野,你不能明確的區(qū)分原始模塊代碼和修改,并且這使它難以升級荣倾,因?yàn)樯墪采w所做的修改悯搔。相反,我們應(yīng)該創(chuàng)建一個(gè)額外的模塊舌仍,去實(shí)現(xiàn)我們需要改變或者增加的功能妒貌。事實(shí)上,Odoo 的主要優(yōu)勢之一是繼承機(jī)制铸豁,允許自定義模塊擴(kuò)展現(xiàn)有模塊苏揣,無論是官方的還是社區(qū)的。
????????繼承可以是任意一個(gè)層次︰ 數(shù)據(jù)模型推姻、業(yè)務(wù)邏輯和用戶界面層平匈。一旦我們可以輕松的創(chuàng)建一個(gè)新的模塊,我們可以深入的學(xué)習(xí)繼承機(jī)制藏古。

2.1.3.創(chuàng)建模塊的基本框架

????????Odoo包括一個(gè)scaffold命令來自動創(chuàng)建一個(gè)新的模塊目錄增炭,其基本結(jié)構(gòu)已經(jīng)就位。 你可以用下面的命令來了解更多拧晕。

$ ~/odoo-dev/odoo/odoo-bin scaffold --help 

????????在處理下一個(gè)模塊時(shí)隙姿,您可能想要記住這一點(diǎn),但是我們現(xiàn)在不會使用它厂捞,因?yàn)槲覀儗幵甘謩觿?chuàng)建模塊的所有結(jié)構(gòu)输玷。

Odoo addon模塊是一個(gè)包含 manifest.py 描述文件的目錄
備注
在以前的版本中,此描述符文件命名為 openerp.py靡馁。 此名稱仍然受支持欲鹏,但已被棄用

????????它還需要是 Python 可導(dǎo)入的,因此它還必須有一個(gè) init.py 文件臭墨。模塊的目錄名稱是其技術(shù)名稱赔嚎。 我們將使用todo_app。 文件名稱必須是有效的Python標(biāo)識符:它應(yīng)以字母開頭,并且只能包含字母尤误,數(shù)字和下劃線字符侠畔。
????????以下命令將創(chuàng)建模塊目錄并在其中創(chuàng)建一個(gè)空的init.py文件,?/ odoo-dev / customaddons / todo_app / __ init__.py 如果想通過命令行损晤,下面的命令行你將會用到:

$ mkdir ~/odoo-dev/custom-addons/todo_app 
$ touch  ~/odoo-dev/custom-addons/todo_app/__init__.py 

????????接下來软棺,我們需要?jiǎng)?chuàng)建清單文件。 它只包含一個(gè)Python字典尤勋,里面大約有十幾個(gè)可能的屬性; 其中喘落,只有 name 屬性是必填的。描述屬性(對于較長的描述)和作者屬性是建議填寫的斥黑。 我們現(xiàn)在應(yīng)該在init.py文件旁邊添加一個(gè)manifest.py文件揖盘,其中包含以下內(nèi)容

{
'name': 'To-Do Application',
'description': 'Manage your personal To-Do tasks.',
'author': 'Daniel Reis',
'depends': ['base'],
'application': True,
}

????????depends 屬性可以包含所依賴的其他模塊的列表。 當(dāng)安裝此模塊時(shí)锌奴,Odoo 將自動安裝它們兽狭。 這不是一個(gè)強(qiáng)制性的屬性,但建議總是包含它鹿蜀。 如果不需要特定的依賴箕慧,我們應(yīng)該依賴于核心 base 模塊。你應(yīng)該注意確保所有依賴關(guān)系在這里明確設(shè)置; 如果其所依賴的模塊在其之后加載茴恰,模塊可能無法安裝在干凈的數(shù)據(jù)庫(由于缺少依賴關(guān)系)或有加載錯(cuò)誤颠焦。
????????對于我們的應(yīng)用程序,我們不需要任何特定的依賴關(guān)系往枣,因此我們僅依賴于 base 模塊 為了簡明起見伐庭,我們選擇使用非常少的描述鍵,但是在真實(shí)的情況下分冈,我們建議您還使用附加鍵圾另,因?yàn)樗鼈兣c Odoo 應(yīng)用商店相關(guān):

summary 顯示為模塊的副標(biāo)題
version 默認(rèn)為 1.0。 它應(yīng)該遵循版本語義規(guī)則(詳見http://semver.org/
license 許可證標(biāo)識符雕沉,默認(rèn)為LGPL-3
website 網(wǎng)站是一個(gè)用于查找有關(guān)模塊的更多信息的URL集乔。 這可以幫助人們找到更多的文檔或問題跟蹤,以提出 Bug 和建議坡椒。
category是模塊的功能類別扰路,默認(rèn)為Uncategorized。 現(xiàn)有類別的列表可以在【應(yīng)用程序】下拉列表中的安全組表單(設(shè)置|用戶|組)中找到其它可用的描述符:
installable 默認(rèn)為 True倔叼,但可以設(shè)置為 False 以禁用模塊
auto_install 如果設(shè)置為True汗唱,此模塊將被自動安裝,前提是其所有依賴項(xiàng)都已安裝缀雳。 它用于必裝模塊

????????從Odoo 8.0 開始渡嚣,我們可以在模塊的頂層目錄中使用 README.rst 或 README.md 文件替代描述鍵。

2.1.4.關(guān)于許可證

????????為您的工作選擇許可證非常重要肥印,您應(yīng)該仔細(xì)考慮您最佳的選擇及其影響识椰。 Odoo模塊使用最多的許可證是GNU通用公共許可證(LGLP)和Affero通用公共許可證(AGPL)。 LGPL更為寬容深碱,允許商業(yè)衍生工作腹鹉,而不需要共享相應(yīng)的源代碼。 AGPL是一個(gè)更強(qiáng)大的開源許可證敷硅,需要派生工作和服務(wù)托管來共享其源代碼功咒。 請?jiān)L問https://www.gnu.org/licenses/了解有關(guān)GNU許可證的更多信息。

2.1.5.添加 addons 路徑

????????現(xiàn)在我們有一個(gè)簡單的新模塊绞蹦,我們希望將它提供給 Odoo 實(shí)例力奋。 為此,我們需要確保包含該模塊的目錄位于addons路徑中幽七,然后更新Odoo模塊列表景殷。 在上一章中已經(jīng)詳細(xì)解釋了這兩個(gè)動作,但是在這里澡屡,我們將繼續(xù)簡要介紹一下需要的內(nèi)容猿挚。 我們將在我們的工作目錄中定位并使用適當(dāng)?shù)腶ddons路徑配置啟動服務(wù)器:

$ cd ~/odoo-dev
$ ./odoo/odoo-bin -d todo --addons-path ="custom-addons, odoo/addons" --save

????????--save選項(xiàng)保存您在配置文件中使用的選項(xiàng)。這使我們在重新啟動服務(wù)器時(shí)重復(fù)使用它們:只需運(yùn)行./odoobin驶鹉,并使用上次保存的選項(xiàng)绩蜻。 仔細(xì)查看服務(wù)器日志。應(yīng)該有一個(gè)INFO室埋? odoo:addons paths:[...] line办绝。它應(yīng)該包括我們的 custom-addons 目錄。 記住還要包括您可能正在使用的任何其他插件目錄姚淆。例如孕蝉,如果您還有一個(gè) ~/odoo-dev/extra 目錄,其中包含要使用的其他模塊肉盹,則可能還要使用--addons-path選項(xiàng)來包含它們:

--addons-path =“custom-addons, extra, odoo/addons”

????????現(xiàn)在我們需要Odoo實(shí)例來識別剛添加的新模塊昔驱。

2.1.6.安裝新模塊

????????在“應(yīng)用程序”頂部菜單中,選擇“更新應(yīng)用程序列表”選項(xiàng)上忍。這將更新模塊列表骤肛,添加自上次更新以來可能添加到列表中的任何模塊。請記住窍蓝,我們需要啟用開發(fā)人員模式才能看到腋颠。

注意
確保您的Web客戶端會話正在使用正確的數(shù)據(jù)庫。您可以在右上角查看:數(shù)據(jù)庫名稱顯示在括號中吓笙,緊隨用戶名淑玫。強(qiáng)制使用正確數(shù)據(jù)庫的方法是使用附加選項(xiàng)
--db-filter = ^MYDB$
啟動服務(wù)器實(shí)例。

????????應(yīng)用程序選項(xiàng)向我們顯示可用模塊的列表。默認(rèn)情況下絮蒿,它只顯示應(yīng)用程序模塊尊搬。由于我們創(chuàng)建了一個(gè)應(yīng)用程序模塊,因此我們不需要?jiǎng)h除該過濾器來查看它土涝。在搜索中鍵入todo佛寿,您應(yīng)該看到我們的新模塊。

2.1.7.升級模塊

????????開發(fā)一個(gè)模塊是一個(gè)迭代的過程但壮,它會把你在源代碼中更改的功能冀泻,在 Odoo 中體現(xiàn)出來。在大多數(shù)情況下蜡饵,只需要升級你的模塊:在應(yīng)用程序列表中的模塊弹渔,一旦它已經(jīng)安裝,你就可以使用升級按鈕溯祸。然而肢专,如果只修改了 Python 代碼,升級就可能沒有效果您没。除了模塊的升級鸟召,還需要重新啟動應(yīng)用程序服務(wù)器。只要 Odoo 成功加載了 Python 代碼氨鹏,以后任何代碼的更改都需要重新啟動服務(wù)器才能應(yīng)用欧募。
????????在某些情況下,如果模塊更改了數(shù)據(jù)文件和 Python 代碼仆抵,您可能需要同時(shí)做這兩種操作跟继。對于Odoo新開發(fā)人員來說,這是很容易混淆镣丑。但幸運(yùn)的是舔糖,還有更好的方式。更改我們的模塊最安全和最快的方式莺匠,是停止并重新啟動服務(wù)器金吗,并按要求把我們的模塊升級到我們工作的數(shù)據(jù)庫。在終端服務(wù)器實(shí)例運(yùn)行時(shí)趣竣,使用ctrl 鍵 + C 來停止它摇庙。然后,啟動服務(wù)器和升級 todo_app 模塊遥缕,使用下面的命令︰

python odoo-bin -c /etc/odoo10-server.conf --stop-after-init -d xxxx -u all

$./odoo-bin -d todo -u todo_app

????????-u 選項(xiàng)(或 —— update) 需要 -d 選項(xiàng),并需要一個(gè)逗號分隔更新的模塊列表卫袒。例如,我們可以使用 -u todo_app,mail单匣。一個(gè)模塊更新時(shí)夕凝,也將更新所有其他依賴它的已安裝的模塊宝穗。 -all 是更新所有模塊。
????????這是必須保持的繼承機(jī)制码秉,用于擴(kuò)展功能的完整性逮矛。
????????總體來說,當(dāng)你需要更新應(yīng)用模塊時(shí)泡徙,最安全的方法是利用前面講述的命令重新啟動 Odoo 實(shí)例橱鹏。按 up 鍵就可以使用前面的命令膜蠢。所以堪藐,大多數(shù)情況下,你會發(fā)現(xiàn)自己經(jīng)常使用 Ctrl + C 挑围,up 和 Enter 鍵組合礁竞。
????????值得特別注意的是,更新模塊列表和卸載模塊這兩種操作杉辙,都不可以通過命令行操作模捂。需要在 web 界面的應(yīng)用程序菜單中進(jìn)行。

2.1.8.服務(wù)器開發(fā)模式

????????Odoo 10 新的選項(xiàng)特性蜘矢,更方便開發(fā)者進(jìn)行開發(fā)狂男。要使用它,在啟動服務(wù)器實(shí)例時(shí)品腹,附加選項(xiàng)--dev=all岖食。這有幾個(gè)小技巧,可以縮短我們的開發(fā)周期舞吭。最重要的是︰
????????一旦保存Python文件泡垃,自動重新加載 Python 代碼,避免手動重啟服務(wù)器羡鸥;從 XML 文件中蔑穴,直接獲取視圖定義,避免手動模塊升級惧浴;
????????--dev選項(xiàng)接受一個(gè)逗號分隔的列表存和,然而大部分時(shí)間都使用的是合適的all選項(xiàng)。我們還可以指定使用的調(diào)試器衷旅。默認(rèn)情況下捐腿,Python 調(diào)試器,使用pdb 芜茵。有些人可能喜歡安裝和使用其他調(diào)試程序叙量。它也支持ipdb和 pudb調(diào)試。

2.2.模型層

????????讓我們開始在Odoo中添加一個(gè)簡單的新模型九串。
????????模型描述業(yè)務(wù)對象绞佩,例如商機(jī)寺鸥、銷售訂單或合作伙伴(客戶,供應(yīng)商等)品山。 模型具有屬性列表胆建,并且還可以定義特定的業(yè)務(wù)邏輯。
????????模型是從 Odoo 模板類派生的 Python 類實(shí)現(xiàn)的肘交。 它們直接轉(zhuǎn)換為數(shù)據(jù)庫對象笆载,Odoo在安裝或升級模塊時(shí)會自動處理。負(fù)責(zé)此機(jī)制的是對象關(guān)系模型(ORM)涯呻。
????????我們的模塊將是一個(gè)非常簡單凉驻,記錄保留待辦事項(xiàng)的應(yīng)用程序。
????????應(yīng)用程序的主要功能有:用于描述的簡單文本字段复罐、用于將其標(biāo)記為完成的復(fù)選框涝登、最后需要添加一個(gè)按鈕來清除已完成任務(wù)的舊的待辦事項(xiàng)列表。

2.2.1.創(chuàng)建數(shù)據(jù)模型

????????Odoo 開發(fā)指導(dǎo)指出效诅,模型的 Python 文件應(yīng)放在一個(gè) models 子目錄中胀滚。為了簡單起見,我們先不遵循這一準(zhǔn)則乱投,我們在 todo_app 模塊的主目錄中創(chuàng)建一個(gè)todo_model.py文件咽笼。在文件中添加以下內(nèi)容:

# -*- coding: utf-8 -*- 
from odoo import models, fields 
class TodoTask(models.Model): 
    _name = 'todo.task' 
    _description = 'To-do Task'
    name = fields.Char('Description', required=True) 
    is_done = fields.Boolean('Done?') 
    active = fields.Boolean('Active?', default=True)

????????第一行是一個(gè)特殊的標(biāo)記告訴Python解釋器,這個(gè)文件有UTF-8戚炫,以便它可以期望和處理非ASCII字符剑刑。我們不會使用任何非 ANSI 字符,但無論如何這是一個(gè)很好的做法嘹悼。
????????第二行是Python代碼import語句叛甫,從Odoo核心導(dǎo)入模型和字段對象。
????????第三行聲明了我們的新模型杨伙。它是從models.Model派生的類其监。
????????第四行設(shè)置_name屬性,定義將在整個(gè)Odoo中引用此模型的標(biāo)識符限匣。注意抖苦,實(shí)際的Python類名,在這個(gè)例子中米死,TodoTask對其他Odoo模塊是無意義的锌历。 _name值將用作標(biāo)識符。
????????請注意峦筒,此行和以下行是縮進(jìn)的究西。如果你不熟悉Python,你必須知道這是很重要的:縮進(jìn)定義一個(gè)嵌套的代碼塊物喷,所以這四行應(yīng)該是同樣縮進(jìn)卤材。
????????然后我們有_description模型屬性遮斥。它不是強(qiáng)制性的,但它為模型記錄提供了一個(gè)用戶友好的名稱扇丛,可用于用戶友好的消息术吗。
????????最后三行定義模型的字段。值得注意的是name和active是特殊的字段名帆精。默認(rèn)情況下较屿,當(dāng)從其他模型引用它時(shí),Odoo將使用name字段作為記錄的標(biāo)題卓练。active字段用于停用記錄隘蝎,默認(rèn)情況下,僅顯示活動記錄昆庇。我們將使用它來清除已完成的任務(wù)末贾,而不會從數(shù)據(jù)庫中刪除它們。
????????現(xiàn)在整吆,該文件尚未被模塊使用。我們必須告訴Python使用init.py文件中的模塊加載它辉川。讓我們編輯它以添加以下行:

from . import todo_model

????????就是這樣而已表蝙!為了使我們的Python代碼更改生效,服務(wù)器實(shí)例需要重新啟動(除非它使用--dev模式)乓旗。
????????我們不會看到任何菜單選項(xiàng)來訪問這個(gè)新模型府蛇,因?yàn)槲覀冞€沒有添加它們。我們?nèi)匀豢梢允褂眉夹g(shù)菜單查看新創(chuàng)建的模型屿愚。在頂部菜單設(shè)置中汇跨,轉(zhuǎn)到技術(shù)|數(shù)據(jù)庫結(jié)構(gòu)|模型,在列表中搜索todo.task模型妆距,并單擊它以查看其定義:


來源odoo開發(fā)手冊

????????如果一切正常穷遂,則確認(rèn)已創(chuàng)建模型和字段。如果您在此處看不到它們娱据,請嘗試重新啟動服務(wù)器并進(jìn)行模塊升級蚪黑,如前所述。
????????我們還可以看到一些我們沒有聲明的額外字段中剩。這些是Odoo自動添加到每個(gè)新模型的保留字段忌穿。它們?nèi)缦滤荆?/p>

  • id是模型中每個(gè)記錄的唯一數(shù)字標(biāo)識符。
  • create_date和create_uid指定創(chuàng)建記錄的時(shí)間和由誰創(chuàng)建它结啼。
  • write_date和write_uid確認(rèn)記錄的上次修改時(shí)間以及誰對其進(jìn)行了修改掠剑。
  • __last_update是一個(gè)實(shí)際上不存儲在數(shù)據(jù)庫中的幫助信息。它用于并發(fā)檢查郊愧。

2.2.2.加入自動化測試

????????最佳編程實(shí)踐包括自動測試你的代碼朴译。 這對動態(tài)語言更為重要沸伏,如 Python語言。 因?yàn)闆]有編譯的步驟, 代碼實(shí)際是解釋運(yùn)行的动分,所以無法確定有無語法錯(cuò)誤的毅糟。 一個(gè)優(yōu)秀的編輯器可以提前幫助我們發(fā)現(xiàn)這些問題, 但卻不能幫助我們確保代碼按照預(yù)期的執(zhí)行,比如自動化測試澜公。
????????Odoo支持使用兩種方式來描述測試: 使用 YAML 數(shù)據(jù)文件或使用 Python 代碼姆另、基于 Unittest2 庫。 YAML 測試是一種遺留下來的舊老版本, 不建議使用坟乾。 我們會更樂意使用 Python 測試并將添加基本的測試實(shí)例到我門的模塊迹辐。
????????測試代碼文件必須用test_開頭 , 并且從tests/init.py文件導(dǎo)入。 但 測試的 目錄(或 Python 的子模塊)不應(yīng)從模塊的頂部的init.py導(dǎo)入甚侣, 因?yàn)閮H在測試的執(zhí)行的時(shí)候會自動被發(fā)現(xiàn)并裝載明吩。
????????測試必須放置在 tests/的 子目錄中。 添加一個(gè)tests/init.py 文件殷费,包含如下內(nèi)容:

from . import test_todo  

????????現(xiàn)在添加實(shí)際的測試代碼放在tests/test_todo.py文件里:

# -*- coding: utf-8 -*-
from odoo.tests.common import TransactionCase
class TestTodo(TransactionCase):
    def test_create(self):
        "Create a simple Todo"
        Todo = self.env['todo.task']
        task = Todo.create({'name': 'Test Task'})
        self.assertEqual(task.is_done, False)

????????這里增加了一種簡單的測試?yán)觼韯?chuàng)建新的to-do任務(wù)來驗(yàn)證測試?yán)邮欠癖粓?zhí)行? 測試?yán)拥淖侄尉哂泻线m的默認(rèn)值印荔。
????????現(xiàn)在我們即將運(yùn)行我們的測試。 當(dāng)我們在安裝模详羡,可以添加 --test-enable選項(xiàng)仍律。
????????該Odoo服務(wù)器將尋找一個(gè)tests/子目錄的升級模塊 并運(yùn)行。如果有任何測試失敗了实柠,服務(wù)器日志都會在這里顯示水泉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窒盐,隨后出現(xiàn)的幾起案子草则,更是在濱河造成了極大的恐慌,老刑警劉巖蟹漓,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕横,死亡現(xiàn)場離奇詭異,居然都是意外死亡牧牢,警方通過查閱死者的電腦和手機(jī)看锉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塔鳍,“玉大人伯铣,你說我怎么就攤上這事÷秩遥” “怎么了腔寡?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掌唾。 經(jīng)常有香客問我放前,道長忿磅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任凭语,我火速辦了婚禮葱她,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘似扔。我一直安慰自己吨些,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布炒辉。 她就那樣靜靜地躺著豪墅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黔寇。 梳的紋絲不亂的頭發(fā)上偶器,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音缝裤,去河邊找鬼屏轰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛倘是,可吹牛的內(nèi)容都是我干的亭枷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搀崭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了猾编?” 一聲冷哼從身側(cè)響起瘤睹,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎答倡,沒想到半個(gè)月后轰传,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘪撇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年获茬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倔既。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恕曲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渤涌,到底是詐尸還是另有隱情佩谣,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布实蓬,位于F島的核電站茸俭,受9級特大地震影響吊履,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜调鬓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一艇炎、第九天 我趴在偏房一處隱蔽的房頂上張望临谱。 院中可真熱鬧应结,春花似錦、人聲如沸卷胯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至归形,卻和暖如春托慨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暇榴。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工厚棵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔼紧。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓婆硬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奸例。 傳聞我的和親對象是個(gè)殘疾皇子彬犯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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

  • 創(chuàng)建第一個(gè)odoo 應(yīng)用 Odoo遵循傳統(tǒng)的MVC模式。我們可以通過創(chuàng)建簡單的To-Do 應(yīng)用來具體介紹分析 mo...
    F4A3閱讀 1,445評論 0 5
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,985評論 1 3
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,480評論 6 427
  • 此刻我躺在公司宿舍的床上,忍受著重感冒帶來的鼻塞和噴嚏逻卖,一邊用昏沉的腦袋思考著我是否還要再這樣走下去宋列,一邊期...
    63decc79a932閱讀 406評論 0 0
  • 你還想著要翩然離去 心里卻渴望著留下 你的厭倦,你的喜歡 像沒有痛苦的云 來的寂寞评也,去的瀟灑 在這人世間漂浮的太久...
    詩歌小王子閱讀 197評論 0 0