Simple alternative to Doodle polls and scheduling (Python 3, Django 3, JavaScript)

Overview

What is jawanndenn?

Screenshot of poll creation in jawanndenn

jawanndenn is a simple web application to schedule meetings and run polls, a libre alternative to Doodle. It is using the following technology:

jawanndenn is libre software developed by Sebastian Pipping. The server code is licensed under the GNU Affero GPL license version 3 or later whereas the client code is licensed under the GNU GPL license version 3 or later.

Please report bugs and let me know if you like it.

Poll Setup Format

The textarea titled "Setup (JSON)" uses a simple JSON-based format that knows the following keys:

  • equal_width — a bool to control whether all options are pumped up to the same width (true or false) to counter potential voter bias
  • lifetime — duration after which this poll will be deleted; can be "week" or "month"; an enum-like string
  • options — a list of strings, one for each option; supports Markdown-like syntax for: bold, italic, inline code
  • title — the title or headline of the poll to run; supports Markdown-like syntax for: bold, italic, inline code

Installation

To install the latest release without cloning the Git repository:

# pip3 install jawanndenn --user

To install from a Git clone:

# ./setup.py install --user

Deployment with docker-compose

Create a simple file .env like this one:

JAWANNDENN_POSTGRES_NAME=jawanndenn
JAWANNDENN_POSTGRES_USER=jawanndenn
JAWANNDENN_POSTGRES_PASSWORD=dEb2PIcinemA8poH
JAWANNDENN_SECRET_KEY=606ea88f183a27919d5c27ec7f948906d23fdd7821684eb59e8bcf7377e3853b

Make sure to use your own values!

You can then build and run a docker image using docker-compose up --build.

PostgreSQL data is saved to ~/.jawanndenn-docker-pgdata/ on the host system. The app is served on localhost:54080.

Command line usage

When installed, invocation is as simple as

# jawanndenn

During development, you may want to run jawanndenn from the Git clone using

# PYTHONPATH=. python3 -m jawanndenn --debug

Currently supported arguments are:

# jawanndenn --help
usage: jawanndenn [-h] [--debug] [--host HOST] [--port PORT]
                  [--url-prefix PATH] [--database-sqlite3 FILE]
                  [--django-secret-key-file FILE] [--max-polls COUNT]
                  [--max-votes-per-poll COUNT] [--dumpdata]
                  [--loaddata FILE.json]

optional arguments:
  -h, --help            show this help message and exit
  --debug               Enable debug mode (default: disabled)
  --host HOST           Hostname or IP address to listen at (default:
                        127.0.0.1)
  --port PORT           Port to listen at (default: 8080)
  --url-prefix PATH     Path to prepend to URLs (default: "")
  --database-sqlite3 FILE
                        File to write the database to (default:
                        ~/jawanndenn.sqlite3)
  --django-secret-key-file FILE
                        File to use for Django secret key data (default:
                        ~/jawanndenn.secret_key)

limit configuration:
  --max-polls COUNT     Maximum number of polls total (default: 1000)
  --max-votes-per-poll COUNT
                        Maximum number of votes per poll (default: 40)

data import/export arguments:
  --dumpdata            Dump a JSON export of the database to standard output,
                        then quit.
  --loaddata FILE.json  Load a JSON export of the database from FILE.json,
                        then quit.

Migrating data from jawanndenn 1.x to 2.x

Migration takes four steps:

  1. Update to the latest version of jawanndenn 1.x, e.g. by running: pip2 install --upgrade 'jawanndenn<2'; the JSON data export was first introduced with release 1.6.3.
  2. Export existing polls:
    1. If you're using the commend line app: python2 -m jawanndenn --dumpdata > dump.json
    2. If you're using docker-compose: docker-compose run -T jawanndenn --database-pickle /data/polls.pickle --dumpdata > dump.json
  3. Deploy latest jawanndenn 2.x somewhere (as described above) or just pip3 install 'jawanndenn>=2' it somewhere
  4. Import the JSON dump created in step (2):
    1. If you're using the commend line app: python3 -m jawanndenn --loaddata dump.json
    2. If you're using docker-compose: docker-compose run -T jawanndenn sh -c 'cat > /tmp/dump.json && DJANGO_SETTINGS_MODULE=jawanndenn.settings python3 -m django loaddata /tmp/dump.json' < dump.json

Goals

Please check out the list of upcoming features.

Non-goals

  • Use of heavy frontend frameworks: building blocks only
  • Read availability from calendars

Thanks

Special thanks to Arne Maier (@KordonDev) for reporting an XSS vulnerability, responsibly.

Comments
  • Domain Subfolder

    Domain Subfolder

    Hi,

    I have installed jawanndenn under docker. As each web application, I access it throw an nginx web proxy (running on another docker container). There is SSL till the nginx proxy, then there is no SSL anymore.

    All web application have their specific unique subfolder. So, I want to access the jawanndenn application via the following URL: https://mydomain.com/jawanndenn. For other applications, I used to change the server (nginx, apache, tomcat, etc) root folder into the application container. Since jawanndenn is using bottle python which I am not familiar with, I have difficulties to configure the root folder. The application is not working as excepted since it cannot load other resources such as css and js files: see screenshot with a black square to hide my domain.

    image

    According the bottle documentation, it is possible to define a route somewhere inside the application. Is it really possible? If yes, where do I need to add the statement? I can edit the code when creating the docker image, it is fine for me...

    Thank you

    enhancement question 
    opened by JayBeeDe 7
  • Detailed Installation Instructions

    Detailed Installation Instructions

    Hi,

    there are a few environment variables in the docker-compose file which need to be filled. I can not find an explanation in the documentation, for example:

    JAWANNDENN_SENTRY_DSN JAWANNDENN_ALLOWED_HOSTS JAWANNDENN_URL_PREFIX JAWANNDENN_DEBUG

    Furthermore the cron container is not mentioned anywhere in the documentation.

    Thanks!

    opened by floari 4
  • Scroll?

    Scroll?

    The current https://jawanndenn.de/poll/858dd89c4f336eb4469391068e00ca363119204ff0cc58d194668d6e15aae4d7

    Doesn't scroll and there is no chance to add answers

    duplicate 
    opened by cquiroga95-zz 3
  • docker-compose installation results in 'ImportError: No module named main'

    docker-compose installation results in 'ImportError: No module named main'

    After trying for an hour I would like to ask for your help here: I was trying to install jawanndenn via docker-compose. Because of a proxy I had to change my docker-compose.yml like following:

    version: '2'
    
    services:
      jawanndenn:
        restart: always
        networks:
          - proxy
        build: .
        volumes:
          - '/data/docker/jawanndenn:/data'
        environment:
          - 'VIRTUAL_HOST=jawanndenn.mydomain.com'
          - 'LETSENCRYPT_HOST=jawanndenn.mydomain.com'
          - '[email protected]'
          - 'LETSENCRYPT_TEST=true'
    
    networks:
      proxy:
        external:
          name: proxy_proxy
    

    Running dc up -d && dc logs -f --tail=100 always gives me following log messages:

    Creating jawanndenn_jawanndenn_1
    Attaching to jawanndenn_jawanndenn_1
    jawanndenn_1  | Traceback (most recent call last):
    jawanndenn_1  |   File "/root/.local/bin/jawanndenn", line 11, in <module>
    jawanndenn_1  |     load_entry_point('jawanndenn==1.5', 'console_scripts', 'jawanndenn')()
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 480, in load_entry_point
    jawanndenn_1  |     return get_distribution(dist).load_entry_point(group, name)
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2691, in load_entry_point
    jawanndenn_1  |     return ep.load()
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2322, in load
    jawanndenn_1  |     return self.resolve()
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2328, in resolve
    jawanndenn_1  |     module = __import__(self.module_name, fromlist=['__name__'], level=0)
    jawanndenn_1  | ImportError: No module named main
    jawanndenn_1  | Traceback (most recent call last):
    jawanndenn_1  |   File "/root/.local/bin/jawanndenn", line 11, in <module>
    jawanndenn_1  |     load_entry_point('jawanndenn==1.5', 'console_scripts', 'jawanndenn')()
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 480, in load_entry_point
    jawanndenn_1  |     return get_distribution(dist).load_entry_point(group, name)
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2691, in load_entry_point
    jawanndenn_1  |     return ep.load()
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2322, in load
    jawanndenn_1  |     return self.resolve()
    jawanndenn_1  |   File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2328, in resolve
    jawanndenn_1  |     module = __import__(self.module_name, fromlist=['__name__'], level=0)
    jawanndenn_1  | ImportError: No module named main
    jawanndenn_jawanndenn_1 exited with code 1
    

    Am I doing something wrong?

    opened by ghost 3
  • requirements(deps): bump sqlparse from 0.4.2 to 0.4.3

    requirements(deps): bump sqlparse from 0.4.2 to 0.4.3

    Bumps sqlparse from 0.4.2 to 0.4.3.

    Changelog

    Sourced from sqlparse's changelog.

    Release 0.4.3 (Sep 23, 2022)

    Enhancements

    • Add support for DIV operator (pr664, by chezou).
    • Add support for additional SPARK keywords (pr643, by mrmasterplan).
    • Avoid tokens copy (pr622, by living180).
    • Add REGEXP as a comparision (pr647, by PeterSandwich).
    • Add DISTINCTROW keyword for MS Access (issue677).
    • Improve parsing of CREATE TABLE AS SELECT (pr662, by chezou).

    Bug Fixes

    • Fix spelling of INDICATOR keyword (pr653, by ptld).
    • Fix formatting error in EXTRACT function (issue562, issue670, pr676, by ecederstrand).
    • Fix bad parsing of create table statements that use lower case (issue217, pr642, by mrmasterplan).
    • Handle backtick as valid quote char (issue628, pr629, by codenamelxl).
    • Allow any unicode character as valid identifier name (issue641).

    Other

    • Update github actions to test on Python 3.10 as well (pr661, by cclaus).
    Commits
    • fba15d3 Bump version.
    • b72a8ff Allow any unicode character as identifier name (fixes #641).
    • 07a2e81 Add docstring and comments.
    • 4235eb8 Add tests for utils.remove_quotes.
    • e269881 Update Changelog and authors.
    • c1a597e add backtick to remove_quotes character list
    • 893d7b2 Update CHANGELOG.
    • 403de6f Fixed bad parsing of create table statements that use lower case
    • a172486 Update Changelog.
    • 7de1999 CREATE TABLE tbl AS SELECT should return get_alias() for its column
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    enhancement dependencies 
    opened by dependabot[bot] 2
  • requirements(deps): bump faker from 14.0.0 to 14.1.0

    requirements(deps): bump faker from 14.0.0 to 14.1.0

    Bumps faker from 14.0.0 to 14.1.0.

    Release notes

    Sourced from faker's releases.

    Release v14.1.0

    See CHANGELOG.md.

    Changelog

    Sourced from faker's changelog.

    v14.1.0 - 2022-08-17

    • Add providers for bn_BD: address, automotive, bank, color, company, currency, date_time, geo, internet, job, person, phone_number and ssn. Thanks @​saanpritom.
    Commits
    • e0c2d8f Bump version: 14.0.0 → 14.1.0
    • ce60a34 :pencil: update CHANGELOG.md
    • 598b31a Add providers for bn_BD: address, automotive, bank, color, company, currenc...
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    enhancement dependencies 
    opened by dependabot[bot] 2
  • requirements(deps): bump tomli from 1.2.3 to 2.0.0

    requirements(deps): bump tomli from 1.2.3 to 2.0.0

    Bumps tomli from 1.2.3 to 2.0.0.

    Changelog

    Sourced from tomli's changelog.

    1.2.3

    • Fixed
      • Backport: Allow lower case "t" and "z" in datetimes

    2.0.0

    • Removed
      • Python 3.6 support
      • Support for text file objects as load input. Use binary file objects instead.
      • First argument of load and loads can no longer be passed by keyword.
    • Fixed
      • Allow lower case "t" and "z" in datetimes
    • Improved
      • Raise an error when dotted keys define values outside the "current table". Technically speaking TOML v1.0.0 does allow such assignments but that isn't intended by specification writers, and will change in a future specification version (see the pull request).

    1.2.2

    • Fixed
      • Illegal characters in error messages were surrounded by two pairs of quotation marks
    • Improved
      • TOMLDecodeError.__module__ is now the public import path (tomli) instead of private import path (tomli._parser)
      • Eliminated an import cycle when typing.TYPE_CHECKING is True. This allows sphinx-autodoc-typehints to resolve type annotations.

    1.2.1

    • Fixed
      • Raise an error if a carriage return (without a following line feed) is found in a multi-line basic string
    • Type annotations
      • Type annotate load input as typing.BinaryIO only to discourage use of deprecated text file objects.
    • Packaging
      • Remove legacy setup.py from PyPI source distribution. If you're a packager and absolutely need this file, please create an issue.

    1.2.0

    • Deprecated
      • Text file objects as input to load. Binary file objects should be used instead to avoid opening a TOML file with universal newlines or with an encoding other than UTF-8.

    1.1.0

    • Added
      • load can now take a binary file object

    1.0.4

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    enhancement dependencies 
    opened by dependabot[bot] 2
  • Where can ALLOWED_HOSTS be changed for testing?

    Where can ALLOWED_HOSTS be changed for testing?

    I am trying out jawanndenn on own server, but I cannot quite get it to work.

    I set up jawanndenn inside a virtualenv, where it was installed with pip3 install jawanndenn; then, I try to test it with:

    $ JAWANNDENN_ALLOWED_HOSTS="mysite.com" jawanndenn --host 0.0.0.0 --port 6789
    

    Then, when I fire up the browser at mysite.com:6789, I get Bad Request (400) in the browser, and the server terminal reports:

    Invalid HTTP_HOST header: 'mysite.com:6789'. You may need to add 'mysite.com' to ALLOWED_HOSTS (['0.0.0.0', '127.0.0.1', '0.0.0.0', 'localhost']).
    XX.YY.ZZ.WW- - [30/Nov/2021:11:37:59 +0000] "GET / HTTP/1.1" 400 143 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"
    

    Eh, however, I added it here in ALLOWED_HOSTS already:

    jawanndenn/lib/python3.8/site-packages/jawanndenn/settings.py:    'mysite.com',
    jawanndenn/lib/python3.8/site-packages/django/conf/global_settings.py:ALLOWED_HOSTS = [ "mysite.com" ]
    

    ... and I still get the above message.

    Any suggestions how can I get this running for testing?

    question 
    opened by sdbbs 2
  • requirements(deps): bump packaging from 21.0 to 21.2

    requirements(deps): bump packaging from 21.0 to 21.2

    Bumps packaging from 21.0 to 21.2.

    Release notes

    Sourced from packaging's releases.

    21.2

    • Update changelog entry for 21.1

    Full Changelog: https://github.com/pypa/packaging/compare/21.1...21.2

    21.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/pypa/packaging/compare/21.0...21.1

    Changelog

    Sourced from packaging's changelog.

    21.2 - 2021-10-29

    
    * Update documentation entry for 21.1.
    

    21.1 - 2021-10-29

    • Update pin to pyparsing to exclude 3.0.0.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    enhancement dependencies 
    opened by dependabot[bot] 2
  • use valid value for X-Frame-Options

    use valid value for X-Frame-Options

    SAMESITE is not a valid value for the X-Frame-Options header.

    This is also causing an error in the Firefox developer console:

    Invalid X-Frame-Options: “SAMESITE” header from “https://jawanndenn.de/static/3rdparty/github-buttons-4.0.1/d…-btn.html?user=hartwork&repo=jawanndenn&type=star&count=true” loaded into “https://jawanndenn.de/”.
    

    The intention was probably to set it to sameorigin, see: https://developer.mozilla.org/de/docs/Web/HTTP/Headers/X-Frame-Options

    bug 
    opened by hannob 2
  • Image now needs no root privilege

    Image now needs no root privilege

    Hi, I've change the dockerfile so runs with a non-root user. To resolve issue https://github.com/hartwork/jawanndenn/issues/37 and to help myself. Thanks for your work.

    opened by flusile 2
  • "docker-compose up --build" fails with docker-compose 2.x.x (but not 1.x.x)

    [[email protected] jawanndenn]# docker-compose up --build
    WARN[0000] The "JAWANNDENN_DEBUG" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_URL_PREFIX" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_SENTRY_DSN" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_ALLOWED_HOSTS" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_SENTRY_DSN" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_URL_PREFIX" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_ALLOWED_HOSTS" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_DEBUG" variable is not set. Defaulting to a blank string.
    WARN[0000] The "JAWANNDENN_SENTRY_DSN" variable is not set. Defaulting to a blank string.
    [+] Running 0/3
     ⠿ postgres Error                                                                                                                                        1.4s
     ⠿ redis Error                                                                                                                                           1.4s
     ⠿ cron Error                                                                                                                                            1.4s
    Error response from daemon: pull access denied for jawanndenn_jawanndenn, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
    [[email protected] jawanndenn]#
    
    question 
    opened by beppe9000 2
  • Footer should include an possibility to insert an impressum

    Footer should include an possibility to insert an impressum

    Great small piece of software. Works like a charm. I miss a possibility to insert a Impressum which is obligatory for public web services in Germany in my opinion all over the in the EU

    How can I insert such a Impressum or a link to a Impressum?

    opened by elearningdienst 1
  • Add ternary choice

    Add ternary choice "maybe/dunno"

    Really cool project, I feeled desperate to find a nice meetings scheduler!

    Would be nice to have a three possible vote values: yes, no but also dunno/possible if really needed.

    Doodle provides that (as well as framadate), I think that's somehow the only choice you can answer sometimes.

    enhancement 
    opened by bagage 4
Releases(2.4.5)
Simple alternative to Doodle polls and scheduling (Python 3, Django 3, JavaScript)

What is jawanndenn? jawanndenn is a simple web application to schedule meetings and run polls, a libre alternative to Doodle. It is using the followin

Sebastian Pipping 169 Jan 06, 2023
A feature flipper for Django

README Django Waffle is (yet another) feature flipper for Django. You can define the conditions for which a flag should be active, and use it in a num

950 Dec 26, 2022
This is django-import-export module that exports data into many formats

django-import-export This is django-import-export module which exports data into many formats, you can implement this in your admin panel. - Dehydrat

Shivam Rohilla 3 Jun 03, 2021
Bringing together django, django rest framework, and htmx

This is Just an Idea There is no code, this README just represents an idea for a minimal library that, as of now, does not exist. django-htmx-rest A l

Jack DeVries 5 Nov 24, 2022
MAC address Model Field & Form Field for Django apps

django-macaddress MAC Address model and form fields for Django We use netaddr to parse and validate the MAC address. The tests aren't complete yet. Pa

49 Sep 04, 2022
Automatically reload your browser in development.

django-browser-reload Automatically reload your browser in development. Requirements Python 3.6 to 3.10 supported. Django 2.2 to 4.0 supported. Are yo

Adam Johnson 254 Jan 04, 2023
A CBV to handle multiple forms in one view

django-shapeshifter A common problem in Django is how to have a view, especially a class-based view that can display and process multiple forms at onc

Kenneth Love 167 Nov 26, 2022
An automatic django's update checker and MS teams notifier

Django Update Checker This is small script for checking any new updates/bugfixes/security fixes released in django News & Events and sending correspon

prinzpiuz 4 Sep 26, 2022
A Django web application that allows you to be in the loop about everything happening in your neighborhood.

A Django web application that allows you to be in the loop about everything happening in your neighborhood. From contact information of different handyman to meeting announcements or even alerts.

Kennedy Ngugi Mwaura 3 Dec 11, 2022
A generic system for filtering Django QuerySets based on user selections

Django Filter Django-filter is a reusable Django application allowing users to declaratively add dynamic QuerySet filtering from URL parameters. Full

Carlton Gibson 3.9k Jan 03, 2023
Django Persistent Filters is a Python package which provide a django middleware that take care to persist the querystring in the browser cookies.

Django Persistent Filters Django Persistent Filters is a Python package which provide a django middleware that take care to persist the querystring in

Lorenzo Prodon 2 Aug 05, 2022
Let AngularJS play well with Django

django-angular Let Django play well with AngularJS What does it offer? Add AngularJS directives to Django Forms. This allows to handle client side for

Jacob Rief 1.2k Dec 27, 2022
Yet another Django audit log app, hopefully the simplest one.

django-easy-audit Yet another Django audit log app, hopefully the easiest one. This app allows you to keep track of every action taken by your users.

Natán 510 Jan 02, 2023
based official code from django channels, replace frontend with reactjs

django_channels_chat_official_tutorial demo project for django channels tutorial code from tutorial page: https://channels.readthedocs.io/en/stable/tu

lightsong 1 Oct 22, 2021
Full-text multi-table search application for Django. Easy to install and use, with good performance.

django-watson django-watson is a fast multi-model full-text search plugin for Django. It is easy to install and use, and provides high quality search

Dave Hall 1.1k Dec 22, 2022
Easily share data across your company via SQL queries. From Grove Collab.

SQL Explorer SQL Explorer aims to make the flow of data between people fast, simple, and confusion-free. It is a Django-based application that you can

Grove Collaborative 2.1k Dec 30, 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 06, 2022
This "I P L Team Project" is developed by Prasanta Kumar Mohanty using Python with Django web framework, HTML & CSS.

I-P-L-Team-Project This "I P L Team Project" is developed by Prasanta Kumar Mohanty using Python with Django web framework, HTML & CSS. Screenshots HO

1 Dec 15, 2021
A debug/profiling overlay for Django

Django Debug Toolbar The Django Debug Toolbar is a configurable set of panels that display various debug information about the current request/respons

David Cramer 228 Oct 17, 2022
The friendly PIL fork (Python Imaging Library)

Pillow Python Imaging Library (Fork) Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lund

Pillow 10.4k Jan 03, 2023