Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
integracio_de_django_amb_react [2023/07/06 10:02] raquel_alaman_navas |
integracio_de_django_amb_react [2023/07/06 10:25] (actual) raquel_alaman_navas [Integració de Reactjs (FrontEnd)] |
||
|---|---|---|---|
| Línia 24: | Línia 24: | ||
| * **Account**: | * **Account**: | ||
| - | --> Proposta implementació Customer i Account# | + | --> Proposta |
| <file python models.py> | <file python models.py> | ||
| Línia 125: | Línia 125: | ||
| from rest_framework import serializers | from rest_framework import serializers | ||
| - | # import the todo data model | + | # import the Customer |
| from .models import Customer | from .models import Customer | ||
| Línia 214: | Línia 214: | ||
| <WRAP info> | <WRAP info> | ||
| - | Només funcionarà la sentència anterior amb versions de node.js superiors a la 14.0, així que si et dóna error, caldrà que l' | + | Només funcionarà la sentència anterior amb versions de node.js superiors a la 14.0, així que si et dóna error, caldrà que l' |
| </ | </ | ||
| Línia 227: | Línia 227: | ||
| </ | </ | ||
| - | Si és així, et sortirà una pantalla similar a aquesta: | + | Si és així, et sortirà una pantalla similar a aquesta |
| + | {{ :: | ||
| 4. Obre el fitxer //App.js// a la carpeta del frontend. Elimina el codi existent i substitueix-lo pel codi següent: | 4. Obre el fitxer //App.js// a la carpeta del frontend. Elimina el codi existent i substitueix-lo pel codi següent: | ||
| Línia 315: | Línia 316: | ||
| > | > | ||
| <span | <span | ||
| - | className={`todo-title mr-2 ${ | + | className={`customer-title mr-2 ${ |
| - | this.state.viewCompleted ? " | + | this.state.viewCompleted ? " |
| }`} | }`} | ||
| title={item.description} | title={item.description} | ||
| Línia 411: | Línia 412: | ||
| export default App; | export default App; | ||
| </ | </ | ||
| + | |||
| + | 6. Obre el fitxer // | ||
| + | |||
| + | <file css Index.css> | ||
| + | .customer-title { | ||
| + | cursor: pointer; | ||
| + | } | ||
| + | .completed-customer { | ||
| + | text-decoration: | ||
| + | } | ||
| + | .customer-list > span { | ||
| + | padding: 5px 8px; | ||
| + | border: 1px solid rgb(7, 167, 68); | ||
| + | border-radius: | ||
| + | margin-right: | ||
| + | cursor: pointer; | ||
| + | } | ||
| + | .customer-list > span.active { | ||
| + | background-color: | ||
| + | color: #fff; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 7. Crea una carpeta nova anomenada " | ||
| + | <file javascript Modal.js> | ||
| + | import React, { Component } from " | ||
| + | |||
| + | // importing all of these classes from reactstrap module | ||
| + | import { | ||
| + | Button, | ||
| + | Modal, | ||
| + | ModalHeader, | ||
| + | ModalBody, | ||
| + | ModalFooter, | ||
| + | Form, | ||
| + | FormGroup, | ||
| + | Input, | ||
| + | Label | ||
| + | } from " | ||
| + | |||
| + | class CustomModal extends Component { | ||
| + | constructor(props) { | ||
| + | super(props); | ||
| + | this.state = { | ||
| + | activeItem: this.props.activeItem | ||
| + | }; | ||
| + | } | ||
| + | // changes handler to check if a checkbox is checked or not | ||
| + | handleChange = e => { | ||
| + | let { name, value } = e.target; | ||
| + | if (e.target.type === " | ||
| + | value = e.target.checked; | ||
| + | } | ||
| + | const activeItem = { ...this.state.activeItem, | ||
| + | this.setState({ activeItem }); | ||
| + | }; | ||
| + | |||
| + | // rendering modal in the custommodal class received toggle and on save as props, | ||
| + | render() { | ||
| + | const { toggle, onSave } = this.props; | ||
| + | return ( | ||
| + | <Modal isOpen={true} toggle={toggle}> | ||
| + | < | ||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | {/* 3 formgroups | ||
| + | 1 title label */} | ||
| + | < | ||
| + | <Label for=" | ||
| + | <Input | ||
| + | type=" | ||
| + | name=" | ||
| + | value={this.state.activeItem.title} | ||
| + | onChange={this.handleChange} | ||
| + | placeholder=" | ||
| + | /> | ||
| + | </ | ||
| + | |||
| + | {/* 2 description label */} | ||
| + | < | ||
| + | <Label for=" | ||
| + | <Input | ||
| + | type=" | ||
| + | name=" | ||
| + | value={this.state.activeItem.description} | ||
| + | onChange={this.handleChange} | ||
| + | placeholder=" | ||
| + | /> | ||
| + | </ | ||
| + | |||
| + | {/* 3 completed label */} | ||
| + | < | ||
| + | <Label for=" | ||
| + | <Input | ||
| + | type=" | ||
| + | name=" | ||
| + | checked={this.state.activeItem.completed} | ||
| + | onChange={this.handleChange} | ||
| + | /> | ||
| + | Completed | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | {/* create a modal footer */} | ||
| + | < | ||
| + | <Button color=" | ||
| + | Save | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | ); | ||
| + | } | ||
| + | } | ||
| + | export default CustomModal | ||
| + | </ | ||
| + | 8. Fes els canvis indicats a continuació al fitxer // | ||
| + | <file javascript index.js> | ||
| + | import React from " | ||
| + | import ReactDOM from " | ||
| + | import " | ||
| + | import App from " | ||
| + | |||
| + | import " | ||
| + | |||
| + | ReactDOM.render( | ||
| + | < | ||
| + | <App /> | ||
| + | </ | ||
| + | document.getElementById(" | ||
| + | ); | ||
| + | </ | ||
| + | 9. Per fer les peticions als endpoints de l'API al servidor del framework de Django, necessitarem instal·lar l' | ||
| + | < | ||
| + | npm install axios | ||
| + | </ | ||
| + | |||
| + | I, amb aquest pas, ja tenim una aplicació Fullstack Django-React utilitzant el framework REST Django per establir la comunicació entre el frontend i el backend. | ||
| + | |||
| + | <WRAP todo> | ||
| + | **Exercici: | ||
| + | Aplica la serialització de manera que es puguin gestionar els comptes associats als clients. | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||