BarberShop-Advanced is a Python (Django) web application for managing barber bookings. It offers role-based access control, REST API endpoints for all features and async email sending for booking confirmation.
📖 View Full Project Documentation here
- User registration, login, and logout system
- Custom permissions system
- Role-based access control
- Extended UserProfile model (One-to-One with Django User)
- Services: Browse available services (haircuts, beard trimming, etc.)
- Services/Barbers: Choose your barber
- Bookings: Schedule and manage bookings
- Reviews: See user reviews or leave one
- Role-based access control: Authorized users can perform full CRUD across all models
- Fully implemented REST API
- CRUD endpoints for all models
- API serializers and validation
- Celery + Redis integration
- Asynchronous email sending
- Email confirmation when a booking is created
- Unit Tests for:
- Models
- Forms
- Serializers
- Integration Tests for:
- Views
- API endpoints
- Clean and responsive UI using Django Templates, HTML, and CSS
- Python
- Django
- Django REST Framework
- HTML5
- CSS3
- Django Templates
- Celery
- Redis
- PostgreSQL
barber_shop/– Main Django project configurationbookings/– Booking system logicservices/– Service and Barber managementreviews/– Reviews app with full CRUD functionalityapi/– REST API endpoints and serializersaccounts/– Authentication, authorization, and user profilestemplates/– HTML templatesstatic/– Static assets (CSS, images)manage.py– Django management script
Follow these steps to run the project locally:
git clone https://github.com/AntonVelev21/BarberShop-Advanced.git cd BarberShop-Advanced
python -m venv venv
# Windows
venv\Scripts\activate
# Linux / Mac
source venv/bin/activate
pip install -r requirements.txt
Create a .env file in the project root based on .env example:
SECRET_KEY=your-secret-key
DEBUG=True
DB_NAME=barbershop_db
DB_USER=postgres
DB_PASSWORD=yourpassword
DB_HOST=localhost
DB_PORT=5432
EMAIL_HOST=smtp.yourprovider.com
EMAIL_PORT=587
EMAIL_HOST_USER=your-email
EMAIL_HOST_PASSWORD=your-email-password
EMAIL_USE_TLS=True
CELERY_BROKER_URL=redis://127.0.0.1:6379/0
python manage.py migrate
python manage.py createsuperuser
redis-server
celery -A barber_shop worker -l info
python manage.py runserver
Open: http://127.0.0.1:8000/
- API base URL:
/api/ - Supports:
- Authentication endpoints
- CRUD operations for:
- Services
- Barbers
- Bookings
- Reviews
- Users (restricted)
Use tools like Postman or cURL to test endpoints.
