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)
A modern looking portfolio build with Django.

Django Portfolio A portfolio template using html/css/js in the frontend and Django as the backend framework. Cool features: smooth scrolling responsiv

null 1 Jan 19, 2022
Django URL Shortener is a Django app to to include URL Shortening feature in your Django Project

Django URL Shortener Django URL Shortener is a Django app to to include URL Shortening feature in your Django Project Install this package to your Dja

Rishav Sinha 4 Nov 18, 2021
A reusable Django model field for storing ad-hoc JSON data

jsonfield jsonfield is a reusable model field that allows you to store validated JSON, automatically handling serialization to and from the database.

Ryan P Kilby 1.1k Jan 3, 2023
Django-Audiofield is a simple app that allows Audio files upload, management and conversion to different audio format (mp3, wav & ogg), which also makes it easy to play audio files into your Django application.

Django-Audiofield Description: Django Audio Management Tools Maintainer: Areski Contributors: list of contributors Django-Audiofield is a simple app t

Areski Belaid 167 Nov 10, 2022
Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

Twitter Bootstrap for Django Form - A simple Django template tag to work with Bootstrap

tzangms 557 Oct 19, 2022
Django-static-site - A simple content site framework that harnesses the power of Django without the hassle

coltrane A simple content site framework that harnesses the power of Django with

Adam Hill 57 Dec 6, 2022
Django Starter is a simple Skeleton to start with a Django project.

Django Starter Template Description Django Starter is a simple Skeleton to start

Numan Ibn Mazid 1 Jan 10, 2022
Django-Text-to-HTML-converter - The simple Text to HTML Converter using Django framework

Django-Text-to-HTML-converter This is the simple Text to HTML Converter using Dj

Nikit Singh Kanyal 6 Oct 9, 2022
This is raw connection between redis server and django python app

Django_Redis This repository contains the code for this blogpost. Running the Application Clone the repository git clone https://github.com/xxl4tomxu9

Tom Xu 1 Sep 15, 2022
Django app for handling the server headers required for Cross-Origin Resource Sharing (CORS)

django-cors-headers A Django App that adds Cross-Origin Resource Sharing (CORS) headers to responses. This allows in-browser requests to your Django a

Adam Johnson 4.8k Jan 3, 2023
πŸ”₯ Campus-Run Django ServerπŸ”₯

?? Campus-Run Campus-Run is a 3D racing game set on a college campus. Designed this service to comfort university students who are unable to visit the

Youngkwon Kim 1 Feb 8, 2022
Django server-side adapter for Inertia.js

django-inertia Django server-side new adapter for Inertia.js. Getting Started Install the package pip install django-inertia Configure your project A

Samuel Girardin 14 Sep 16, 2022
Django project starter on steroids: quickly create a Django app AND generate source code for data models + REST/GraphQL APIs (the generated code is auto-linted and has 100% test coverage).

Create Django App ?? We're a Django project starter on steroids! One-line command to create a Django app with all the dependencies auto-installed AND

imagine.ai 68 Oct 19, 2022
A Django chatbot that is capable of doing math and searching Chinese poet online. Developed with django, channels, celery and redis.

Django Channels Websocket Chatbot A Django chatbot that is capable of doing math and searching Chinese poet online. Developed with django, channels, c

Yunbo Shi 8 Oct 28, 2022
Blog focused on skills enhancement and knowledge sharing. Tech Stack's: Vue.js, Django and Django-Ninja

Blog focused on skills enhancement and knowledge sharing. Tech Stack's: Vue.js, Django and Django-Ninja

Wanderson Fontes 2 Sep 21, 2022
Meta package to combine turbo-django and stimulus-django

Hotwire + Django This repository aims to help you integrate Hotwire with Django ?? Inspiration might be taken from @hotwired/hotwire-rails. We are sti

Hotwire for Django 31 Aug 9, 2022
django-quill-editor makes Quill.js easy to use on Django Forms and admin sites

django-quill-editor django-quill-editor makes Quill.js easy to use on Django Forms and admin sites No configuration required for static files! The ent

lhy 139 Dec 5, 2022
A beginner django project and also my first Django project which involves shortening of a longer URL into a short one using a unique id.

Django-URL-Shortener A beginner django project and also my first Django project which involves shortening of a longer URL into a short one using a uni

Rohini Rao 3 Aug 8, 2021
Dockerizing Django with Postgres, Gunicorn, Nginx and Certbot. A fully Django starter project.

Dockerizing Django with Postgres, Gunicorn, Nginx and Certbot ?? Features A Django stater project with fully basic requirements for a production-ready

null 8 Jun 27, 2022