Skip to content

Django-based NGO empanelment system with secure registration, auto-generated Application IDs, file uploads, duplicate prevention, race-condition safe ID generation, and comprehensive admin dashboard with export functionality.

License

Notifications You must be signed in to change notification settings

ujjwalks96/NGO-Empanelment-Registration-Form-with-Map-and-Admin-Access-Functionality

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NGO Empanelment Registration Form with Map Functionality and Admin Access

Django Python License

Introduction

The NGO Empanelment Registration System is a comprehensive Django-based web application designed to streamline the registration and management of Non-Governmental Organizations (NGOs) for empanelment processes. This system addresses the critical need for efficient, secure, and scalable NGO registration management in government and institutional settings.

Built with modern web technologies and security best practices, this application provides a complete solution for organizations that need to manage large-scale NGO registrations while ensuring data integrity, preventing duplicates, and maintaining audit trails. The system is particularly suited for government departments, funding agencies, and institutions that work with multiple NGO partners.

Screenshots of the form: 1 2 3 5 4 6

Key Problem Solved

Traditional NGO registration processes often suffer from manual data entry errors, duplicate registrations, security vulnerabilities, and lack of proper audit trails. This system automates the entire workflow while implementing robust validation and security measures.

System Architecture & Methodology

graph TB
    A[NGO Registration Request] --> B[Form Validation Layer]
    B --> C{Duplicate Check}
    C -->|Duplicate Found| D[Rejection with Details]
    C -->|Unique Entry| E[Race-Condition Safe ID Generation]
    E --> F[Database Transaction]
    F --> G[File Upload Processing]
    G --> H[Registration Complete]
    H --> I[Auto-generated Application ID]
    
    J[Admin Dashboard] --> K[View All Registrations]
    J --> L[Export to CSV]
    J --> M[Manage Documents]
    
    N[Security Layer] --> O[CSRF Protection]
    N --> P[File Validation]
    N --> Q[Environment Variables]
Loading

Technical Methodology

  1. Input Validation: Multi-layer validation using Django forms with custom clean methods
  2. Duplicate Prevention: Real-time AJAX validation and comprehensive database checks
  3. Concurrency Handling: Transaction-atomic operations with database row locking
  4. File Management: Secure upload with type/size validation and organized storage
  5. Admin Interface: Custom Django admin with enhanced filtering and export capabilities

Features

  • Thread-Safe ID Generation: Race condition safe Application ID generation (Format: SWB-YYYY-XXXXX)
  • Comprehensive Validation: Multi-field duplicate detection and real-time validation
  • Secure File Handling: Document upload with validation and organized storage
  • Advanced Admin Interface: Custom filters, search, and CSV export functionality
  • Geographic Integration: Location-based registration with coordinate validation
  • Audit Trail: Complete submission tracking with timestamps
  • Responsive Design: Mobile-optimized interface for accessibility

Technology Stack

  • Backend Framework: Django 5.2.1
  • Database: SQLite (development) / PostgreSQL (production)
  • Frontend: HTML5, CSS3, JavaScript (ES6+)
  • File Storage: Local filesystem (cloud-ready architecture)
  • Security: Django's built-in security features + custom enhancements
  • Admin Interface: Enhanced Django Admin with custom functionality

Project Structure

ngo_site/
├── ngo_site/                   # Project configuration
│   ├── settings.py             # Environment-based configuration
│   ├── urls.py                 # Main URL routing with media handling
│   ├── wsgi.py                 # WSGI application entry point
│   └── __init__.py
├── ngo_app/                    # Main application
│   ├── models.py               # NGO model with race-condition safe methods
│   ├── views.py                # Registration logic and AJAX endpoints
│   ├── forms.py                # Advanced validation and duplicate checking
│   ├── admin.py                # Custom admin interface with filters
│   ├── urls.py                 # Application URL patterns
│   ├── templates/              # HTML templates
│   │   ├── registration_form.html
│   │   ├── thank_you.html
│   │   └── ngo_app/           # Admin templates
│   ├── static/                 # Static assets
│   │   ├── css/
│   │   ├── js/
│   │   └── images/
│   └── migrations/             # Database schema migrations
├── media/                      # User uploads (git-ignored)
│   └── awards/                 # Certificate storage
├── static/                     # Collected static files
├── logs/                       # Application logs (git-ignored)
├── requirements.txt            # Python dependencies
├── .env.example               # Environment template
├── .gitignore                 # Git exclusions
└── manage.py                  # Django CLI tool

Installation & Setup

Prerequisites

  • Python 3.8+
  • pip package manager
  • Git version control
  • (Optional) PostgreSQL for production

Quick Start

  1. Repository Setup

    git clone https://github.com/yourusername/ngo-empanelment-system.git
    cd ngo-empanelment-system
  2. Virtual Environment

    python -m venv venv
    # Windows
    venv\Scripts\activate
    # macOS/Linux
    source venv/bin/activate
  3. Dependencies

    pip install -r requirements.txt
  4. Environment Configuration

    cp .env.example .env
    # Edit .env with your settings (see security section below)
  5. Database Setup

    python manage.py makemigrations
    python manage.py migrate
    python manage.py createsuperuser
  6. Development Server

    python manage.py runserver

Access Points:

Configuration

Environment Variables (.env)

# Security (REQUIRED)
SECRET_KEY=your-secret-key-here
DEBUG=True

# Application Settings
ADMIN_EMAIL=admin@yourdomain.com
SUPPORT_EMAIL=support@yourdomain.com

# Database (Production)
DATABASE_URL=postgresql://user:password@localhost:5432/ngo_db

Critical Security Setup

IMPORTANT: Before deployment or making your repository public:

  1. Generate New Secret Key

    # In Django shell
    from django.core.management.utils import get_random_secret_key
    print(get_random_secret_key())
  2. Environment Variable Implementation

    # settings.py uses secure pattern
    SECRET_KEY = os.environ.get('SECRET_KEY', 'django-insecure-CHANGE-THIS-IN-PRODUCTION')
    DEBUG = os.environ.get('DEBUG', 'True').lower() == 'true'
  3. Never Commit Sensitive Data

    • Real secret keys
    • Database credentials
    • Email passwords
    • Production configuration

Custom Application Settings

NGO_SETTINGS = {
    'APPLICATION_ID_PREFIX': 'SWB',  # Customizable prefix
    'MAX_FILE_SIZE': 5 * 1024 * 1024,  # 5MB limit
    'ALLOWED_FILE_TYPES': ['pdf', 'jpg', 'jpeg', 'png', 'doc', 'docx'],
    'REGISTRATION_ENABLED': True,
}

Key Implementation Details

Race-Condition Safe ID Generation

def generate_application_id(self):
    with transaction.atomic():
        # Thread-safe implementation
        existing_ids = NGO.objects.filter(
            application_id__startswith=prefix
        ).select_for_update().values_list('application_id', flat=True)
        
        # Extract numeric values and find maximum
        numbers = [int(app_id.split('-')[-1]) for app_id in existing_ids]
        next_number = max(numbers) + 1 if numbers else 1
        
        return f"{prefix}{str(next_number).zfill(5)}"

Multi-Layer Duplicate Prevention

  • Real-time validation: AJAX endpoints for immediate feedback
  • Database constraints: Unique field validation
  • Combination checks: Organization name + President name validation
  • Form-level validation: Custom clean methods in Django forms

Secure File Upload

  • Type validation: Restricted file extensions
  • Size limits: Configurable upload size restrictions
  • Path security: Organized storage in media/awards/
  • Admin integration: Direct file access through admin interface

API Endpoints

Public Endpoints

  • GET / - Registration form
  • POST / - Form submission
  • GET /thank_you/ - Confirmation page

AJAX Endpoints

  • POST /check_duplicate/ - Real-time duplicate validation
    {
      "field": "darpan_id",
      "value": "OD/2023/0123456",
      "is_duplicate": false
    }

Admin Features

  • Custom CSV export functionality
  • Advanced filtering by area, expertise, domain
  • Bulk operations support
  • Geographic data visualization

Customization Guide

Modifying Application ID Format

  1. Change prefix in settings:

    NGO_SETTINGS['APPLICATION_ID_PREFIX'] = 'YOUR_PREFIX'
  2. Update generation logic if needed in models.py

Adding Form Fields

  1. Model update: Add field to NGO model
  2. Form integration: Include in NGOForm.Meta.fields
  3. Validation: Add custom clean_fieldname() method
  4. Migration: Create and apply database migration
  5. Admin update: Include in admin fieldsets

Custom Validation Rules

def clean_custom_field(self):
    value = self.cleaned_data.get('custom_field')
    # Custom validation logic
    if not meets_criteria(value):
        raise ValidationError("Custom validation message")
    return value

Production Deployment

Required Changes for Production

  1. Security Settings

    DEBUG = False
    ALLOWED_HOSTS = ['yourdomain.com']
    SECRET_KEY = 'production-secret-key'
  2. Database Configuration

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'ngo_production',
            'USER': 'ngo_user',
            'PASSWORD': 'secure_password',
            'HOST': 'localhost',
            'PORT': '5432',
        }
    }
  3. Static Files & Media

    python manage.py collectstatic
    # Configure web server to serve static files
    # Set up cloud storage for media files (recommended)
  4. SSL/HTTPS Configuration

    SECURE_SSL_REDIRECT = True
    SECURE_BROWSER_XSS_FILTER = True
    SECURE_CONTENT_TYPE_NOSNIFF = True

Testing & Development

Running Tests

python manage.py test
python manage.py test ngo_app.tests.test_models

Development Workflow

  1. Create feature branch
  2. Implement changes with tests
  3. Ensure all tests pass
  4. Update documentation
  5. Submit pull request

Contributing

Development Guidelines

  • Follow Django coding standards
  • Write comprehensive tests for new features
  • Document all custom methods and classes
  • Ensure thread safety for database operations
  • Validate all user inputs thoroughly

Pull Request Process

  1. Fork repository
  2. Create feature branch (git checkout -b feature/feature-name)
  3. Commit changes (git commit -m 'Add feature description')
  4. Push branch (git push origin feature/feature-name)
  5. Open pull request with detailed description

Security Considerations

  • Data Protection: Environment variables for sensitive configuration
  • Input Validation: Comprehensive form and file validation
  • CSRF Protection: Django's built-in CSRF middleware
  • XSS Prevention: Template auto-escaping enabled
  • SQL Injection: Django ORM prevents SQL injection
  • File Security: Upload validation and secure storage paths

Author & Contact

Created by: Ujjwal Kumar Swain
Email: ujjwalks.iirs@gmail.com

For clarifications, questions about the implementation, or collaboration opportunities, feel free to reach out via email.

License

MIT License - see LICENSE file for complete terms.

Technical Support

For technical issues and development questions:

  • GitHub Issues: Bug reports and feature requests
  • Documentation: Check existing issues before creating new ones
  • Development: Follow contribution guidelines for code submissions
  • Author Contact: ujjwalks.iirs@gmail.com for implementation clarifications

About

Django-based NGO empanelment system with secure registration, auto-generated Application IDs, file uploads, duplicate prevention, race-condition safe ID generation, and comprehensive admin dashboard with export functionality.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published