Employee Management System (Django + MySQL)
Roles: Admin, HR, Employee
1. Project Setup
pip install django mysqlclient djangorestframework
django-admin startproject ems_project
cd ems_project
python manage.py startapp accounts
python manage.py startapp employees
python manage.py startapp attendance
python manage.py startapp payroll
2. MySQL Configuration
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ems_db',
'USER': 'ems_user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
}
}
AUTH_USER_MODEL = 'accounts.User'
3. Custom User Model (Roles)
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
ROLE_CHOICES = (
('ADMIN', 'Admin'),
('HR', 'HR'),
('EMP', 'Employee'),
)
role = models.CharField(max_length=10, choices=ROLE_CHOICES)
4. Employee Model
from django.db import models
from accounts.models import User
class Department(models.Model):
name = models.CharField(max_length=100)
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
emp_id = models.CharField(max_length=20, unique=True)
department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True)
designation = models.CharField(max_length=100)
salary = models.DecimalField(max_digits=10, decimal_places=2)
joining_date = models.DateField()
5. Login View with Role Redirection
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def login_view(request):
if request.method == 'POST':
user = authenticate(
username=request.POST['username'],
password=request.POST['password']
)
if user:
login(request, user)
if user.role == 'ADMIN':
return redirect('admin_dashboard')
elif user.role == 'HR':
return redirect('hr_dashboard')
else:
return redirect('employee_dashboard')
return render(request, 'accounts/login.html')
6. Logout
from django.contrib.auth import logout
from django.shortcuts import redirect
def logout_view(request):
logout(request)
return redirect('login')
7. Attendance Model
class Attendance(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
date = models.DateField()
status = models.CharField(
max_length=10,
choices=[('Present','Present'),('Absent','Absent')]
)
8. Payroll Model
class Payroll(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
month = models.CharField(max_length=20)
basic = models.DecimalField(max_digits=10, decimal_places=2)
deductions = models.DecimalField(max_digits=10, decimal_places=2)
net_salary = models.DecimalField(max_digits=10, decimal_places=2)
9. REST API Example (DRF)
from rest_framework import serializers
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = '__all__'
No comments:
Post a Comment