mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Merge pull request #232 from SchrodingersGat/docs
Added a bunch of developer documentation
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								docs/_static/img/api_doc.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/_static/img/api_doc.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 73 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/img/api_http.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/_static/img/api_http.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 47 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/img/modal_form.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/_static/img/modal_form.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 65 KiB | 
							
								
								
									
										12
									
								
								docs/backup.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								docs/backup.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | Backup and Restore | ||||||
|  | ================== | ||||||
|  |  | ||||||
|  | .. toctree:: | ||||||
|  |    :titlesonly: | ||||||
|  |    :maxdepth: 2 | ||||||
|  |    :caption: Backup | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|  | InvenTree provides database backup and restore functionality through the `django-dbbackup <https://github.com/django-dbbackup/django-dbbackup>`_ extension. | ||||||
|  |  | ||||||
|  | This extension allows databas models and uploaded media files to be backed up (and restored) via the command line. | ||||||
							
								
								
									
										57
									
								
								docs/forms.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								docs/forms.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | InvenTree Modal Forms | ||||||
|  | ===================== | ||||||
|  |  | ||||||
|  | .. toctree:: | ||||||
|  |    :titlesonly: | ||||||
|  |    :maxdepth: 1 | ||||||
|  |    :caption: Modal Forms | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|  |  | ||||||
|  | The InvenTree web interface uses modal forms for user input. InvenTree defines a wrapper layer around the Django form classes to provide a mechanism for retrieving and rendering forms via jQuery and AJAX. | ||||||
|  |  | ||||||
|  | .. image:: _static/img/modal_form.png | ||||||
|  |  | ||||||
|  | Forms are rendered to a Bootstrap modal window, allowing in-page data input and live page updating. | ||||||
|  |  | ||||||
|  | Crispy Forms | ||||||
|  | ------------ | ||||||
|  |  | ||||||
|  | Django provides native form rendering tools which are very powerful, allowing form rendering, input validation, and display of error messages for each field. | ||||||
|  |  | ||||||
|  | InvenTree makes use of the `django-crispy-forms <https://github.com/django-crispy-forms/django-crispy-forms>`_ extension to reduce the amount of boilerplate required to convert a Django model to a HTML form. | ||||||
|  |  | ||||||
|  | Form Rendering | ||||||
|  | -------------- | ||||||
|  |  | ||||||
|  | The InvenTree front-end web interface is implemented using jQuery and Bootstrap. Forms are rendered using Django `class-based forms <https://docs.djangoproject.com/en/2.2/topics/class-based-views/generic-editing/>`_ using standard Django methods.  | ||||||
|  |  | ||||||
|  | The main point of difference is that instead of rendering a HTTP response (and displaying a static form page) form data are requested via AJAX, and the form contents are injected into the modal window. | ||||||
|  |  | ||||||
|  | A set of javascript/jQuery functions handle the client/server interactions, and manage GET and POST requests. | ||||||
|  |  | ||||||
|  | Sequence of Events | ||||||
|  | ------------------ | ||||||
|  |  | ||||||
|  | #. User presses a button or other element which initiates form loading | ||||||
|  | #. jQuery function sends AJAX GET request to InvenTree server, requesting form at a specified URL | ||||||
|  | #. Django renders form (according to specific model/view rules) | ||||||
|  | #. Django returns rendered form as a JSON object | ||||||
|  | #. Client displays the modal window and injects the form contents into the modal | ||||||
|  | #. User fills in form data, presses the 'Submit' button | ||||||
|  | #. Client sends the completed form to server via POST | ||||||
|  | #. Django backend handles POST request, specifically determines if the form is valid | ||||||
|  | #. Return a JSON object containing status of form validity | ||||||
|  |   * If the form is valid, return (at minimum) {form_valid: true}. Client will close the modal. | ||||||
|  |   * If the form is invalid, re-render the form and send back to the client. Process repeats | ||||||
|  |  | ||||||
|  | At the end of this process (i.e. after successful processing of the form) the client closes the modal and runs any optional post-processes (depending on the implementation). | ||||||
|  |  | ||||||
|  | Further Reading | ||||||
|  | --------------- | ||||||
|  |  | ||||||
|  | For a better understanding of the modal form architecture, refer to the relevant source files: | ||||||
|  |  | ||||||
|  | **Server Side:** Refer to ``./InvenTree/InvenTree/views.py`` for AJAXified Django Views | ||||||
|  |  | ||||||
|  | **Client Side:** Refer to ``./InvenTree/static/script/inventree/modals.js`` for client-side javascript | ||||||
| @@ -1,12 +1,39 @@ | |||||||
| InvenTree's Django Documentation | InvenTree Source Documentation | ||||||
| ================================ | ================================ | ||||||
|  |  | ||||||
| This documentation is auto-generated from the `InvenTree codebase <https://github.com/InvenTree/InvenTree>`_ |  | ||||||
|  |  | ||||||
| .. toctree:: | .. toctree:: | ||||||
|    :titlesonly: |    :titlesonly: | ||||||
|    :maxdepth: 2 |    :maxdepth: 2 | ||||||
|    :caption: Contents: |    :caption: Index | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|    InvenTree Modules <introduction> |    Getting Started<start> | ||||||
|    API Reference<reference> |    Modal Forms<forms> | ||||||
|  |    Tables<tables> | ||||||
|  |    REST API<rest> | ||||||
|  |    Backup and Restore<backup> | ||||||
|  |    InvenTree Modules <modules> | ||||||
|  |    Module Reference<reference> | ||||||
|  |  | ||||||
|  | The documentation found here is provided to be useful for developers working on the InvenTree codebase. User documentation can be found on the `InvenTree website <https://inventree.github.io>`_. | ||||||
|  |  | ||||||
|  | Documentation for the Python modules is auto-generated from the `InvenTree codebase <https://github.com/InvenTree/InvenTree>`_. | ||||||
|  |  | ||||||
|  | Code Structure | ||||||
|  | -------------- | ||||||
|  |  | ||||||
|  | **Backend** | ||||||
|  |  | ||||||
|  | InvenTree is developed using the `django web framework <https://www.djangoproject.com/>`_, a powerful toolkit for making web applications in Python. | ||||||
|  |  | ||||||
|  | The database management code and business logic is written in Python 3. Core functionality is separated into individual modules (or *apps* using the django nomenclature). | ||||||
|  |  | ||||||
|  | Each *app* is located in a separate directory under InvenTree. Each *app* contains python modules named according to the standard django configuration. | ||||||
|  |  | ||||||
|  | **Frontend** | ||||||
|  |  | ||||||
|  | The web frontend rendered using a mixture of technologies. | ||||||
|  |  | ||||||
|  | Base HTML code is rendered using the `django templating language <https://docs.djangoproject.com/en/2.2/topics/templates/>`_ which provides low-level access to the underlying database models. | ||||||
|  |  | ||||||
|  | jQuery is also used to implement front-end logic, and desponse to user input. A REST API is provided to facilitate client-server communication. | ||||||
| @@ -1,28 +0,0 @@ | |||||||
| InvenTree |  | ||||||
| ========= |  | ||||||
|  |  | ||||||
| InvenTree is an open source inventory management system which provides powerful low-level part management and stock tracking functionality. |  | ||||||
|  |  | ||||||
| The core of the InvenTree software is a Python/Django database backend whi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| **Django Apps** |  | ||||||
|  |  | ||||||
| The InvenTree Django ecosystem provides the following 'apps' for core functionality: |  | ||||||
|  |  | ||||||
| .. toctree:: |  | ||||||
|    :titlesonly: |  | ||||||
|    :maxdepth: 1 |  | ||||||
|    :caption: App Modules: |  | ||||||
|  |  | ||||||
|    docs/InvenTree/index |  | ||||||
|    docs/build/index |  | ||||||
|    docs/company/index |  | ||||||
|    docs/part/index |  | ||||||
|    docs/stock/index |  | ||||||
|     |  | ||||||
| * `InvenTree </docs/InvenTree/index.html>`_ - High level management functions |  | ||||||
| * `Build </docs/build/index.html>`_ - Part build projects |  | ||||||
| * `Company </docs/company/index.html>`_ - Company management (suppliers / customers) |  | ||||||
| * `Part </docs/part/index.html>`_ - Part management |  | ||||||
| * `Stock </docs/stock/index.html>`_ - Stock management  |  | ||||||
							
								
								
									
										22
									
								
								docs/modules.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								docs/modules.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | InvenTree Modules | ||||||
|  | ================= | ||||||
|  |  | ||||||
|  | .. toctree:: | ||||||
|  |    :titlesonly: | ||||||
|  |    :maxdepth: 2 | ||||||
|  |    :caption: App Modules | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|  |    docs/InvenTree/index | ||||||
|  |    docs/build/index | ||||||
|  |    docs/company/index | ||||||
|  |    docs/part/index | ||||||
|  |    docs/stock/index | ||||||
|  |  | ||||||
|  | The InvenTree Django ecosystem provides the following 'apps' for core functionality: | ||||||
|  |     | ||||||
|  | * `InvenTree <docs/InvenTree/index.html>`_ - High level management functions | ||||||
|  | * `Build <docs/build/index.html>`_ - Part build projects | ||||||
|  | * `Company <docs/company/index.html>`_ - Company management (suppliers / customers) | ||||||
|  | * `Part <docs/part/index.html>`_ - Part management | ||||||
|  | * `Stock <docs/stock/index.html>`_ - Stock management  | ||||||
| @@ -1,6 +1,13 @@ | |||||||
| API Reference Index | Module Reference | ||||||
| =================== | =================== | ||||||
|  |  | ||||||
|  | .. toctree:: | ||||||
|  |    :titlesonly: | ||||||
|  |    :maxdepth: 1 | ||||||
|  |    :caption: Module Reference | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|  |  | ||||||
| The complete reference indexes are found below: | The complete reference indexes are found below: | ||||||
|  |  | ||||||
| * :ref:`modindex` | * :ref:`modindex` | ||||||
|   | |||||||
							
								
								
									
										37
									
								
								docs/rest.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								docs/rest.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | REST API | ||||||
|  | ======== | ||||||
|  |  | ||||||
|  | .. toctree:: | ||||||
|  |    :titlesonly: | ||||||
|  |    :maxdepth: 2 | ||||||
|  |    :caption: REST API | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|  | InvenTree provides a REST API which serves data to the web client and also provides data access to third-party applications. The REST API is implemented using the `Django REST framework (DRF) <https://www.django-rest-framework.org/>`_ which provides the following features out of the box: | ||||||
|  |  | ||||||
|  | * AJAX REST API | ||||||
|  | * Web-browseable REST | ||||||
|  | * User authentication  | ||||||
|  | * Database model serialization and validation | ||||||
|  |  | ||||||
|  | API Access | ||||||
|  | ---------- | ||||||
|  |  | ||||||
|  | The API is accessible from the root URL ``/api/``. It requires user authentication. | ||||||
|  |  | ||||||
|  | * Requesting data via AJAX query will return regular JSON objects.  | ||||||
|  | * Directing a browser to the API endpoints provides a web-browsable interface | ||||||
|  |  | ||||||
|  | .. image:: _static/img/api_http.png | ||||||
|  |  | ||||||
|  | API Documentation | ||||||
|  | ----------------- | ||||||
|  |  | ||||||
|  | API documentation is provided by DRF autodoc tools, and is available for browsing at ``/api-doc/`` | ||||||
|  |  | ||||||
|  | .. image:: _static/img/api_doc.png | ||||||
|  |  | ||||||
|  | API Code | ||||||
|  | -------- | ||||||
|  |  | ||||||
|  | Javascript/jQuery code for interacting with the server via the REST API can be found under ``InvenTree/static/script/InvenTree``. | ||||||
							
								
								
									
										51
									
								
								docs/start.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								docs/start.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | Getting Started Guide | ||||||
|  | ===================== | ||||||
|  |  | ||||||
|  | .. toctree:: | ||||||
|  |    :titlesonly: | ||||||
|  |    :maxdepth: 2 | ||||||
|  |    :caption: Getting Started | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|  | To install a complete development environment for InvenTree, follow the steps presented below. | ||||||
|  |  | ||||||
|  | A makefile in the root directory provides shortcuts for the installation process, and can also be very useful during development. | ||||||
|  |  | ||||||
|  | Installation | ||||||
|  | ------------ | ||||||
|  |  | ||||||
|  | All packages required to develop and test InvenTree can be installed via pip package manager. Package requirements can be found in ``requirements.txt``. | ||||||
|  |  | ||||||
|  | To setup the InvenTree environment, run the command | ||||||
|  |  | ||||||
|  | ``make install`` | ||||||
|  |  | ||||||
|  | which performs the following actions: | ||||||
|  |  | ||||||
|  | * Installs all required Python packages using pip package manager | ||||||
|  | * Generates a SECREY_KEY file required for the django authentication framework | ||||||
|  |  | ||||||
|  | Superuser Account | ||||||
|  | ----------------- | ||||||
|  |  | ||||||
|  | Run ``make supeuser`` to create a superuser account, required for initial system login. | ||||||
|  |  | ||||||
|  | Run Development Server | ||||||
|  | ---------------------- | ||||||
|  |  | ||||||
|  | Run ``python InvenTree/manage.py runserver`` to launch a development server. This will launch the InvenTree web interface at ``127.0.0.1:8000``. For other options refer to the `django docs <https://docs.djangoproject.com/en/2.2/ref/django-admin/>`_. | ||||||
|  |  | ||||||
|  | Database Migrations | ||||||
|  | ------------------- | ||||||
|  |  | ||||||
|  | Whenever a change is made to the underlying database schema, database migrations must be performed. Call ``make migrate`` to run any outstanding database migrations. | ||||||
|  |  | ||||||
|  | Development and Testing | ||||||
|  | ----------------------- | ||||||
|  |  | ||||||
|  | Other shorthand functions are provided for the development and testing process: | ||||||
|  |  | ||||||
|  | * ``make test`` - Run all unit tests | ||||||
|  | * ``make coverage`` - Run all unit tests and generate code coverage report | ||||||
|  | * ``make style`` - Check Python codebase against PEP coding standards (using Flake) | ||||||
|  | * ``make documentation`` - Generate this documentation | ||||||
							
								
								
									
										14
									
								
								docs/tables.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/tables.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | Table Management | ||||||
|  | ================ | ||||||
|  |  | ||||||
|  | .. toctree:: | ||||||
|  |    :titlesonly: | ||||||
|  |    :maxdepth: 2 | ||||||
|  |    :caption: Tables | ||||||
|  |    :hidden: | ||||||
|  |  | ||||||
|  | InvenTree uses `Bootstrap Table <https://bootstrap-table.com/>`_ to manage tabulated data in the web front-end. The ability to tabulate data from read via an AJAX request allows tables to be updated on-the-fly (without a full page reload). | ||||||
|  |  | ||||||
|  | Bootstrap Table also provides integrated tools for table searching, filtering, and advanced rendering. | ||||||
|  |  | ||||||
|  | Frontend code for table functionality can be found at ``InvenTree/static/script/inventree/tables.js``. | ||||||
		Reference in New Issue
	
	Block a user