A secure, scalable Django REST API for managing graduate internship job postings, applications, and contact messages. This backend powers internship portals by exposing clean, well-documented RESTful endpoints with authentication, validation, and file upload support.
- Create, update, delete, and retrieve internship job postings
- Categorize jobs using reusable categories
- Optional job location type (
remoteorhybrid) - Automatic job posting date
- Public read access with protected write operations
- Submit internship applications linked to jobs
- Resume upload with file type and size validation
- Applicant details (name, email, university, graduation year)
- Secure file handling
- Contact and enquiry message handling
- Full CRUD support for admin review
- HTTP Basic Authentication
- Role-based access using Django permissions
- Secure endpoints protected by authentication
- Auto-generated Swagger (OpenAPI) documentation
- Interactive API testing interface
- Supports authentication and file uploads
- Python 3
- Django
- Django REST Framework (DRF)
- drf-yasg (Swagger / OpenAPI)
- SQLite (default, easily swappable)
internship_api/
โโโ core/
โ โโโ migrations/
โ โโโ models.py
โ โโโ serializers.py
โ โโโ views.py
โ โโโ urls.py
โ โโโ validators.py
โ
โโโ internship_api/
โ โโโ settings.py
โ โโโ urls.py
โ
โโโ media/
โ โโโ resumes/
โ
โโโ manage.py
โโโ README.md
git clone <repository-url>
cd internship_apipython -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activatepip install -r requirements.txtpython manage.py makemigrations
python manage.py migratepython manage.py createsuperuserpython manage.py runserverOnce the server is running, access:
| URL | Description |
|---|---|
/ |
Swagger API Documentation |
/redoc/ |
Redoc Documentation |
/admin/ |
Django Admin Panel |
Swagger allows:
- Endpoint exploration
- Authenticated API testing
- Resume file uploads
- Request/response previews
This API uses Basic Authentication.
curl -u username:password http://127.0.0.1:8000/api/jobs/- Authorization Type: Basic Auth
- Provide Django user credentials
โ ๏ธ Always use HTTPS in production.
GET /api/jobs/
POST /api/jobs/
GET /api/jobs/{id}/
PUT /api/jobs/{id}/
PATCH /api/jobs/{id}/
DELETE /api/jobs/{id}/
GET /api/applications/
POST /api/applications/
GET /api/applications/{id}/
PUT /api/applications/{id}/
PATCH /api/applications/{id}/
DELETE /api/applications/{id}/
GET /api/categories/
POST /api/categories/
GET /api/messages/
POST /api/messages/
Resumes are validated to ensure:
- Accepted formats: PDF, DOC, DOCX
- Maximum size: 2MB
Validation is enforced at the model level, ensuring consistency across:
- API
- Django Admin
- Forms
- ModelViewSets used for clean CRUD logic
- Many-to-Many Categories for scalability
- Choices fields to enforce valid job location types
- Model-level validation for strong data integrity
- Swagger-first API documentation
- JWT authentication
- Application status tracking
- Email notifications on application submission
- Job expiration and deadlines
- Admin analytics dashboard
- Cloud storage for resumes (AWS S3 / Cloudinary)
This project is released under the MIT License.
Developed as a graduate internship backend system for GradCell.