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)
Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly.

Cookiecutter Django Powered by Cookiecutter, Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly. Documentati

Daniel Feldroy 10k Dec 31, 2022
The magical reactive component framework for Django ✨

Unicorn The magical full-stack framework for Django ✨ Unicorn is a reactive component framework that progressively enhances a normal Django view, make

Adam Hill 1.4k Jan 05, 2023
Tutorial para o projeto negros.dev - A Essência do Django

Negros Dev Tutorial para o site negros.dev Este projeto foi feito com: Python 3.8.9 Django 3.1.8 Bootstrap 4.0 Como rodar o projeto? Clone esse reposi

Regis Santos 6 Aug 12, 2022
A Blog Management System Built with django

Blog Management System Backend use: Django Features Enhanced Ui

Vishal Goswami 1 Dec 06, 2021
Automated image processing for Django. Currently v4.0

ImageKit is a Django app for processing images. Need a thumbnail? A black-and-white version of a user-uploaded image? ImageKit will make them for you.

Matthew Dapena-Tretter 2.1k Dec 17, 2022
An API was build with Django to store and retrieve information about various musical instruments.

The project is meant to be a starting point, an experimentation or a basic example of a way to develop an API with Django. It is an exercise on using Django and various python technologies and design

Kostas Ziovas 2 Dec 25, 2021
A collection of models, views, middlewares, and forms to help secure a Django project.

Django-Security This package offers a number of models, views, middlewares and forms to facilitate security hardening of Django applications. Full doc

SD Elements 258 Jan 03, 2023
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
Django model mixins and utilities.

django-model-utils Django model mixins and utilities. django-model-utils supports Django 2.2+. This app is available on PyPI. Getting Help Documentati

Jazzband 2.4k Jan 04, 2023
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 Fett is an incomplete code generator used on several projects

Django Fett Django Fett is an incomplete code generator used on several projects. This is an attempt to clean it up and make it public for consumption

Jeff Triplett 6 Dec 31, 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
Helps working with singletons - things like global settings that you want to edit from the admin site.

Django Solo +---------------------------+ | | | | | \ | Django Solo helps

Sylvain Toé 726 Jan 08, 2023
Flashback is an awesome, retro IRC based app built using Django

Flashback Flashback is an awesome, retro IRC based app built using Django (and the Django Rest Framework) for the backend as well as React for the fro

Unloading Gnat 1 Dec 22, 2021
Quick example of a todo list application using Django and HTMX

django-htmx-todo-list Quick example of a todo list application using Django and HTMX Background Modified & expanded from https://github.com/jaredlockh

Jack Linke 54 Dec 10, 2022
A Django app for working with BTCPayServer

btcpay-django A Django app for working with BTCPayServer Installation pip install btcpay-django Developers Release To cut a release, run bumpversion,

Crawford 3 Nov 20, 2022
A fresh approach to autocomplete implementations, specially for Django. Status: v3 stable, 2.x.x stable, 1.x.x deprecated. Please DO regularely ping us with your link at #yourlabs IRC channel

Features Python 2.7, 3.4, Django 2.0+ support (Django 1.11 (LTS), is supported until django-autocomplete-light-3.2.10), Django (multiple) choice suppo

YourLabs 1.7k Jan 01, 2023
This is a sample Django Form.

Sample FORM Installation guide Clone repository git clone https://github.com/Ritabratadas343/SampleForm.git cd to repository. Create a virtualenv by f

Ritabrata Das 1 Nov 05, 2021
The uncompromising Python code formatter

The Uncompromising Code Formatter “Any color you like.” Black is the uncompromising Python code formatter. By using it, you agree to cede control over

Python Software Foundation 30.7k Jan 03, 2023
Intellicards-backend - A Django project bootstrapped with django-admin startproject mysite

Intellicards-backend - A Django project bootstrapped with django-admin startproject mysite

Fabrizio Torrico 2 Jan 13, 2022