DbEntry 開發實踐 Wiki 系統(七)

2022-03-24 15:24:09 字數 3486 閱讀 9550

流水帳記到現在,系統基本完成,不過還有幾點需要解決。

首先,我們來新增乙個「記住我」的功能。當使用者登入的時候,如果選擇了「remember me」,那麼就同時把使用者名稱密碼等資訊儲存到使用者的cookie中,使用者訪問時,先檢測cookie,如果cookie中有儲存的資訊,則驗證此資訊,如果驗證通過,則建立相應的session,否則導向login頁面。

先在sysuser中建立序列化和反序列化的兩個函式:

**public

static

string

serializetostring(

string

name, 

string

password)\n"

, name, password);

var bs 

=encoding.utf8.getbytes(s);

return

base32stringcoding.decode(bs);

}public

static

sysuser deserializefromstring(

string

source)

return

null;}

然後修改main.master中的oninit以修改驗證邏輯加入cookie部分:

**protected

override

void

oninit(eventargs e)if(

null

==u)

this

.setloginuser(u);

}username.text 

=u.name;

base

.oninit(e);

}然後修改login.aspx加入remember me按鈕:

**protected

void

page_load(

object

sender, eventargs e)

formsauthentication.signout();

var luc 

=request.cookies[const.logincookie];

if(luc 

!=null)}

}protected

void

signin_click(

object

sender, eventargs e)

private

void

processlogin(

string

name, 

string

password)

;response.cookies.add(cookie);

}var url 

=request[const.backtourl];if(

!string

.isnullorempty(url))

else

}else

}執行程式,驗證如果選擇了remember me,則再次直接訪問頁面,不再需要登入,而且,welcome資訊顯示名稱正確;如果點選了logout,再次執行程式,則仍然需要登入。現在,這個功能開發完畢。

第二個要完成的功能,是wiki和使用者關聯。既然我們現在有登入使用者了,自然可以記錄下究竟是誰修改了哪個wiki頁。

修改article和articlehistory,增加user:

[belongsto]

public

abstract

sysuser user 

asp:templatefield 

headertext

="user"

>

<

itemtemplate

>

# ((articlehistory)(container.dataitem)).user.name 

%>

itemtemplate

>

asp:templatefield

>

在show.aspx裡增加乙個tip變數,乙個msg變數,這個msg變數,標記為inmaster,以便我們訪問母板頁裡的msg控制項:

[inmaster] 

public

lephone.web.common.noticelabel msg;

private

string

tip;

然後在page_load裡對tip進行賦值,再override onprerender函式,新增這個tip(之所以需要這樣,而不是直接在page_load裡操作,也是因為asp.net奇怪的事件載入順序):

protected

override

void

onprerender(eventargs e)

}現在,執行程式,show頁面底邊將會顯示編輯者的名字和編輯的時間,history頁面也會顯示編輯者的名字了。

最後,我們再考慮一下效能。對於show頁面而言,問題不大,不過,history頁面,並不顯示content,卻需要載入它,是有些浪費的,所以,我們標記articlehistory的content為延遲載入:

[lazyload]

public

abstract

string

content 

另外,history裡顯示使用者名稱,show頁面顯示使用者名稱,都需要訪問資料庫,history更是多次訪問資料庫讀取sys_users表,只為得到使用者名稱,對於這一點,我們給它加個快取,在web.config裡新增:

<

add 

key="cacheenabled"

value

="true"

/>

在sysuser上標記可以被快取:

[cacheable]

public

abstract

class

sysuser : linqobjectmodel

<

sysuser

>

為了執行時可以跟蹤生成的sql語句,也為了驗證一下我們快取的效果,修改web.config中的log設定,將它設定為將生成的sql寫入資料庫:

<

add 

key="sqllogrecorder"

value

="lephone.data.logging.databaselogrecorder, lephone.data"

/>

分別以開啟和關閉快取的方式訪問相同的網頁,之後檢查資料庫lephone_logs表裡的sql語句,驗證有快取時生成sql數量較少。另外,articlehistory相關的select語句在history頁面不會有content在內。

好的,這個visualwiki系列文章到這裡算是全部結束了,雖然這個wiki系統,還有一些功能有待完善,比如歷史比對功能等,不過,它已經是乙個可以執行,並且用起來也頗順手的wiki了,作為我前乙個公司的內部wiki系統,它一直執行,而且表現不錯。最終**:visualwiki7.7z

全文完。

wiki系統開發

1 賬戶管理功能,包括賬戶分級,許可權分配等。2 工程管理功能,包括工程初始化 工程關聯,工程專案 工程具體 庫等 3 目錄的靈活編排,包括多級目錄 父級目錄的隨時設定更改等 4 頁面的附件功能,包括附件管理 新增刪除 有條件的對於文字新增預覽功能。5 排版功能,頁面編寫採用markdown引擎實現...

桌面版wiki開發招兵

桌面版wiki開發招兵 群的號碼 18997277 有興趣者 入 專案的部落格 http blog.sina.com.cn u 1224228575 面向人群 1 開發環境 delphi sql server2000 首選開發環境 c s結構orb s結構 2 對桌面wiki感興趣的人。3 想進行專...

ChatBot framework 開發實踐

通常而言,通用聊天機械人 比如小冰等 底層技術是採用類似seq2seq等 生成 技術的。但是這種機械人屬於探索性質,無法 提供特定的服務。而siri則是兼具閒聊以及垂直領域功能的,比如可以預約提醒,打 定餐廳等特定功能。相信siri在實現特定預約提醒,打 功能等,則是使用了 語言模板 匹配技術以及結...