-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
:docs: Cleanup to have just one source of truth
- Loading branch information
1 parent
8a3c35e
commit 07ee28e
Showing
5 changed files
with
50 additions
and
224 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,48 +1 @@ | ||
=============================== | ||
Contributing to Django Flag App | ||
=============================== | ||
|
||
There are many ways to contribute to the project. You may improve the documentation, address a bug, add some feature to the code or do something else. All sort of contributions are welcome. | ||
|
||
|
||
Development | ||
----------- | ||
|
||
To start development on this project, fork this repository and follow the following instructions. | ||
|
||
.. code:: sh | ||
# clone the forked repository | ||
$ git clone YOUR_FORKED_REPO_URL | ||
# create a virtual environment | ||
$ python3 -m venv venv | ||
# activate the virtual environment | ||
$ source venv/bin/activate | ||
# install dependencies | ||
(venv) $ pip install -e . -r testapp/requirements.txt | ||
# migrate the migrations to the database | ||
(venv) $ python manage.py migrate | ||
# create data | ||
(venv) $ python manage.py create_initial_data | ||
# start the development server | ||
(venv) $ python manage.py runserver | ||
Testing | ||
------- | ||
|
||
To run tests against a particular ``python`` and ``django`` version installed inside your virtual environment, you may use: | ||
|
||
.. code:: sh | ||
(venv) $ python manage.py test | ||
To run tests against all supported ``python`` and ``django`` versions, you may run: | ||
|
||
.. code:: sh | ||
# install dependency | ||
(venv) $ pip install tox | ||
# run tests | ||
(venv) $ tox | ||
.. include:: ../CONTRIBUTING.rst |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,137 +1 @@ | ||
django-flag-app | ||
=============== | ||
|
||
.. image:: https://travis-ci.org/abhiabhi94/django-flag-app.svg?branch=main | ||
:target: https://travis-ci.org/abhiabhi94/django-flag-app | ||
:alt: build | ||
|
||
.. image:: https://coveralls.io/repos/github/abhiabhi94/django-flag-app/badge.svg | ||
:target: https://coveralls.io/github/abhiabhi94/django-flag-app | ||
:alt: coverage | ||
|
||
.. image:: https://badge.fury.io/py/django-flag-app.svg | ||
:target: https://pypi.org/project/django-flag-app/ | ||
:alt: Latest PyPi version | ||
|
||
.. image:: https://img.shields.io/pypi/pyversions/django-flag-app.svg | ||
:target: https://pypi.python.org/pypi/django-flag-app/ | ||
:alt: python | ||
|
||
.. image:: https://img.shields.io/pypi/djversions/django-flag-app.svg | ||
:target: https://pypi.python.org/pypi/django-flag-app/ | ||
:alt: django | ||
|
||
.. image:: https://readthedocs.org/projects/django-flag-app/badge/?version=latest | ||
:target: https://django-flag-app.readthedocs.io/?badge=latest | ||
:alt: docs | ||
|
||
.. image:: https://img.shields.io/github/license/abhiabhi94/django-flag-app?color=gr | ||
:target: https://github.com/abhiabhi94/django-flag-app/blob/main/LICENSE | ||
:alt: licence | ||
|
||
A pluggable django application that adds the ability for users to flag(or report) your models. | ||
|
||
.. image:: ./_static/images/django-flag-app.gif | ||
:alt: flagging-process | ||
|
||
Installation | ||
------------ | ||
|
||
Install using ``pip`` | ||
|
||
.. code:: sh | ||
$ pip install django-flag-app | ||
If you want, you may install it from the source, grab the source code and run ``setup.py``. | ||
|
||
.. code:: sh | ||
$ git clone git://github.com/abhiabhi94/django-flag-app.git | ||
$ cd django-flag-app | ||
$ python setup.py install | ||
Usage | ||
----- | ||
|
||
Add app | ||
```````` | ||
|
||
To enable ``django_flag_app`` in your project you need to add it to ``INSTALLED_APPS`` in your projects ``settings.py`` file: | ||
|
||
.. code:: python | ||
INSTALLED_APPS = ( | ||
... | ||
'flag', | ||
... | ||
) | ||
Add URL | ||
```````` | ||
|
||
In your root ``urls.py``: | ||
|
||
.. code:: python | ||
urlpatterns = patterns( | ||
path('admin/', admin.site.urls), | ||
path('flag/', include('flag.urls')), | ||
... | ||
path('api/', include('flag.api.urls')), # only required for API Framework | ||
... | ||
) | ||
Migrate | ||
```````` | ||
|
||
Run the migrations to add the new models to your database: | ||
|
||
.. code:: sh | ||
python manage.py migrate flag | ||
Connect the flag model with the target model | ||
````````````````````````````````````````````` | ||
|
||
In ``models.py`` add the field **flags** as a ``GenericRelation`` field to the required model. | ||
|
||
E.g. for a ``Post`` model, you may add the field as shown below: | ||
|
||
.. code:: python | ||
from django.contrib.contenttypes.fields import GenericRelation | ||
from flag.models import Flag | ||
class Post(models.Model): | ||
user = models.ForeignKey(User) | ||
title = models.CharField(max_length=200) | ||
body = models.TextField() | ||
# the field name should be flags | ||
flags = GenericRelation(Flag) | ||
Use template tag | ||
````````````````` | ||
|
||
If you want to use web API, this step is not required. See further instructions at :ref:`API Actions`. | ||
|
||
``render_flag_form`` tag requires 2 required positional arguments: | ||
|
||
1. Instance of the targeted model. | ||
2. User object. | ||
|
||
To render the ``flag`` form for a the instance ``post``, place this inside your detail view, perhaps in some template of the sort ``postdetail.html``. | ||
|
||
.. code:: jinja | ||
{% render_flag_form post user %} | ||
Contributing | ||
------------ | ||
|
||
Please see the instructions at :ref:`Contributing to Django Flag App`. | ||
.. include:: ../README.rst |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,39 +1,43 @@ | ||
from django.contrib.auth.models import User, Group | ||
from django.core.management.base import BaseCommand | ||
from django.utils.translation import gettext_lazy as _ | ||
|
||
from testapp.post.models import Post | ||
|
||
|
||
class Command(BaseCommand): | ||
help = "Generate initial data" | ||
help = _("Generate initial data") | ||
|
||
@staticmethod | ||
def __get_or_create(username, password): | ||
created = False | ||
try: | ||
user = User.objects.get(username=username) | ||
except User.DoesNotExist: | ||
user = User.objects.create_user(username=username, password=password) | ||
created = True | ||
return user, created | ||
|
||
def __generate_initial_data(self): | ||
moderator, created = self.__get_or_create('moderator', password='moderator') | ||
if created: | ||
moderator_group, __ = Group.objects.get_or_create(name='flag_moderator') | ||
moderator_group.user_set.add(moderator) | ||
|
||
user, __ = self.__get_or_create('test', password='test') | ||
admin_user, created_super_user = self.__get_or_create('admin', password='admin') | ||
if created_super_user: | ||
admin_user.is_staff = True | ||
admin_user.save() | ||
|
||
try: | ||
Post.objects.get(title=_('Test Post')) | ||
self.stdout.write(self.style.WARNING(_('Initial data already present.'))) | ||
|
||
except Post.DoesNotExist: | ||
Post.objects.create( | ||
title=_('Test Post'), body=_('Hello django flag app'), user=user) | ||
self.stdout.write(self.style.SUCCESS(_('Initial data created successfully.'))) | ||
|
||
def handle(self, *args, **options): | ||
generate_initial_data() | ||
|
||
|
||
def get_or_create(username, password): | ||
created = False | ||
try: | ||
user = User.objects.get(username=username) | ||
except User.DoesNotExist: | ||
user = User.objects.create_user(username=username, password=password) | ||
created = True | ||
return user, created | ||
|
||
|
||
def generate_initial_data(): | ||
moderator, created = get_or_create('moderator', password='moderator') | ||
if created: | ||
moderator_group, _ = Group.objects.get_or_create(name='flag_moderator') | ||
moderator_group.user_set.add(moderator) | ||
|
||
user, _ = get_or_create('test', password='test') | ||
admin_user, created_super_user = get_or_create('admin', password='admin') | ||
if created_super_user: | ||
admin_user.is_staff = True | ||
admin_user.save() | ||
|
||
try: | ||
Post.objects.get(title='Test Post') | ||
except Post.DoesNotExist: | ||
Post.objects.create(title='Test Post', body='Hello django flag app', user=user) | ||
self.__generate_initial_data() |