django-submitify

A Django app to accept literary submissions.


License
MIT
Install
pip install django-submitify==0.0.12

Documentation

Submitify

Build Status Coverage Status PyPI

Multi-format submission accepting platform.

Quick start

  1. Add "submitify" to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [
        ...
        'submitify',
    ]
    

    Ensure that you have django.contrib.auth added as an application as well.

  2. Include the submitify URLconf in your project urls.py like this:

    url(r'^submitify/', include('submitify.urls')),
    
  3. Run python manage.py migrate to create the submitify models.

  4. Start the development server.

  5. Visit http://127.0.0.1:8000/submitify/ to see the app.

Notes for the pluggable application

The standalone application is basically ready to use as one would normally run a Django app, but the pluggable application has a few more things to note.

  • Submitify hooks into the Django permissions system. Creating a new call-for-submissions requires the submitify.add_call permission, so publishers should be added to a group with that permission.

  • Submitify is designed, loosely, for a site using Bootstrap, so elements are classed as such, but this is designed to not be a hard requirement. To that end, some styles are defined within the templates.

  • Applications must implement the ability to add users as readers/invite users as writers. A form for doing such is available at submitify.forms.InviteForm. The view should look something like this:

    def view_user(request, username=None):
        user = get_object_or_404(User, username=username)
        ...
        invite_calls_reading = []
        invite_calls_writing = []
        if request.user.is_authenticated and request.user != user:
            invite_calls_reading = request.user.submitify_calls_editing.filter(
                  ~Q(readers__in=[user]),
                status__in=[
                    Call.NOT_OPEN_YET,
                    Call.OPEN
                  ])
            invite_calls_writing = request.user.submitify_calls_reading.filter(
                    status__in=[
                    Call.NOT_OPEN_YET,
                    Call.OPEN,
                  ],
                invite_only=True)
        invite_reader_form = InviteForm(initial={
              'user': user,
          })
        invite_reader_form.fields['calls'].queryset = invite_calls_reading
        invite_writer_form = InviteForm(initial={
              'user': user,
          })
        invite_writer_form.fields['calls'].queryset = invite_calls_writing
        return render(request, 'view_profile.html', {
              ...
              'invite_reader_form': (invite_reader_form if
                                   len(invite_calls_reading) > 0 else None),
              'invite_writer_form': (invite_writer_form if
                                   len(invite_calls_writing) > 0 else None),
          })
    

    The template should look something like:

    {% if invite_reader_form %}
        <form method="post" action="{% url 'submitify:invite_reader' %}">
            {% csrf_token %}
            {{ invite_reader_form.user }}
            <div class="form-group">
                <label for="id_calls">Invite user as a reader to...</label>
                {{ invite_reader_form.calls }}
            </div>
        </form>
    {% endif %}
    {% if invite_writer_form %}
        <form method="post" action="{% url 'submitify:invite_writer' %}">
            {% csrf_token %}
            {{ invite_writer_form.user }}
            <div class="form-group">
                <label for="id_calls">Invite user as a writer to...</label>
                {{ invite_writer_form.calls }}
            </div>
        </form>
    {% endif %}
    

    See the standalone application for more information.

Further information

Source, issues, and further information:
GitHub
Author
The OpenFurry Contributors