亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

用ReactJS和Python的Flask框架編寫留言板的代碼示例

2020-01-04 17:54:20
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了用ReactJS和Python的Flask框架編寫留言板的代碼示例,其他的話用到了MongoDB這個方便使用JavaScript來操作的數據庫,需要的朋友可以參考下
 

近期要在生產環境上使用react,所以,自己學習了一下,寫了一個簡單的留言板小程序。完整的代碼可以到這里下載:message-board

Use

前端使用React,然后還有Bootstrap和jQuery,React負責前端展現,jQuery主要是向服務器發送ajax請求。
后端使用Flask和MongoDB,為前端提供數據。這里主要關注前端,對于后端不做過多說明。
使用webpack,對js文件進行打包。

About React

React是facebook開發一個用于前段交互的Javascript庫。
剛剛開始使用,有這么幾個特點:
1. 組件化開發。React提倡無狀態的組件,便于重用。
2. VirtualDOM。React的性能比較高,得益于虛擬DOM。它不會每次都去直接操作DOM,因為操作DOM的代價是很大的,所以,它在內存中維護了虛擬DOM,通過計算虛擬DOM和瀏覽器上的DOM的變更進行操作。
3. 專注于View。React不是MVC框架,它只是一個專注于View的庫,所以,它也可以和很多其他框架或者庫一起使用。
4. 提供完成的生命周期。

Message Board

這個留言板小應用,主要有這樣幾個功能:
1.添加留言,一個表單:用戶名和內容
2.列表展示,顯示所有留言
3.簡單的分頁

Code

使用React,就要對應用進行組件的切分,盡量保持組件的無狀態。

App

從宏觀上組織整個應用,切分三個大組件:
1. MessageForm,添加留言表單。
2. MessageList,留言列表
3. Pager,留言的分頁控制
當然,組件還可以繼續劃分。
子組件的數據都會回調到MessageBoard中,在這里統一控制。
MessageBoard.js

var React = require("react");var MessageList = require("./MessageList");var MessageForm = require("./MessageForm");var Pager = require("./Pager");var MessageBoard = React.createClass({ getInitialState : function(){  return {   messages: [],   page:0,   pages:0  } }, submitMessage : function (author, content) {  $.ajax({   type:'post',   url:'/message',   data:{author:author,content:content}  }).done(function (data) {   console.log(data);   this.listMessage(1);  }.bind(this)); }, listMessage : function(page){  console.log("listMessages page:"+page)  $.ajax({   type:'get',   url:'/messages',   data:{page:page}  }).done(function (resp) {   if(resp.status == "success"){    var pager = resp.pager;    console.log(pager);    this.setState({     messages:pager.messages,     page:pager.page,     pages:pager.pages    });   }  }.bind(this)); }, componentDidMount : function(){  this.listMessage(1); }, render : function(){  var pager_props = {   page : this.state.page,   pages : this.state.pages,   listMessage : this.listMessage  };  return(<div>    <MessageForm submitMessage={this.submitMessage}/>    <MessageList messages = {this.state.messages}/>    <Pager {...pager_props}/>   </div>  ) }});module.exports = MessageBoard;

MessageForm

一個簡單的表單,保存留言。用戶提交后,數據會傳給父組件。
MessageForm.js

var React = require("react");var MessageForm = React.createClass({ handleSubmit : function (e) {  e.preventDefault();  var author = this.refs.author.getDOMNode().value.trim();  var content = this.refs.content.getDOMNode().value.trim();  this.props.submitMessage(author,content);  this.refs.author.getDOMNode().value = "";  this.refs.content.getDOMNode().value = "" }, render : function(){  return(    <div className="well">     <h4>Leave a Message:</h4>     <div role="form">      <div className="form-group">       <input ref="author" className="form-control" placeholder="Name"/>       <textarea ref="content" className="form-control" rows="3" placeholder="Leave your message here"></textarea>      </div>      <a className="btn btn-primary" onClick={this.handleSubmit}>Submit</a>     </div>    </div>  ) }});module.exports = MessageForm;

MessageList

留言的列表展示,在寫列表之前,把每條留言寫成一個組件
Message.js

var React = require("react");var Message = React.createClass({ render : function(){  var msg = this.props.message;  return(<div>    <h3>{msg.author}       <small>{msg.time.toLocaleString()}</small>    </h3>    <p>{msg.content}</p>   </div>  ) }});module.exports = Message;

然后,再寫列表.
數據從父組件通過props傳遞進來
MessageList.js

var React = require("react");var Message = require("./Message");var MessageList = React.createClass({ render : function () {  var messages = this.props.messages.map(function(item){   return <Message message={item}/>  });  console.log(messages);  return(   <div>    {messages}   </div>  ) }});module.exports = MessageList;

Pager

這是一個簡單的分頁,會顯示當前頁和總頁數,還有上一頁和下一頁功能。
Pager.js

var React = require("react/addons");var Pager = React.createClass({ getDefaultProps : function(){  return{   page:0,   pages:0  } }, clickHandler: function(e){  e.preventDefault();  console.log(e.target.dataset.page);  console.log(e.target.dataset.page.value);  this.props.listMessage(e.target.dataset.page); }, render : function(){  var cx = React.addons.classSet;  var preClass = cx({   'previous':true,   'disabled':this.props.page == 1  });  var nextClass = cx({   'next':true,   'disabled':this.props.page == this.props.pages  });  return(   <ul className="pager">    <li className={preClass} onClick={this.clickHandler}>     <a href="#" data-page={this.props.page-1}>←Prev</a>    </li>    <li>     <span>{this.props.page}/{this.props.pages}</span>    </li>    <li className={nextClass} onClick={this.clickHandler}>     <a href="#" data-page={this.props.page+1}>Next→</a>    </li>   </ul>  ) }});module.exports = Pager;

Summary

一個簡單的小程序只能簡單的感受一下React,這個庫的思路和當前流行的庫和框架相比,還是比較新穎的,值得學習~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
不卡av电影在线观看| 国产精品三级久久久久久电影| 深夜福利国产精品| 一级做a爰片久久毛片美女图片| 成人免费黄色网| 一区二区在线视频播放| 91wwwcom在线观看| 欧美最猛性xxxxx亚洲精品| 亚洲欧美另类在线观看| 亚洲欧美日韩成人| 成人自拍性视频| 日本一欧美一欧美一亚洲视频| 欧美有码在线视频| 久久精品国产成人精品| 国产精品久久久久av| 综合激情国产一区| 亚洲国产美女精品久久久久∴| 国产精品久久久久久久久久尿| 91在线观看免费网站| 91黄色8090| 欧美性猛交xxxx富婆| 亚洲精品国产精品久久清纯直播| 国产激情综合五月久久| 亚洲男女自偷自拍图片另类| 国产97在线观看| 日韩最新中文字幕电影免费看| 亚洲国产成人精品女人久久久| 日韩av电影手机在线观看| 亚洲精品国产福利| 最近日韩中文字幕中文| 欧美亚洲在线播放| 9.1国产丝袜在线观看| 91精品国产99久久久久久| 成人乱人伦精品视频在线观看| 国外成人在线播放| 91av在线影院| 97久久久免费福利网址| 国产综合久久久久| 亚洲男人的天堂在线播放| 人人做人人澡人人爽欧美| 国语自产精品视频在线看抢先版图片| 亚洲欧美日韩天堂一区二区| 欧美高清第一页| 亚洲**2019国产| 欧美激情综合色综合啪啪五月| 91在线国产电影| 亚洲欧美国产精品久久久久久久| 久久亚洲精品一区| 97人洗澡人人免费公开视频碰碰碰| 97国产精品久久| 18一19gay欧美视频网站| 久久久伊人欧美| 久久九九全国免费精品观看| 国产91对白在线播放| 韩曰欧美视频免费观看| 久久久久久久一区二区三区| 韩国19禁主播vip福利视频| 欧美精品在线观看91| 中文字幕日韩电影| 国产精品视频久| 成人午夜一级二级三级| 精品国产自在精品国产浪潮| www.亚洲天堂| 国产精品永久免费观看| 福利视频一区二区| 国产精品美女999| 热re91久久精品国99热蜜臀| 在线观看国产精品淫| 亚洲三级黄色在线观看| 亚洲国产三级网| 日韩av在线免费观看一区| 97国产精品免费视频| 欧美精品免费看| 日韩av男人的天堂| 国产va免费精品高清在线观看| 国产精品久久久久久久久久尿| 96精品视频在线| 日韩中文字幕网| 国产亚洲欧洲黄色| 成人黄色片在线| 日韩资源在线观看| 国产精品久久久久aaaa九色| 久久99精品国产99久久6尤物| 亚洲精品中文字幕有码专区| 国产成人啪精品视频免费网| 欧美国产日韩视频| 91视频-88av| 欧美日韩中文字幕日韩欧美| 久久香蕉国产线看观看网| 51久久精品夜色国产麻豆| 夜夜嗨av色综合久久久综合网| 日韩av免费观影| 国产精品福利片| 色爱精品视频一区| 色悠久久久久综合先锋影音下载| 久久免费视频观看| 欧美日韩精品在线播放| 98视频在线噜噜噜国产| 日韩中文字幕免费| 久久亚洲欧美日韩精品专区| 在线视频精品一| 欧美最近摘花xxxx摘花| 国产精品夫妻激情| 激情成人在线视频| 欧美xxxx做受欧美.88| 亚洲第一av网| 成年无码av片在线| 日韩少妇与小伙激情| 成人综合国产精品| 97av视频在线| 国产美女精彩久久| 成人天堂噜噜噜| 少妇高潮 亚洲精品| 久久av在线播放| 久久亚洲成人精品| 日韩欧美亚洲一二三区| 久久97精品久久久久久久不卡| 国产成人一区三区| 亚洲欧美中文字幕在线一区| 不卡av电影院| 国产精品视频久| 国产精品999| 亚洲欧美国产一区二区三区| 亚洲第一黄色网| 少妇av一区二区三区| 欧美成人午夜剧场免费观看| 亚洲欧美中文日韩在线v日本| 午夜精品一区二区三区av| 色综合久综合久久综合久鬼88| 91在线看www| 中文字幕欧美国内| 亚洲激情中文字幕| 日韩免费观看高清| 欧美在线视频在线播放完整版免费观看| 成人午夜小视频| 精品国产999| 久久人91精品久久久久久不卡| 55夜色66夜色国产精品视频| 91精品久久久久久久久久入口| 国产精品爽爽ⅴa在线观看| 中文字幕av一区中文字幕天堂| 国产精品专区一| 日韩精品视频在线观看网址| 毛片精品免费在线观看| 日韩视频欧美视频| 亚洲国产精久久久久久久| 国产精品一区二区三区免费视频| 亚洲欧美中文日韩v在线观看| 成人精品视频在线| 国产欧美精品一区二区| 亚洲性生活视频在线观看| 91天堂在线视频| 黑人巨大精品欧美一区二区一视频| 欧美裸体xxxx极品少妇| 91超碰caoporn97人人| 久久中文字幕国产| 亚洲精品国精品久久99热| 欧美色道久久88综合亚洲精品| 亚洲午夜久久久久久久| 精品国产一区二区三区久久狼5月| 亚洲欧美日韩高清| 亚洲精品成人久久| 久久视频国产精品免费视频在线| 亚洲人成电影在线|