Simple XML-RPC and JSON-RPC server for modern Django

Overview

django-modern-rpc

Downloads Tests Documentation Status Link to demo

Build an XML-RPC and/or JSON-RPC server as part of your Django project. Major Django and Python versions are supported

Main features

  • XML-RPC and JSON-RPC 2.0 support (JSON-RPC 1.0 is NOT supported)
  • HTTP Basic Auth & custom authentication methods
  • Multiple entry-points: group your RPC methods under different paths to apply specific rules, authentication, protocol support, etc.
  • API docs generation (based on docstring)

Requirements

The following Django / Python version are supported, according to Django requirements (see here and here)

πŸ — Django \ Python πŸ – 3.5 3.6 3.7 3.8 3.9
2.1 🟩 🟩 🟩 πŸŸ₯ πŸŸ₯
2.2 🟩 🟩 🟩 🟩 🟩
3.0 πŸŸ₯ 🟩 🟩 🟩 🟩
3.1 πŸŸ₯ 🟩 🟩 🟩 🟩
3.2 πŸŸ₯ 🟩 🟩 🟩 🟩
4.0 πŸŸ₯ πŸŸ₯ πŸŸ₯ 🟩 🟩

Setup

A quick start is available as part of the documentation to help setting up you project: https://django-modern-rpc.readthedocs.io/en/latest/quickstart.html

Code quality

Continuous integration and code analysis is performed automatically to ensure a decent code quality. Project health is publicly available on following apps:

Codacy Badge Codacy Badge Coverage Status

Comments
  • Application import symantics hide errors

    Application import symantics hide errors

    If there is an import error in rpc_methods.py (or whatever it's called in a given instance) then the current import semantics in modernrpc/apps.py mean the error is ignored. Even worse, it fails to pick up any logger so the actual error just creates the text: No handlers could be found for logger "modernrpc.apps" in the django log. It should at least say something like. Perhaps there should be a wrapper round getLogger in case the logging is not configured for such an important non-runtime error.

     except ImportError as er:
                        logger.warning('Unable to load module "{}". Please check MODERNRPC_METHODS_MODULES for invalid'
                                       ' names'.format(module_name))
                        print "Error:", module_name, er
                        continue
    

    to repeat: create and register an rpc_methods.py with the like "import no_such_module" at the top.

    enhancement 
    opened by J-A-M 10
  • No way to catch exception

    No way to catch exception

    Accroding to https://github.com/alorence/django-modern-rpc/blob/master/modernrpc/views.py#L97 and https://github.com/alorence/django-modern-rpc/blob/master/modernrpc/handlers/jsonhandler.py#L176

    Looks like there is no way to raise Exception to top level. So there is no way to log it with django logging module or sentry for instance. In settings.DEBUG=True mode exception must be raised and NOT 'swallowed' or 'silented' by inner try/exception block and returned as normal response output

    enhancement needmoreinfo 
    opened by sergio-bershadsky 6
  • Changes around Django 3

    Changes around Django 3

    @alorence let me know if the changes look good.

    If possible would you make a small release to pick up these changes? We'd like to upgrade to Django 3 as soon as possible (or at least resolve this issue and continue patching other libraries if necessary).

    opened by atodorov 4
  • set_authentication_predicate bug

    set_authentication_predicate bug

    If a user wants to use set_authentication_predicate as decorator, as explained in the tutorial:

    https://django-modern-rpc.readthedocs.io/en/latest/advanced/authentication.html#basics

    then that function should be like this:

    def set_authentication_predicate(predicate, params=None):
        """
        Assign a new authentication predicate to an RPC method.
        This is the most generic decorator used to implement authentication.
        Predicate is a standard function with the following signature:
        .. code:: python
           def my_predicate(request, *params):
               # Inspect request and extract required information
               if <condition>:
                   # The condition to execute the method are met
                   return True
               return False
        :param predicate:
        :param params:
        :return:
        """
        
        def decorator(rpc_method):
            if hasattr(rpc_method, 'modernrpc_auth_predicates'):
                rpc_method.modernrpc_auth_predicates.append(predicate)
                rpc_method.modernrpc_auth_predicates_params.append(params)
    
            else:
                rpc_method.modernrpc_auth_predicates = [predicate]
                rpc_method.modernrpc_auth_predicates_params = [params]
    
            return rpc_method
    
        return  decorator
    
    bug 
    opened by aplicacionamedida 4
  • Convert single newlines into a space in HTML docs.

    Convert single newlines into a space in HTML docs.

    CHANGE SUMMARY

    A single new in a docstring would be converted into a (broken) <br/ string, causing the line to be ignored by some browsers until the next tag. Because a single new line is often used to continue a paragraph without exceeding Python's 72 character docstring length convention, we now convert single newlines into spaces, which allows a paragraph to be formatted to the width of the browser window in plain RPC method documentation.

    SCREENSHOTS

    Given the following docstring:

    image

    In Chrome, the previous HTML rendered as follows:

    image

    After this change, it renders as:

    image

    opened by adamdonahue 4
  • DeprecationWarning somewhere hidden

    DeprecationWarning somewhere hidden

    Hi, I am using your app (love it) for a week or so, however I would really like to get rid of the following message I get as soon as I add the app to my INSTALLED_APPS list:

    DeprecationWarning: __class__ not set defining 'AbstractBaseUser' as <class 'django.contrib.auth.base_user.AbstractBaseUser'>. Was __classcell__ propagated to type.__new__?
      class AbstractBaseUser(models.Model):
    

    I have tried to seek for myself where it's coming from but I cannot seem to find it.

    My requirements.txt:

    appdirs==1.4.0
    Django==1.10.5
    django-modern-rpc==0.4.2
    mysqlclient==1.3.9
    packaging==16.8
    pyparsing==2.1.10
    six==1.10.0
    

    Do you know where it's coming from and how it can be fixed?

    Thanks!

    invalid 
    opened by pvanagtmaal 4
  • XML-RPC: Response to request with pk [xyz] has content type application/json but was unable to parse it

    XML-RPC: Response to request with pk [xyz] has content type application/json but was unable to parse it

    I upgraded to the latest alpha in order to try out my app with Python 3.11, and got this error. It looks like response is being returned with content-type: "application/json" even for xml-rpc endpoints.

    opened by sean-wallace 3
  • Silent warning on load

    Silent warning on load

    I got this

    Warning: Unable to load module "api.rpc_methods" declared in settings.MODERNRPC_METHODS_MODULES. Please ensure it is available and doesn't contain any error

    and no trace with logger configured to handle modernrpc.

    I believe this should be critical error with trace back and exit, as it would be with bug in Django view. Or even better, such exceptions should not be handled by Django-modern-rpc at all. This is not runtime exception like while calling rpc - where it is ok to intercept exception and return error in json-rpm response. This is start up error, so while developing app I have to immediately know where the bug is.

    opened by luzik 3
  • django-modern-rpc not compatible with Django 3.1 (alpha)

    django-modern-rpc not compatible with Django 3.1 (alpha)

    core.py imports trim_docstring which has been removed from Django in https://github.com/django/django/commit/f47ba7e78033f39742c3bf491e9b15365cefd0db#diff-618578d61e31fcaf38482c8853e9c5f5

    opened by washeck 3
  • Expose models via RPC?

    Expose models via RPC?

    Hi folks, I have a decent size project at https://github.com/kiwitcms/Kiwi which does have a custom grown XML-RPC interface (legacy code) pretty much all of which exposes the available models and variations of the filter/get/create and update methods. The underlying methods boil down to performing a query, iterating over it and serializing every object as a dictionary. Then there's a Python API client which duplicates most of this structure in order to read the serialized data and turn it back into something more Pythonic.

    How hard would be to expose models over RPC with modernrpc ? If that is doable I'd rather spend my time contributing a PR to you and dropping all the legacy stuff in Kiwi instead of manually going through each of our exposed RPC methods and figuring out of there are duplicates or not.

    question 
    opened by atodorov 3
  • JSON-RPC batch requests not supported

    JSON-RPC batch requests not supported

    Sending batch requests causes "Invalid request, Payload object must be a struct" error.

    Batch requests feature is part of 2.0 spec, please remove "JSON-RPC 2.0 support" notice in your documentation or implement this feature.

    enhancement 
    opened by sergio-bershadsky 3
  • RFC: rate limit support

    RFC: rate limit support

    I had the impression that this library supported rate limiting but I can't find anything on that topic. Maybe I am wrong.

    In any case has anyone tried other rate-limiting libraries in conjunction with django-modern-rpc?

    If not what do people think about adding such support? Any hints to implementation? I can work on a PR sometime in the future as I will probably need such functionality.

    enhancement question 
    opened by atodorov 1
Releases(1.0.0a4)
  • 1.0.0a4(Nov 30, 2022)

  • 1.0.0a3(Jun 13, 2022)

  • 1.0.0a2(Jun 1, 2022)

  • 1.0.0a1(Mar 3, 2022)

  • 0.12.1(Nov 9, 2020)

  • 0.12.0(Nov 9, 2020)

    Requirements

    • Django 2.1, 2.2 and 3.0 are now officially supported. Thanks to @atodorov for 3.0 compatibility
    • Added Python 3.7 and 3.8 support
    • Dropped Python 3.3 support

    Improvements

    • To ensure compatibility with JSON-RPC 1.2, 2 more "Content-Type" values are supported by JSON-RPC Handler: "application/json-rpc" and "application/jsonrequest" #24). Thanks to @dansan
    Source code(tar.gz)
    Source code(zip)
  • 0.11.1(May 13, 2018)

    Improvements

    Last release introduced some undocumented breaking API changes regarding RPC registry management. Old API has been restored for backward compatibility. The following global functions are now back in the API:

    • modernrpc.core.register_rpc_method()
    • modernrpc.core.get_all_method_names()
    • modernrpc.core.get_all_methods()
    • modernrpc.core.get_method()
    • modernrpc.core.reset_registry()

    In addition, some improvements have been applied to unit tests, to make sure test environment is the same after each test function. In addition, some exclusion patterns have been added in .coveragerc file to increase coverage report accuracy.

    Source code(tar.gz)
    Source code(zip)
  • 0.11.0(Apr 25, 2018)

    Improvements

    • Django 2.0 is now officially supported. Tox and Travis default config have been updated to integrate Django 2.0 in existing tests environements.
    • Method's documentation is generated only if needed and uses Django's @cached_property decorator
    • HTML documentation default template has been updated: Bootstrap 4.1.0 stable is now used, and the rendering has been improved.

    API Changes

    • Class RPCRequest has been removed and replaced by method execute_procedure(name, args, kwargs) in RPCHandler class. This method contains common logic used to retrieve a RPC method, execute authentication predicates to make sure it can be run, execute the concrete method and return the result.
    • HTML documentation content is not anymore marked as "safe" using django.utils.safestring.mark_safe(). You have to use Django decorator safe in your template if you display this value.

    Settings

    • The kwargs dict passed to RPC methods can have customized keys (#18). Set the following values:

      • settings.MODERNRPC_KWARGS_REQUEST_KEY
      • settings.MODERNRPC_KWARGS_ENTRY_POINT_KEY
      • settings.MODERNRPC_KWARGS_PROTOCOL_KEY
      • settings.MODERNRPC_KWARGS_HANDLER_KEY

    to override dict keys and prevent conflicts with your own methods arguments.

    Other updates

    • Many units tests have been improved. Some tests with many calls to LiveServer have been splitted into shorter ones.
    Source code(tar.gz)
    Source code(zip)
  • 0.10.0(Dec 7, 2017)

    Improvements

    • Logging system / error management

      • In case of error, current exception stacktrace is now passed to logger by default. This allows special handler like django.utils.log.AdminEmailHandler or raven.handlers.logging.SentryHandler to use it to report more useful information (#13)
      • Error messages have been rewritten to be consistent across all modules and classes
      • Decrease log verbosity: some INFO log messages now have DEBUG level (startup methods registration)
    • Documentation has been updated

      • Added a page to explain how to configure RPC methods documentation generation, and add a note to explicitly state that markdown or docutils package must be installed if settings.MODERNRPC_DOC_FORMAT is set to non-empty value (#16)
      • Added a page to list implemented system introspection methods
      • Added a bibliography page, to list all references used to write the library
    • Default template for generated RPC methods documentation now uses Bootstrap 4.0.0-beta.2 (previously 4.0.0-alpha.5)

    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Oct 3, 2017)

    This is a major release, with many improvements, protocol support and bug fixes. This version introduce an API break, please read carefully.

    Improvements:

    • Class RPCException and its subclasses now accept an additional data argument (#10). This is used by JSON-RPC handler to report additional information to user in case of error. This data is ignored in XML-RPC response.
    • JSON-RPC: Batch requests are now supported (#11)
    • JSON-RPC: Named parameters are now supported (#12)
    • JSON-RPC: Notification calls are now supported. Missing id in payload is no longer considered as invalid, but is correectly handled. No HTTP response is returned in such case, according to the standard.
    • XML-RPC: exception raised when serializing data to XML are now catched as InternalError and a clear error message

    API Changes:

    • modernrpc.handlers.JSONRPC and modernrpc.handlers.XMLRPC have been moved and renamed. They become respectively modernrpc.core.JSONRPC_PROTOCOL and modernrpc.core.XMLRPC_PROTOCOL
    • RPCHandler class updated, as well as subclases XMLRPCHandler and JSONRPCHandler. RPCHandler.parse_request() is now RPCHandler.process_request(). The new method does not return a tuple (method_name, params) anymore. Instead, it executes the underlying RPC method using new class RPCRequest. If you customized your handlers, please make sure you updated your code (if needed).

    In addition, this version contains minor updates to prepare future compatibility with Django 2.0

    Source code(tar.gz)
    Source code(zip)
  • 0.8.1(Oct 2, 2017)

    This version is a security fix. Upgrade is highly recommended

    • Security: Authentication backend is correctly checked when executing method using system.multicall()
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Jul 12, 2017)

    • Fixed invalid HTML tag rendered from RPC Method documentation. Single new lines are converted to space since they are mostly used to limit docstrings line width. See pull request #7, thanks to @adamdonahue
    • Fixed issue #8: signature of auth.set_authentication_predicate has been fixed so it can be used as decorator. Thanks to @aplicacionamedida
    Source code(tar.gz)
    Source code(zip)
  • 0.7.1(Jun 24, 2017)

    • Removed useless settings variable introduced in last 0.7.0 release. Logging capabilities are now enabled by simply configuring a logger for modernrpc.* modules, using Django variable LOGGING. The documentation has been updated accordingly.
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Jun 24, 2017)

  • 0.6.0(Jun 24, 2017)

    • Many performance improvements. The Django cache system was previously used to store the list of available methods in the current project. This was mostly useless, and caused issues with some cache systems (#5). Use of cache system has been completely removed. The list of RPC methods is computed when the application is started and kept in memory until it is stopped.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.2(Apr 18, 2017)

    • User instance is now correctly stored in the current request after successful authentication [#4]
    • Unit testing with Django 1.11 is now performed against release version (Beta and RC are not tested anymore)
    • Documentation has been improved
    Source code(tar.gz)
    Source code(zip)
  • 0.5.1(Mar 25, 2017)

    • When RPC methods are registered, if a module file contains errors, a python warning is produced. This ensure the message will be displayed even if the logging system is not configured in a project (#2)
    • Python 2 strings standardization. Allow to configure an automatic conversion of incoming strings, to ensure they have the same type in RPC method, no matter what protocol was used to call it. Previously, due to different behavior between JSON and XML deserializers, strings were received as str when method was called via XML-RPC and as unicode with JSON-RPC. This standardization process is disabled by default, and can be configured for the whole project or for specific RPC methods.
    • Tests are performed on Django 1.11rc1
    • modernrpc.core.register_method() function was deprecated since version 0.4.0 and has been removed.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Feb 19, 2017)

    • Typo fixes
    • JSON-RPC 2.0 standard explicitly allows requests without 'parmas' member. This doesn't produce error anymore.
    • Setting variable MODERNRPC_XML_USE_BUILTIN_TYPES is now deprecated in favor of MODERNRPC_XMLRPC_USE_BUILTIN_TYPES
    • Unit tests are now performed with python 3.6 and Django 1.11 alpha, in addition to supported environment already tested. This is a first step to full support for these environments.
    • HTTP "Basic Auth" support: it is now possible to define RPC methods available only to specific users. The control can be done on various user attributes: group, permission, superuser status, etc. Authentication backend can be extended to support any method based on incoming request.
    Source code(tar.gz)
    Source code(zip)
  • 0.4.2(Nov 20, 2016)

    • Various performance improvements
    • Better use of logging framework (python builtin) to report errors & exceptions from library and RPC methods
    • Rewritten docstring parser. Markdown and reStructured formatters are still supported to generate HTML documentation for RPC methods. They now have unit tests to validate their behavior.
    • @rpc_method decorator can be used with or without parenthesis (and this feature is tested)
    • System methods have been documented
    Source code(tar.gz)
    Source code(zip)
  • 0.4.1(Nov 17, 2016)

    • Method arguments documentation keep the same order as defined in docstring
    • API change: MODERNRPC_ENTRY_POINTS_MODULES setting have been renamed to MODERNRPC_METHODS_MODULES.
    • A simple warning is displayed when MODERNRPC_METHODS_MODULES is not set, instead of a radical ImproperlyConfigured exception.
    • Some traces have been added to allow debugging in the module easily. It uses the builtin logging framework.
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Nov 17, 2016)

    • API change: new unified way to register methods. Documentation in progress
    • API change: XMl-RPC handler will now correctly handle None values by default. This behavior can be configured using MODERNRPC_XMLRPC_ALLOW_NONE setting.
    • Bugfix: when django use a persistent cache (Redis, memcached, etc.), ensure the registry is up-to-date with current sources at startup
    Source code(tar.gz)
    Source code(zip)
  • 0.3.2(Oct 26, 2016)

    • Include missing templates in pypi distribution packages
    • HTML documentation automatically generated for an entry point
    • 'system.multicall' is now supported, only in XML-RPC
    • Many tests added
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Oct 18, 2016)

    • Settings variables have been renamed to limit conflicts with other libraries. In the future, all settings will have the same prefix.

      • JSONRPC_DEFAULT_DECODER becomes MODERNRPC_JSON_DECODER
      • JSONRPC_DEFAULT_ENCODER becomes MODERNRPC_JSON_ENCODER

      See https:/alorence/django-modern-rpc/blob/master/modernrpc/modernrpc_settings.py for more details

    • Many other settings added, to make the library more configurable. See http://django-modern-rpc.readthedocs.io/en/latest/basic_usage/settings.html

    • RPC methods can now declare the special **kwargs parameter. The dict will contain information about current context (request, entry point, protocol, etc.)

    • About 12 tests added to increase coverage

    • Many documentation improvements

    • 'system.methodHelp' is now supported

    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(Oct 12, 2016)

    • Project is now configured to report tests coverage. See https://coveralls.io/github/alorence/django-modern-rpc
    • Some documentation have been added, to cover more features of the library. See http://django-modern-rpc.readthedocs.io/en/latest/
    • Many unit tests added to increase coverage
    • RPCEntryPoint class can now be configured to handle only requests from a specific protocol
    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Oct 5, 2016)

    • Added very basic documentation: http://django-modern-rpc.rtfd.io/
    • 'system.listMethods' is now supported
    • 'system.methodSignature' is now supported
    • Error reporting has been improved. Correct error codes and messages are returned on usual fail cause. See module modernrpc.exceptions for more information.
    • Many unit tests have been added to increase test coverage of the library
    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Oct 12, 2016)

    • First version with very basic features:
      • Works with Python 2.7, 3.3, 3.4 (Django 1.8 only) and 3.5
      • Works with Django 1.8, 1.9 and 1.10
      • Supports JSON-RPC and XML-RPC simple requests
      • Supports multiple entry-points with defined list of methods and supported protocols
    • Some important features are still missing:
      • No authentication support
      • Unit tests doesn't cover all the code
      • RPC system methods utility (listMethods, methodSignature, etc.) are not implemented
      • There is no way to provide documentation in HTML form
      • The library itself doesn't have any documentation (appart from README.md)
    Source code(tar.gz)
    Source code(zip)
Updates redisearch instance with igdb data used for kimosabe

igdb-pdt Update RediSearch with IGDB games data in the following Format: { "game_slug": { "name": "game_name", "cover": "igdb_coverart_url",

6rotoms 0 Jul 30, 2021
A simple REST API to manage postal addresses, written in Python/Django.

A simple REST API to manage postal addresses, written in Python/Django.

Attila Bagossy 2 Feb 14, 2022
Docker django app

Hmmmmm... What I should write here? Maybe "Hello World". Hello World Build Docker compose: sudo docker-compose build Run Docker compose: sudo docker-

Andrew 0 Nov 10, 2022
Redia Cache implementation in django.

django-redis Recipe APP Simple Recipe app which shows different kinds off recipe to the user. Why Cache ? Accessing data from cache is much faster tha

Avinash Alanjkar 1 Sep 21, 2022
Django-environ allows you to utilize 12factor inspired environment variables to configure your Django application.

Django-environ django-environ allows you to use Twelve-factor methodology to configure your Django application with environment variables. import envi

Daniele Faraglia 2.7k Jan 07, 2023
A Django web application that shortens long URLs. This is a demo project to show off my tech abilities.

Django URL Shortener This project is just a complete and production-ready URL shortener web application to show off my tech and coding abilities. Impo

Seyyed Ali Ayati 5 Jan 26, 2022
Drf-stripe-subscription - An out-of-box Django REST framework solution for payment and subscription management using Stripe

Drf-stripe-subscription - An out-of-box Django REST framework solution for payment and subscription management using Stripe

Oscar Y Chen 68 Jan 07, 2023
A set of functions related with Django

django-extra-tools Table of contents Installation Quick start Template filters parse_datetime parse_date parse_time parse_duration Aggregation First L

Tomasz Jakub Rup 3 Mar 04, 2020
This Django app will be used to host Source.Python plugins, sub-plugins, and custom packages.

Source.Python Project Manager This Django app will be used to host Source.Python plugins, sub-plugins, and custom packages. Want to help develop this

2 Sep 24, 2022
A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for quickly creating new images from the one assigned to the field.

django-versatileimagefield A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creat

Jonathan Ellenberger 490 Dec 13, 2022
Customize the behavior of django.contrib.auth permissions.

Customizando o comportamento do django.contrib.auth. O que queremos? NΓ£o criar as permissΓ΅es padrΓ΅es automaticamente (add, delete, view, read). Criar

Henrique Bastos 7 Nov 26, 2022
This is a repository for collecting global custom management extensions for the Django Framework.

Django Extensions Django Extensions is a collection of custom extensions for the Django Framework. Getting Started The easiest way to figure out what

Django Extensions 6k Dec 26, 2022
Run Django tests with testcontainers.

django-rdtwt (Run Django Tests With Testcontainers) This targets users who wish to forget setting up a database for tests. There's no manually startin

2 Jan 09, 2022
A Django web application to receive, virus check and validate transfers of digital archival records, and allow archivists to appraise and accession those records.

Aurora Aurora is a Django web application that can receive, virus check and validate transfers of digital archival records, and allows archivists to a

Rockefeller Archive Center 20 Aug 30, 2022
Django Rest Framework + React application.

Django Rest Framework + React application.

2 Dec 19, 2022
Use heroicons in your Django and Jinja templates.

heroicons Use heroicons in your Django and Jinja templates. Requirements Python 3.6 to 3.9 supported. Django 2.2 to 3.2 supported. Are your tests slow

Adam Johnson 52 Dec 14, 2022
APIs for a Chat app. Written with Django Rest framework and Django channels.

ChatAPI APIs for a Chat app. Written with Django Rest framework and Django channels. The documentation for the http end points can be found here This

Victor Aderibigbe 18 Sep 09, 2022
Strawberry-django-plus - Enhanced Strawberry GraphQL integration with Django

strawberry-django-plus Enhanced Strawberry integration with Django. Built on top

BLB Ventures 138 Dec 28, 2022
Comprehensive Markdown plugin built for Django

Django MarkdownX Django MarkdownX is a comprehensive Markdown plugin built for Django, the renowned high-level Python web framework, with flexibility,

neutronX 738 Dec 21, 2022
Template for Django Project Using Docker

You want a Django project who use Docker and Docker-compose for Development and for Production ? It's for you !

1 Dec 17, 2021