国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

使用Maypole進(jìn)行快速Web應(yīng)用開發(fā):第2部分

2019-11-18 17:22:41
字體:
供稿:網(wǎng)友

當(dāng)我們:離開我們無畏的web開發(fā)者的時(shí)候,他已經(jīng)成功地用11行代碼建立了一個(gè)在線銷售目錄。然而現(xiàn)在,他必須接著將這變成一個(gè)帶有購(gòu)物車以及相關(guān)組件的銷售站點(diǎn)。是時(shí)候該看些關(guān)于我們上星期談及的可擴(kuò)展性了;不幸的是,這意謂著我們必須再多寫一些代碼(事情總不是十全十美的對(duì)吧)。

我是誰(shuí)?

為了把購(gòu)物車加入站點(diǎn),我們需要介紹一下當(dāng)前用戶的概念。這將會(huì)允許站點(diǎn)的訪問者登錄并且擁有他們自己的購(gòu)物車。我們將把二個(gè)新的表加入數(shù)據(jù)庫(kù),一個(gè)表儲(chǔ)存關(guān)于用戶的詳情,一個(gè)表代表購(gòu)物車。我們的表看起來會(huì)是這樣:

CREATETABLEuser(idintnotnullauto_incrementPRimarykey,first_namevarchar(64),last_namevarchar(64),emailvarchar(255),passWordvarchar(64),address1varchar(255),address2varchar(255),statevarchar(255),postal_codevarchar(64),countryvarchar(64));CREATETABLEcart_item(idintnotnullauto_incrementprimarykey,userint,itemint);

像以前一樣,Maypole會(huì)自動(dòng)為表創(chuàng)建類。我們使用Class::DBI的自動(dòng)關(guān)聯(lián)能力來讓Maypole處理這些新增的表:

ISellIt::User->has_many("cart_items"=>"ISellIt::BasketItem");ISellIt::BasketItem->has_a("user"=>"ISellit::User");ISellIt::BasketItem->has_a("item"=>"ISellit::Product");

我們現(xiàn)在需要一個(gè)方法把有關(guān)當(dāng)前用戶的信息告訴我們的應(yīng)用程序。在Maypole文檔中,關(guān)于Maypole的認(rèn)證系統(tǒng)有一段很長(zhǎng)的說明,但是引入當(dāng)前用戶概念最容易的方法之一是使用Maypole::Authentication::UsersessionCookie模塊。

顧名思義,這個(gè)模塊把每個(gè)用戶和一個(gè)session相關(guān)聯(lián),并給用戶的瀏覽器發(fā)送一個(gè)cookie。同時(shí)也負(fù)責(zé)確認(rèn)用戶的登錄憑證,默認(rèn)方法是在一張數(shù)據(jù)庫(kù)表中查找用戶名和密碼;這正是我們想要的!

Maypole提供一個(gè)authenticate方法給我們重載,而且在這里我們會(huì)攔截任何一個(gè)需要合法用戶身份的請(qǐng)求,比如查看購(gòu)物車,把物品加入訂單等等。

subauthenticate{my($self,$r)=@_;unless($r->{table}eq"cart"or$r->{action}eq"buy"){returnOK;}#Elseweneedauser$r->get_user;if(!$r->{user}){$r->template("login");}returnOK;}

UserSessionCookie模塊提供的一個(gè)get_user方法,它負(fù)責(zé)所有對(duì)cookie和登陸憑證進(jìn)行設(shè)置的工作。我們唯一需要做的就是告訴它,我們想用用戶的電子郵件地址和密碼作為登錄憑證,而不是一些隨意的用戶名。我們可以在我們的應(yīng)用程序配置中對(duì)這些進(jìn)行指定,如同UserSessionCookie文檔中所述:

ISellIt->{config}->{auth}->{user_field}="email";

下一步,我們建立一個(gè)登錄

那么,現(xiàn)在我們得允許用戶查看購(gòu)物車。

顯示購(gòu)物車

這也被證明了是相當(dāng)簡(jiǎn)單的(Maypole中的大多數(shù)事物都是)只需要調(diào)用用戶類的一個(gè)動(dòng)作。我們需要把用戶購(gòu)物車的物品加入我們的Maypole請(qǐng)求對(duì)象中:

packageISellIt::User;subview_cart:Exported{my($self,$r)=@_;$r->{objects}=[$r->{user}->cart_items];}

然后我們需要制作一個(gè)顯示他們的user/view_cart模板:

[PROCESSheader]<h2>YourShoppingCart</h2><TABLE><TR><TH>Product</TH><TH>Price</TH></TR>[SETcount=0;FORitem=objects;SETcount=count 1;"<tr";'class="alternate"'IFcount2;">";]<TD>[item.product.name]</TD><TD>[item.product.price]</TD><TD><FORMACTION="/cart_item/delete/[item.id]"><INPUTTYPE="submit"VALUE="Removefromcart"></FORM></TD></tr>[END]</TABLE><AHREF="/user/checkout">Checkout!</A>

再次重申,這里的HTML代碼寫得并不好,但它也提供給了一些東西使得我們能把它交給設(shè)計(jì)人員進(jìn)行很好地設(shè)計(jì)。現(xiàn)在該對(duì)購(gòu)物車結(jié)帳了……

結(jié)帳

構(gòu)建一個(gè)電子商務(wù)應(yīng)用程序最困難的部份就是與付款和信用卡結(jié)算服務(wù)的交互。我們將使用"Business::OnlinePayment":http://search.cpan.org/perldoc?Business::OnlinePayment來處理這方面的事情,處理結(jié)算訂單則是簡(jiǎn)單地發(fā)一封電子郵件。

真正的結(jié)算頁(yè)面只需要收集信用卡和送貨信息,所以實(shí)際上它不需要任何對(duì)象;事實(shí)上我們接下來唯一需要的對(duì)象是ISellIt::User,它已經(jīng)由認(rèn)證過程納入請(qǐng)求對(duì)象中。無論如何我們的確需要顯示物品總費(fèi)用,所以,為了使事情變得更簡(jiǎn)單,我們會(huì)添加一個(gè)動(dòng)作用Perl來計(jì)算它。我們?yōu)橛脩舻目傎M(fèi)用建立一個(gè)方法,以備后用:

packageISellIt::User;useList::Utilqw(sum);subbasket_cost{my$self=shift;summap{$_->item->price}$self->basket_items}

再定義checkout把總額加入我們的模板:

subcheckout:Exported{my($self,$r)=@_;$r->{template_args}{total_cost}=$r->{user}->basket_cost;}

現(xiàn)在我們寫我們的user/checkout模板:

[PROCESSheader]<h2>Checkout</h2><p>Pleaseenteryourcreditcardanddeliverydetails.</p><formmethod="post"action="https://www.isellit.com/user/do_checkout"><P>Firstname:<inputname="first_name"value="[my.first_name]"><BR>Lastname:<inputname="last_name"value="[my.last_name]"></P><P>Streetaddress:<inputname="address"value="[my.address1]"><BR>City:<inputname="city"value="[my.address2]"><BR>State:<inputname="state"value="[my.state]">Z

這頁(yè)不需要載入任何對(duì)象,因?yàn)樗皇怯脕盹@示一個(gè)注冊(cè)表單;我們只要把我們的模板加入/user/register:

[INCLUDEheader]<P>WelcometobuyingwithiSellIt!</P><P>Tosetupyouraccount,weonlyneedafewdetailsfromyou:</P><FORMMETHOD="POST"ACTION="/user/do_register"><P>Yourname:<inputname="first_name"><inputname="last_name"></P><P>Youremailaddress:<inputname="email"></P><P>Pleasechooseapassword:<inputname="password"></P><inputtype="submit"name="Register"value="Register"></FORM>

像以前一樣,我們需要向

至此:現(xiàn)在我們可以創(chuàng)建新的用戶;提供一個(gè)找回密碼功能就作為一個(gè)練習(xí)留給感興趣的讀者。

Maypole摘要

現(xiàn)在我們已經(jīng)完成了——在一個(gè)很短的時(shí)間里,用最少量的代碼,我們已經(jīng)創(chuàng)建了一個(gè)在線商店。我喜歡Maypole的原因之一就是你只需要專心編寫處理商業(yè)邏輯流程的代碼就行;所有其他的顯示模板都可以“借鑒”一下別人的,再給專業(yè)人士去處理,而且余下的工作都被Maypole在幕后魔術(shù)般地處理了。

感謝TPF基金對(duì)Maypole的支持,我們現(xiàn)在有了一份詳盡且附有一些案例分析(包括這個(gè))的用戶手冊(cè),以及一個(gè)活躍的用戶和開發(fā)者社區(qū)。我希望你很快也會(huì)加入!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富平县| 康乐县| 河西区| 巨野县| 简阳市| 兴义市| 娄底市| 福泉市| 汝南县| 虎林市| 丹凤县| 肥城市| 翼城县| 五家渠市| 琼海市| 清徐县| 什邡市| 五河县| 建水县| 奉贤区| 固始县| 商洛市| 邢台市| 茌平县| 上蔡县| 衢州市| 余干县| 招远市| 平舆县| 依兰县| 同江市| 盐池县| 平利县| 广东省| 文登市| 元朗区| 双城市| 丰城市| 天水市| 沂水县| 隆回县|