============================================= :sunglasses: django-private-chat :sunglasses: ============================================= .. image:: https://badge.fury.io/py/django-private-chat.svg :target: https://badge.fury.io/py/django-private-chat .. image:: https://travis-ci.org/Bearle/django-private-chat.svg?branch=master :target: https://travis-ci.org/Bearle/django-private-chat .. image:: https://codecov.io/gh/Bearle/django-private-chat/branch/master/graph/badge.svg :target: https://codecov.io/gh/Bearle/django-private-chat Django one-to-one Websocket-based Asyncio-handled chat, developed by Bearle team .. image:: https://github.com/Bearle/django-private-chat/blob/dev/screenshots/screen_1.jpg?raw=true Important Notes ------------- This app uses separate management command, run_chat_server for running Websockets in Django context. It is intended to be used with something like Supervisor or Systemd to run asyncio webserver as a separate one from Django. We didn't want our app to be limited to be used together with Django Channels - that's why we did it that way. You can find an example Systemd config to run it as a service at https://github.com/Bearle/django-private-chat/blob/dev/example.service P.S. Don't forget to change CHAT_WS_SERVER_HOST && CHAT_WS_SERVER_PORT settings! Documentation ------------- The full documentation will be (soon) at https://django-private-chat.readthedocs.io , for now just check the docstrings =) Example project --------------- You can check out our example project by cloning the repo and heading into example/ directory. There is a README file for you to check, initial data to check out the chat included. Customize the templates ----------------------- How to customize the template? Just copy:: venv/lib/pythonX.X/site-packages/django_private_chat/templates/django_private_chat/dialogs.html to yourapp/templates/django_private_chat/dialogs.html And feel free to edit it as you like! We intentionally left the JS code inside for it to be editable easily. Exsiting project quickstart --------------------------- Install django-private-chat:: pip install django-private-chat Migrate:: python manage.py migrate django-private-chat Note: you can use this package with or without uvloop, just run either .. code-block:: python python manage.py run_chat_server or run .. code-block:: python python manage.py run_chat_server_uvloop Add it to your `INSTALLED_APPS`: .. code-block:: python INSTALLED_APPS = ( ... 'django_private_chat', ... ) Add the server & port for your asyncio server to settings: .. code-block:: python CHAT_WS_SERVER_HOST = 'localhost' CHAT_WS_SERVER_PORT = 5002 It is possible to change messages datetime format using .. code-block:: python DATETIME_FORMAT Add django-private-chat's URL patterns: .. code-block:: python from django_private_chat import urls as django_private_chat_urls urlpatterns = [ ... url(r'^', include('django_private_chat.urls')), ... ] Add .. code-block:: python {% block extra_js %}{% endblock extra_js %} to your base template Now you can start a dialog using :: /dialogs/some_existing_username Features -------- -:white_check_mark: Uses current app model (get_user_model() and settings.AUTH_USER_MODEL) -:white_check_mark: Translatable (uses ugettext and {% trans %} ) -:white_check_mark: One-to-one user chat -:white_check_mark: Works using WebSockets -:white_check_mark: Displays online/offline status -:white_check_mark: Display typing/not typing status -:white_check_mark: Soft deletable message model - be sure to keep messages to comply with message-keeping laws -:white_check_mark: Flash the dialog button when the user you are not currently talking to wrote you a message -:point_right: TODO: add a dialog to the list when new one started -:point_right: TODO: add user-not-found and other alerts -:point_right: possible Redis backend intergration Running Tests ------------- Does the code actually work? :: source <YOURVIRTUALENV>/bin/activate (myenv) $ pip install tox (myenv) $ tox Credits ------- Tools used in rendering this package: * Cookiecutter_ * `cookiecutter-djangopackage`_ .. _Cookiecutter: https://github.com/audreyr/cookiecutter .. _`cookiecutter-djangopackage`: https://github.com/pydanny/cookiecutter-djangopackage