激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 用ReactJS和Python的Flask框架編寫留言板的代碼示例

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

2020-08-04 11:34defshine Python

這篇文章主要介紹了用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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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;<br>

MessageList

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var React = require("react");
 
var Message = React.createClass({
 render : function(){
  var msg = this.props.message;
  return(
 
 
<div>
    <h3>{msg.author}&nbsp;&nbsp;
     <small>{msg.time.toLocaleString()}</small>
    </h3>
    <p>{msg.content}</p>
   </div>
 
 
  )
 }
});
 
module.exports = Message;

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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}>&larr;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&rarr;</a>
    </li>
   </ul>
  )
 }
});
 
module.exports = Pager;

Summary

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费看成人av | 欧美性色生活片免费播放 | 久久伊人国产精品 | 成人精品久久久 | 美女视频黄a视频免费全过程 | 国产日产精品一区二区三区四区 | 13一14毛片免费看 | 欧美顶级毛片在线播放小说 | 免费一级欧美大片视频 | 九九色精品 | 国内精品伊人久久久久网站 | 红杏网站永久免费视频入口 | 午夜久久视频 | 中国av免费在线观看 | 国产一级aaa全黄毛片 | 久草在线视频免费播放 | 国产精品剧情一区二区在线观看 | 法国极品成人h版 | 成人福利软件 | 草久影院 | 国产精品一区二区三区在线 | 黄色大片网站在线观看 | 黄色av一区二区三区 | 欧美日韩中文字幕在线 | 亚洲国产视频网 | 毛片免费网 | 欧美成人精品一级 | 亚洲骚综合 | 久久精品久久久久 | 黄色网址免费在线播放 | 久久凹凸 | 日本特级a一片免费观看 | 天使萌一区二区三区免费观看 | japanese末成年free | 国产中文99视频在线观看 | 国产精品久久久久久久久久久久久久久久 | 久久精品一区视频 | 欧美性受xxxx白人性爽 | 91精品国产91久久久久久不卞 | 一本色道精品久久一区二区三区 | 国产一级毛片国产 |