原创|使用教程|编辑:status|2020-02-11 14:31:21.687|阅读 540 次
概述:在本教程中,我们将使用React和Django构建一个CRUD应用程序用来做图书管理。CRUD代表创建,读取,更新和删除,因此这个程序就是一个小型图书管理系统。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
万事开头难,特别是写程序开头更难!那么怎么在Myeclipse或者带CodeMix的Eclipse使用React和Django构建一个CRUD应用程序用来做图书管理呢?今天我们将用3个步骤和实际代码为您演示!
应用程序的用户界面将使用React构建(学习本篇只需要有前端知识即可),而后端将使用Django构建(这是一个高级Python Web框架,鼓励快速开发和简洁实用的设计)。使用Django Rest框架可以轻松地在Django中构建API。
我们将分三个阶段构建应用程序:
1.在React中创建前端
2.在Django中创建API
3.将前端与API连接
一、准备工作
推荐使用Myeclipse+CodeMix或者其他Eclipse+CodeMix开发工具,如果你还没有安装,您可以点击这里。
如果尚未安装React pack,请使用CodeMix扩展浏览器(帮助> CodeMix扩展)安装它。也可以直接从Eclipse市场上安装它。
另外,我们需要在系统中安装Python,因此请确保正确安装了Python。。
二、在React中创建前端
我们将使用CodeMix向导创建React应用程序。
新的CodeMix创建的react应用程序的文件夹结构如图
如果你和上图一样发现目录中没有node_modules文件夹,我们需要安装节点软件包。使用Terminal +,运行:npm install
另外我们将使用bootstrap和fontawesome进行一些其他样式设置和某些图标,上述资源内容添加到src / index.js中的部分。
React是一个组件驱动的库。因此,我们需要将我们的应用分为不同的组件来实现下方界面:
该页面可以分为不同的组件:
以上组件中可以处理所有4个CRUD (创建读取更新删除)操作。接下来我们开始用代码还原这个过程!
我们将从父组件开始按层次创建组件。要创建的第一个组件是Book Dashboard组件。修改src / index.js 使其类似于:
class BookDashboard extends React.Component { state = { books: [ { id: 1, title: 'A simple book', author: 'Jude Ben', description: `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud` }, { id: 2, title: 'A book of secrets', author: 'James John', description: `Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.` } ] } createNewBook = (book) => { book.id = Math.floor(Math.random() * 1000); this.setState({books: this.state.books.concat([book])}); } updateBook = (newBook) => { const newBooks = this.state.books.map(book => { if(book.id === newBook.id) { return Object.assign({}, newBook) } else { return book; } }); this.setState({books: newBooks}); } deleteBook = (bookId) => { this.setState({books: this.state.books.filter(book => book.id !== bookId)}) } render() { return (如上所示,BookDashboard组件保存了书籍数据。然后将书籍数据传递给BookList组件,以及一些处理书籍删除和更新的功能。<main className="d-flex justify-content-center my-4"> <div className="col-5"><BookList books={this.state.books}onDeleteClick={this.deleteBook}onUpdateClick={this.updateBook} /><ToggleableBookForm onBookCreate={this.createNewBook} /></div> </main>) } }
class BookList extends React.Component { render() { const books = this.props.books.map(book => (该书目组件接收书籍数据,映射在其上,并返回的数组EditableBook然后在组件上展示。EditableBook是一个组件,如果用户单击Book组件上的edit book按钮,则该组件将呈现Book或BookForm。这个组件可以展示书籍信息,它还接收一些处理单击编辑按钮和删除按钮的功能。让我们创建Book和BookForm组件。<EditableBook key={book.id} id={book.id}title={book.title}author={book.author}description={book.description}onDeleteClick={this.props.onDeleteClick}onUpdateClick={this.props.onUpdateClick} ></EditableBook>)); return (); } } class EditableBook extends React.Component { state = { inEditMode: false }; enterEditMode = () => { this.setState({inEditMode: true}); } leaveEditMode = () => { this.setState({inEditMode: false}); } handleDelete = () => { this.props.onDeleteClick(this.props.id); } handleUpdate = (book) => { this.leaveEditMode() book.id = this.props.id; this.props.onUpdateClick(book); } render() { const component = () => { if(this.state.inEditMode) { return (<div> {books} </div><BookForm id={this.props.id}title={this.props.title}author={this.props.author}description={this.props.description}onCancelClick={this.leaveEditMode}onFormSubmit={this.handleUpdate} />); } return (<Book title={this.props.title}author={this.props.author}description={this.props.description}onEditClick={this.enterEditMode} onDeleteClick={this.handleDelete} />) } return (<div className="mb-3 p-4" style={{boxShadow: '0 0 10px #ccc'}} > {component()} </div>) } }
class Book extends React.Component { render() { return (Book组件仅呈现用于显示书籍的标记,它需要的所有数据以及用于编辑和删除操作的处理程序都从父组件EditableBook中获得。<div className="card" /* style="width: 18rem;" */><div className="card-header d-flex justify-content-between"><span> <strong>Title: </strong>{this.props.title} </span><div><span onClick={this.props.onEditClick} className="mr-2"><i className="far fa-edit"></i></span><span onClick={this.props.onDeleteClick}><i className="fas fa-trash"></i></span></div></div><div className="card-body"> {this.props.description} </div><div className="card-footer"> <strong>Author:</strong> {this.props.author} </div> </div>); } } class BookForm extends React.Component { state = { title: this.props.title || '', author: this.props.author || '', description: this.props.description || '' } handleFormSubmit = (evt) => { evt.preventDefault(); this.props.onFormSubmit({...this.state}); } handleTitleUpdate = (evt) => { this.setState({title: evt.target.value}); } handleAuthorUpdate = (evt) => { this.setState({author: evt.target.value}); } handleDescriptionUpdate = (evt) => { this.setState({description: evt.target.value}); } render() { const buttonText = this.props.id ? 'Update Book': 'Create Book'; return (<form onSubmit={this.handleFormSubmit}><div className="form-group"><label> Title </label> <input type="text" placeholder="Enter a title" value={this.state.title} onChange={this.handleTitleUpdate} className="form-control" /></div><div className="form-group"> <label> Author </label> <input type="text" placeholder="Author's name" value={this.state.author} onChange={this.handleAuthorUpdate} className="form-control" /> </div><div className="form-group"> <label> Description </label><textarea className="form-control" placeholder="Book Description" rows="5" value={this.state.description} onChange={this.handleDescriptionUpdate} > {this.state.description} </textarea> </div><div className="form-group d-flex justify-content-between"><button type="submit" className="btn btn-md btn-primary"> {buttonText} </button><button type="button" className="btn btn-md btn-secondary" onClick={this.props.onCancelClick}> Cancel </button></div></form>) } }
// index.js class ToggleableBookForm extends React.Component { state = { inCreateMode: false } handleCreateClick = () => { this.setState({inCreateMode: true}); } leaveCreateMode = () => { this.setState({inCreateMode: false}); } handleCancleClick = () => { this.leaveCreateMode(); } handleFormSubmit = (book) => { this.leaveCreateMode(); this.props.onBookCreate(book); } render() { if (this.state.inCreateMode) { return (如前所述,ToggleableBookForm呈现了一个按钮,用户单击该按钮可以创建一本书。单击按钮后,将呈现BookForm组件。<div className="mb-3 p-4" style={{boxShadow: '0 0 10px #ccc'}} ><BookForm onFormSubmit={this.handleFormSubmit} onCancelClick={this.handleCancleClick}></BookForm></div>) } return (<button onClick={this.handleCreateClick} className="btn btn-secondary"> <i className="fas fa-plus"></i> </button>); } }
// index.js ReactDOM.render(, document.getElementById('root'));重新加载浏览器后,图书应用程序前端应能正常运行。
如何在myeclipse中用React和Django创建一个CRUD应用程序(后端篇)
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自: