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)
Simple application TodoList django with ReactJS

Django & React Django We basically follow the Django REST framework quickstart guide here. Create backend folder with a virtual Python environment: mk

Flavien HUGS 2 Aug 07, 2022
Inject an ID into every log message from a Django request. ASGI compatible, integrates with Sentry, and works with Celery

Django GUID Now with ASGI support! Django GUID attaches a unique correlation ID/request ID to all your log outputs for every request. In other words,

snok 300 Dec 29, 2022
Probably the best abstract model / admin for your tree based stuff.

django-treenode Probably the best abstract model / admin for your tree based stuff. Features Fast - get ancestors, children, descendants, parent, root

Fabio Caccamo 360 Jan 05, 2023
A django integration for huey task queue that supports multi queue management

django-huey This package is an extension of huey contrib djhuey package that allows users to manage multiple queues. Installation Using pip package ma

GAIA Software 32 Nov 26, 2022
Buckshot++ is a new algorithm that finds highly stable clusters efficiently.

Buckshot++: An Outlier-Resistant and Scalable Clustering Algorithm. (Inspired by the Buckshot Algorithm.) Here, we introduce a new algorithm, which we

John Jung 1 Jul 02, 2022
E-Commerce Platform

Shuup Shuup is an Open Source E-Commerce Platform based on Django and Python. https://shuup.com/ Copyright Copyright (c) 2012-2021 by Shuup Commerce I

Shuup 2k Jan 07, 2023
Use Database URLs in your Django Application.

DJ-Database-URL This simple Django utility allows you to utilize the 12factor inspired DATABASE_URL environment variable to configure your Django appl

Jacob Kaplan-Moss 1.3k Dec 30, 2022
An airlines clone website with django

abc_airlines is a clone website of an airlines system the way it works is that first you add flights to the website then the users can search flights

milad 1 Nov 16, 2021
A django model and form field for normalised phone numbers using python-phonenumbers

django-phonenumber-field A Django library which interfaces with python-phonenumbers to validate, pretty print and convert phone numbers. python-phonen

Stefan Foulis 1.3k Dec 31, 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
🔃 A simple implementation of STOMP with Django

Django Stomp A simple implementation of STOMP with Django. In theory it can work with any broker which supports STOMP with none or minor adjustments.

Juntos Somos Mais 32 Nov 08, 2022
A prettier way to see Django requests while developing

A prettier way to see Django requests while developing

Adam Hill 35 Dec 02, 2022
Учебное пособие по основам Django и сопутствующим технологиям

Учебный проект для закрепления основ Django Подробный разбор проекта здесь. Инструкция по запуску проекта на своей машине: Скачиваем репозиторий Устан

Stanislav Garanzha 12 Dec 30, 2022
Highlight the keywords of a page if a visitor is coming from a search engine.

Django-SEKH Django Search Engine Keywords Highlighter, is a middleware for Django providing the capacities to highlight the user's search keywords if

Julien Fache 24 Oct 08, 2021
A clone of https://virgool.io written in django

Virgool clone A clone of virgool blog written in django Installation first rename the .env.sample to .env and fill it. with docker docker-compose up -

Danial Selmipoor 7 Dec 23, 2022
Django Livre Bank

Django Livre Bank Projeto final da academia Construdelas. API de um banco fictício com clientes, contas e transações. Integrantes da equipe Bárbara Sa

Cecília Costa 3 Dec 22, 2021
A Django GraphQL (Graphene) base template

backend A Django GraphQL (Graphene) base template Make sure your IDE/Editor has Black and EditorConfig plugins installed; and configure it lint file a

Reckonsys 4 May 25, 2022
With Django Hijack, admins can log in and work on behalf of other users without having to know their credentials.

Django Hijack With Django Hijack, admins can log in and work on behalf of other users without having to know their credentials. Docs 3.x docs are avai

1.2k Jan 05, 2023
Django + AWS Elastic Transcoder

Django Elastic Transcoder django-elastic-transcoder is an Django app, let you integrate AWS Elastic Transcoder in Django easily. What is provided in t

StreetVoice 66 Dec 14, 2022
A simple plugin to attach a debugger in Django on runserver command.

django-debugger A simple plugin to attach a debugger in Django during runserver Installation pip install django-debugger Usage Prepend django_debugger

Sajal Shrestha 11 Nov 15, 2021