Technobits Django Authentication Backend Package
A complete Django backend package providing authentication and email services with minimal setup. Focused on secure user authentication, Google OAuth, and SendInBlue email integration.
🚀 Quick Installation
1. Install the Package
# Install from local development
pip install -e /path/to/Library/packages/server-django
# Or install from PyPI (when published)
pip install technobits-server-django
2. Add to Django Settings
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Required third-party apps
'rest_framework',
'rest_framework_simplejwt',
'corsheaders',
# Technobits modules
'technobits.auth',
'technobits.email',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# REST Framework Configuration
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
# JWT Configuration
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
'ROTATE_REFRESH_TOKENS': True,
'BLACKLIST_AFTER_ROTATION': True,
}
# CORS Configuration
CORS_ALLOWED_ORIGINS = [
"http://localhost:3000", # Your frontend URL
"http://127.0.0.1:3000",
]
CORS_ALLOW_CREDENTIALS = True
# Technobits Configuration
TECHNOBITS_CONFIG = {
'AUTH': {
'GOOGLE_OAUTH_CLIENT_ID': os.getenv('GOOGLE_OAUTH_CLIENT_ID', ''),
'ENABLE_GOOGLE_LOGIN': True,
'ENABLE_EMAIL_VERIFICATION': True,
'JWT_EXPIRY_HOURS': 24,
},
'EMAIL': {
'FROM_EMAIL': os.getenv('FROM_EMAIL', 'noreply@example.com'),
'SMTP_HOST': os.getenv('EMAIL_HOST', 'smtp.gmail.com'),
'SMTP_PORT': int(os.getenv('EMAIL_PORT', '587')),
'SMTP_USER': os.getenv('EMAIL_HOST_USER', ''),
'SMTP_PASSWORD': os.getenv('EMAIL_HOST_PASSWORD', ''),
'USE_TLS': True,
}
}
3. Add URLs
# urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# Technobits API endpoints
path('api/auth/', include('technobits.auth.urls')),
path('api/email/', include('technobits.email.urls')),
]
4. Run Migrations
python manage.py migrate
5. Create Environment File
Create a .env file in your project root:
# Django Settings
SECRET_KEY=your-secret-key-here
DEBUG=True
# Google OAuth
GOOGLE_OAUTH_CLIENT_ID=your-google-client-id
# reCAPTCHA (optional)
RECAPTCHA_SECRET_KEY=your-recaptcha-secret-key
# Email
FROM_EMAIL=noreply@yoursite.com
# SendInBlue API (recommended for production)
SENDINBLUE_API_KEY=your-sendinblue-api-key
# Or use SMTP
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-email-password
🎯 Available API Endpoints
Authentication
POST /api/auth/register/- User registrationPOST /api/auth/login/- User loginPOST /api/auth/google/- Google OAuth loginPOST /api/auth/logout/- User logoutPOST /api/auth/refresh/- Refresh JWT tokenGET /api/auth/me/- Get current userPOST /api/auth/forgot-password/- Request password resetPOST /api/auth/reset-password/- Reset passwordPOST /api/auth/change-password/- Change passwordGET /api/auth/health/- Health check
Email Services
POST /api/email/send/- Send plain emailPOST /api/email/send-template/- Send template email using SendInBlue
📝 Usage Examples
Registration API Call
import requests
response = requests.post('http://localhost:8000/api/auth/register/', {
'email': 'user@example.com',
'password': 'securepassword123',
'name': 'John Doe'
})
print(response.json())
# Output: {"user": {"id": 1, "email": "user@example.com", "name": "John Doe"}, "message": "User registered successfully"}
Login API Call
response = requests.post('http://localhost:8000/api/auth/login/', {
'email': 'user@example.com',
'password': 'securepassword123'
})
data = response.json()
access_token = data['access']
refresh_token = data['refresh']
Send Email with Template
response = requests.post('http://localhost:8000/api/email/send-template/', {
'to': 'user@example.com',
'template_id': 1, # Password reset template
'params': {
'name': 'John Doe',
'reset_url': 'https://yoursite.com/reset-password?token=abc123'
}
}, headers={
'Authorization': f'Bearer {access_token}'
})
email_response = response.json()
Forgot Password Flow
# Step 1: Request password reset
response = requests.post('http://localhost:8000/api/auth/forgot-password/', {
'email': 'user@example.com'
})
# This sends an email with reset instructions
print(response.json())
# Output: {"message": "Password reset instructions sent to your email"}
🔧 Advanced Configuration
Custom User Model
# settings.py
AUTH_USER_MODEL = 'auth.User' # Uses Django's default User model
# Or extend with custom fields
TECHNOBITS_CONFIG = {
'AUTH': {
'USER_MODEL': 'myapp.CustomUser',
'ENABLE_EMAIL_VERIFICATION': True,
'ENABLE_GOOGLE_LOGIN': True,
}
}
Email Templates
# Custom email templates
TECHNOBITS_CONFIG = {
'EMAIL': {
'TEMPLATES': {
'PASSWORD_RESET': 'emails/password_reset.html',
'EMAIL_VERIFICATION': 'emails/verify_email.html',
}
}
}
SendInBlue Integration
# settings.py
TECHNOBITS_CONFIG = {
'EMAIL': {
'USE_SENDINBLUE': True,
'SENDINBLUE_API_KEY': os.getenv('SENDINBLUE_API_KEY'),
'TEMPLATES': {
'PASSWORD_RESET': 1,
'EMAIL_VERIFICATION': 2,
'WELCOME': 3,
}
}
}
🚀 Production Deployment
1. Environment Variables
# Production environment
DEBUG=False
ALLOWED_HOSTS=yoursite.com,www.yoursite.com
SECRET_KEY=your-production-secret-key
# Database
DATABASE_URL=postgresql://user:pass@localhost/dbname
# Email (SendInBlue recommended)
SENDINBLUE_API_KEY=your-production-sendinblue-api-key
# Google OAuth (Production)
GOOGLE_OAUTH_CLIENT_ID=your-production-google-client-id
GOOGLE_OAUTH_CLIENT_SECRET=your-production-google-client-secret
# reCAPTCHA (Production)
RECAPTCHA_SECRET_KEY=your-production-recaptcha-secret
2. Security Settings
# settings.py (production)
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
🔍 Testing
Run Tests
# Install test dependencies
pip install technobits-server-django[dev]
# Run tests
python manage.py test technobits
Test API Endpoints
# Health check
curl http://localhost:8000/api/auth/health/
# Register user
curl -X POST http://localhost:8000/api/auth/register/ \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com", "password": "testpass123", "name": "Test User"}'
# Login
curl -X POST http://localhost:8000/api/auth/login/ \
-H "Content-Type: application/json" \
-d '{"email": "test@example.com", "password": "testpass123"}'
📦 Dependencies
The package automatically installs:
- Django (>=4.0,<6.0) - Web framework
- Django REST Framework (>=3.14.0) - API framework
- Simple JWT (>=5.3.0) - JWT authentication
- CORS Headers (>=4.3.0) - CORS support
- Google Auth (>=2.23.0) - Google OAuth integration
- Requests (>=2.31.0) - HTTP requests
- Python Dotenv (>=1.0.0) - Environment variables
- SendInBlue API (>=7.6.0) - Email service with templates
🤝 Support
- Check the health endpoint:
GET /api/auth/health/ - Enable debug mode:
DEBUG=Truein settings - Check Django logs for detailed error messages
- Verify environment variables are loaded correctly
📄 License
MIT License - see LICENSE file for details.
Metadata
Release files for technobits-server-django 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| technobits_server_django-1.0.0.tar.gz | 27.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| technobits_server_django-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.0 kB
Release files / technobits_server_django-1.0.0.tar.gz
| Download URL | technobits_server_django-1.0.0.tar.gz |
|---|---|
| Size | 27.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0418bfb0640111ad4a2b210bb294676842b5f61bc1b43bb59e6a348fb2bd349
|
|
BLAKE2b-256 checksum How to use checksums |
5f32d8fd0458f72c621616c1464f53b14b075c11076e9724f1f8e067b668fedd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.6
|
Release files / technobits_server_django-1.0.0-py3-none-any.whl
| Download URL | technobits_server_django-1.0.0-py3-none-any.whl |
|---|---|
| Size | 29.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
643135d4eb6a9f457fe8b45d2069f0a08dc053a0706517018db68e78335cd58e
|
|
BLAKE2b-256 checksum How to use checksums |
e6b662956fe9cc628eaa3d7128896a4c7d9d89ceb30cf9ce187f69ea18583e0d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.6
|