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)
File and Image Management Application for django

Django Filer django Filer is a file management application for django that makes handling of files and images a breeze. Contributing This is a an open

django CMS Association 1.6k Dec 28, 2022
An app that allows you to add recipes from the dashboard made using DJango, JQuery, JScript and HTMl.

An app that allows you to add recipes from the dashboard. Then visitors filter based on different categories also each ingredient has a unique page with their related recipes.

Pablo Sagredo 1 Jan 31, 2022
Radically simplified static file serving for Python web apps

WhiteNoise Radically simplified static file serving for Python web apps With a couple of lines of config WhiteNoise allows your web app to serve its o

Dave Evans 2.1k Dec 15, 2022
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
Declarative model lifecycle hooks, an alternative to Signals.

Django Lifecycle Hooks This project provides a @hook decorator as well as a base model and mixin to add lifecycle hooks to your Django models. Django'

Robert Singer 1k Dec 31, 2022
Notes-Django: an advanced project to save notes in Django. where users are able to Create, Read, Update and Delete their notes.

An advanced software to keep you notes. It allows users to perform CRUD operations on theirs Notes. Was implemented Authorization and Authentication

Edilson Pateguana 1 Feb 05, 2022
Login System Django

Login-System-Django Login System Using Django Tech Used Django Python Html Run Locally Clone project git clone https://link-to-project Get project for

Nandini Chhajed 6 Dec 12, 2021
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
Silk is a live profiling and inspection tool for the Django framework.

Silk is a live profiling and inspection tool for the Django framework. Silk intercepts and stores HTTP requests and database queries before presenting them in a user interface for further inspection:

Jazzband 3.7k Jan 02, 2023
Build reusable components in Django without writing a single line of Python.

Build reusable components in Django without writing a single line of Python. {% #quote %} {% quote_photo src="/project-hail-mary.jpg" %} {% #quot

Mitchel Cabuloy 277 Jan 02, 2023
Source code for Django for Beginners 3.2

The official source code for https://djangoforbeginners.com/. Available as an ebook or in Paperback. If you have the 3.1 version, please refer to this

William Vincent 10 Jan 03, 2023
django CMS Association 1.6k Jan 06, 2023
Django Advance DumpData

Django Advance Dumpdata Django Manage Command like dumpdata but with have more feature to Output the contents of the database from given fields of a m

EhsanSafir 7 Jul 25, 2022
The little ASGI framework that shines. 🌟

✨ The little ASGI framework that shines. ✨ Documentation: https://www.starlette.io/ Community: https://discuss.encode.io/c/starlette Starlette Starlet

Encode 7.7k Dec 31, 2022
A BitField extension for Django Models

django-bitfield Provides a BitField like class (using a BigIntegerField) for your Django models. (If you're upgrading from a version before 1.2 the AP

DISQUS 361 Dec 22, 2022
This is a repository for collecting global custom management extensions for the Django Framework.

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

Django Extensions 6k Dec 26, 2022
Bootstrap 3 integration with Django.

django-bootstrap3 Bootstrap 3 integration for Django. Goal The goal of this project is to seamlessly blend Django and Bootstrap 3. Want to use Bootstr

Zostera B.V. 2.3k Jan 02, 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
Django Serverless Cron - Run cron jobs easily in a serverless environment

Django Serverless Cron - Run cron jobs easily in a serverless environment

Paul Onteri 41 Dec 16, 2022
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 03, 2023