diff --git a/README.md b/README.md
index 89415d6..658658e 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,18 @@
-# Donation-Back
\ No newline at end of file
+
Life Share
+
+Summary
+
+A website for blood donation
+
+ Team members
+
+1- yahia labib (team leader)
+
+2- Mohammad Alkhatib
+
+3- haia Lawansah
+
+4- Yaseen Saed
+
+5- Yousef Obeidat
+
\ No newline at end of file
diff --git a/accounts/__init__.py b/accounts/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/accounts/admin.py b/accounts/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/accounts/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/accounts/apps.py b/accounts/apps.py
new file mode 100644
index 0000000..3e3c765
--- /dev/null
+++ b/accounts/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class AccountsConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'accounts'
diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py
new file mode 100644
index 0000000..2fbf34b
--- /dev/null
+++ b/accounts/migrations/0001_initial.py
@@ -0,0 +1,40 @@
+# Generated by Django 4.0 on 2021-12-30 12:59
+
+import django.contrib.auth.models
+from django.db import migrations, models
+import django.db.models.deletion
+import phone_field.models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Account',
+ fields=[
+ ('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='auth.user')),
+ ('age', models.IntegerField()),
+ ('blood_type', models.CharField(blank=True, max_length=10, null=True)),
+ ('chronic_diseases', models.BooleanField(blank=True, default=False, null=True)),
+ ('image', models.ImageField(upload_to='image')),
+ ('data', models.DateField(blank=True, null=True)),
+ ('isAuthenticated', models.BooleanField(default=True)),
+ ('phone_number', phone_field.models.PhoneField(blank=True, help_text='Contact phone number', max_length=31)),
+ ],
+ options={
+ 'verbose_name': 'user',
+ 'verbose_name_plural': 'users',
+ 'abstract': False,
+ },
+ bases=('auth.user',),
+ managers=[
+ ('objects', django.contrib.auth.models.UserManager()),
+ ],
+ ),
+ ]
diff --git a/accounts/migrations/0002_account_group.py b/accounts/migrations/0002_account_group.py
new file mode 100644
index 0000000..e5868b9
--- /dev/null
+++ b/accounts/migrations/0002_account_group.py
@@ -0,0 +1,21 @@
+# Generated by Django 4.0 on 2021-12-30 13:14
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ('accounts', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='account',
+ name='group',
+ field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='boes', to='auth.group'),
+ preserve_default=False,
+ ),
+ ]
diff --git a/accounts/migrations/0003_account_donate_account_location_alter_account_age.py b/accounts/migrations/0003_account_donate_account_location_alter_account_age.py
new file mode 100644
index 0000000..8c92a2d
--- /dev/null
+++ b/accounts/migrations/0003_account_donate_account_location_alter_account_age.py
@@ -0,0 +1,28 @@
+# Generated by Django 4.0 on 2021-12-30 17:23
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('accounts', '0002_account_group'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='account',
+ name='donate',
+ field=models.BooleanField(default=False),
+ ),
+ migrations.AddField(
+ model_name='account',
+ name='location',
+ field=models.CharField(blank=True, max_length=50, null=True),
+ ),
+ migrations.AlterField(
+ model_name='account',
+ name='age',
+ field=models.IntegerField(null=True),
+ ),
+ ]
diff --git a/accounts/migrations/__init__.py b/accounts/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/accounts/models.py b/accounts/models.py
new file mode 100644
index 0000000..e8475ea
--- /dev/null
+++ b/accounts/models.py
@@ -0,0 +1,16 @@
+from django.db import models
+from django.contrib.auth.models import User,Group
+from phone_field import PhoneField
+# Create your models here.
+class Account(User):
+ age = models.IntegerField(null=True)
+ blood_type = models.CharField(max_length=10 ,blank=True,null=True)
+ chronic_diseases = models.BooleanField(default=False,blank=True,null=True)
+ image = models.ImageField(upload_to = 'image')
+ data = models.DateField(blank=True,null=True)
+ isAuthenticated = models.BooleanField(default=True)
+ phone_number = PhoneField(blank=True, help_text='Contact phone number')
+ group = models.ForeignKey(Group, related_name="boes", on_delete=models.CASCADE)
+ location = models.CharField(max_length=50,blank=True,null=True)
+ donate = models.BooleanField(default=False)
+
diff --git a/accounts/serializer.py b/accounts/serializer.py
new file mode 100644
index 0000000..8873d1b
--- /dev/null
+++ b/accounts/serializer.py
@@ -0,0 +1,34 @@
+from django.db.models import fields
+from rest_framework import serializers
+from .models import Account
+class AddSerializer(serializers.ModelSerializer):
+ password = serializers.CharField(write_only=True)
+
+ def create(self, validated_data):
+
+ user = Account.objects.create_user(
+ username=validated_data['username'],
+ password=validated_data['password'],
+ age=validated_data['age'],
+ group = validated_data['group'],
+ blood_type = validated_data['blood_type'],
+ chronic_diseases = validated_data['chronic_diseases'],
+ data = validated_data['data'],
+ phone_number = validated_data['phone_number'],
+ first_name = validated_data['first_name'],
+ last_name = validated_data['last_name'],
+ email = validated_data['email'],
+ location = validated_data['location'],
+ donate = validated_data['donate'],
+ image = validated_data['image']
+ )
+
+ return user
+
+ class Meta:
+ model = Account
+ fields = ('id','first_name','last_name','username',
+ 'email','password','age','blood_type','phone_number','location',
+ 'chronic_diseases','data','donate','group','image'
+ )
+
\ No newline at end of file
diff --git a/accounts/tests.py b/accounts/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/accounts/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/accounts/urls.py b/accounts/urls.py
new file mode 100644
index 0000000..bc638f2
--- /dev/null
+++ b/accounts/urls.py
@@ -0,0 +1,9 @@
+from django.urls import path
+from .views import AddListView,DetailAddView,ListView
+
+urlpatterns = [
+ path('',AddListView.as_view(),name= 'add_data'),
+ path('',DetailAddView.as_view(),name = 'detail_data'),
+ # path('',DetailAddView.as_view(),name = 'detail_dataint'),
+ path('view',ListView.as_view(),name = 'list_data')
+]
\ No newline at end of file
diff --git a/accounts/views.py b/accounts/views.py
new file mode 100644
index 0000000..54a1845
--- /dev/null
+++ b/accounts/views.py
@@ -0,0 +1,25 @@
+from django.shortcuts import render
+from rest_framework import generics, permissions
+from .serializer import AddSerializer
+from .models import Account
+from rest_framework import permissions
+from django.shortcuts import get_object_or_404
+from .models import User
+# Create your views here.
+
+class AddListView(generics.CreateAPIView):
+ serializer_class = AddSerializer
+ queryset = Account.objects.all()
+ permission_classes = [permissions.AllowAny]
+
+class DetailAddView(generics.RetrieveUpdateDestroyAPIView):
+ serializer_class = AddSerializer
+ queryset = Account.objects.all()
+
+ def get_object(self):
+ UserName= self.kwargs.get("username")
+ return get_object_or_404(Account, username=UserName)
+class ListView(generics.ListAPIView):
+ serializer_class = AddSerializer
+ queryset = Account.objects.all()
+ # permission_classes = [permissions.AllowAny]
\ No newline at end of file
diff --git a/blood_donating/__init__.py b/blood_donating/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/blood_donating/admin.py b/blood_donating/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/blood_donating/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/blood_donating/apps.py b/blood_donating/apps.py
new file mode 100644
index 0000000..92dc25b
--- /dev/null
+++ b/blood_donating/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class BloodDonatingConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'blood_donating'
diff --git a/blood_donating/migrations/__init__.py b/blood_donating/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/blood_donating/models.py b/blood_donating/models.py
new file mode 100644
index 0000000..71a8362
--- /dev/null
+++ b/blood_donating/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/blood_donating/tests.py b/blood_donating/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/blood_donating/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/blood_donating/views.py b/blood_donating/views.py
new file mode 100644
index 0000000..91ea44a
--- /dev/null
+++ b/blood_donating/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.
diff --git a/db.sqlite3 b/db.sqlite3
new file mode 100644
index 0000000..8f3da34
Binary files /dev/null and b/db.sqlite3 differ
diff --git a/hospital/__init__.py b/hospital/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/hospital/admin.py b/hospital/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/hospital/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/hospital/apps.py b/hospital/apps.py
new file mode 100644
index 0000000..003288d
--- /dev/null
+++ b/hospital/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class HospitalConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'hospital'
diff --git a/hospital/default.png b/hospital/default.png
new file mode 100644
index 0000000..c402c36
Binary files /dev/null and b/hospital/default.png differ
diff --git a/hospital/forms.py b/hospital/forms.py
new file mode 100644
index 0000000..70028c0
--- /dev/null
+++ b/hospital/forms.py
@@ -0,0 +1,43 @@
+from django import forms
+from django.contrib.auth.models import User
+from django.contrib.auth.forms import UserCreationForm
+from django.core.exceptions import ValidationError
+
+
+class HospitalCreateForm(UserCreationForm):
+ username = forms.CharField(label='username', min_length=5, max_length=150)
+ email = forms.EmailField(label='email')
+ password1 = forms.CharField(label='password', widget=forms.PasswordInput)
+ password2 = forms.CharField(label='Confirm password', widget=forms.PasswordInput)
+ website = forms.CharField(label='website', max_length=256)
+ image = forms.ImageField()
+
+ def username_clean(self):
+ username = self.cleaned_data['username'].lower()
+ new = User.objects.filter(username = username)
+ if new.count():
+ raise ValidationError("User Already Exist")
+ return username
+
+ def email_clean(self):
+ email = self.cleaned_data['email'].lower()
+ new = User.objects.filter(email=email)
+ if new.count():
+ raise ValidationError(" Email Already Exist")
+ return email
+
+ def clean_password2(self):
+ password1 = self.cleaned_data['password1']
+ password2 = self.cleaned_data['password2']
+
+ if password1 and password2 and password1 != password2:
+ raise ValidationError("Password don't match")
+ return password2
+
+ def save(self, commit = True):
+ user = User.objects.create_user(
+ self.cleaned_data['username'],
+ self.cleaned_data['email'],
+ self.cleaned_data['password1']
+ )
+ return user
\ No newline at end of file
diff --git a/hospital/migrations/0001_initial.py b/hospital/migrations/0001_initial.py
new file mode 100644
index 0000000..f67d21c
--- /dev/null
+++ b/hospital/migrations/0001_initial.py
@@ -0,0 +1,33 @@
+# Generated by Django 4.0 on 2021-12-30 11:36
+
+import django.contrib.auth.models
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='customUser',
+ fields=[
+ ('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='auth.user')),
+ ('website', models.CharField(max_length=256)),
+ ],
+ options={
+ 'verbose_name': 'user',
+ 'verbose_name_plural': 'users',
+ 'abstract': False,
+ },
+ bases=('auth.user',),
+ managers=[
+ ('objects', django.contrib.auth.models.UserManager()),
+ ],
+ ),
+ ]
diff --git a/hospital/migrations/0002_customuser_image.py b/hospital/migrations/0002_customuser_image.py
new file mode 100644
index 0000000..4aa1acd
--- /dev/null
+++ b/hospital/migrations/0002_customuser_image.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.0 on 2021-12-30 11:59
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('hospital', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='customuser',
+ name='image',
+ field=models.ImageField(default='default.png', upload_to=''),
+ ),
+ ]
diff --git a/hospital/migrations/__init__.py b/hospital/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/hospital/migrations/__pycache__/0001_initial.cpython-39.pyc b/hospital/migrations/__pycache__/0001_initial.cpython-39.pyc
new file mode 100644
index 0000000..61bfd28
Binary files /dev/null and b/hospital/migrations/__pycache__/0001_initial.cpython-39.pyc differ
diff --git a/hospital/migrations/__pycache__/0002_customuser_image.cpython-39.pyc b/hospital/migrations/__pycache__/0002_customuser_image.cpython-39.pyc
new file mode 100644
index 0000000..bed21d1
Binary files /dev/null and b/hospital/migrations/__pycache__/0002_customuser_image.cpython-39.pyc differ
diff --git a/hospital/migrations/__pycache__/__init__.cpython-39.pyc b/hospital/migrations/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..7e30419
Binary files /dev/null and b/hospital/migrations/__pycache__/__init__.cpython-39.pyc differ
diff --git a/hospital/models.py b/hospital/models.py
new file mode 100644
index 0000000..c1e3d72
--- /dev/null
+++ b/hospital/models.py
@@ -0,0 +1,7 @@
+from django.db import models
+from django.contrib.auth.models import User
+# Create your models here.
+
+class customUser (User):
+ website = models.CharField(max_length=256)
+ image = models.ImageField(default='default.png')
\ No newline at end of file
diff --git a/hospital/serializers.py b/hospital/serializers.py
new file mode 100644
index 0000000..0af7e24
--- /dev/null
+++ b/hospital/serializers.py
@@ -0,0 +1,37 @@
+from rest_framework import serializers
+from django.contrib.auth import get_user_model # If used custom user model
+from .models import customUser
+from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
+
+class UserSerializer(serializers.ModelSerializer):
+
+ password = serializers.CharField(write_only=True)
+ # website = serializers.CharField(write_only=True)
+
+ def create(self, validated_data):
+
+ user = customUser.objects.create_user(
+ username=validated_data['username'],
+ password=validated_data['password'],
+ website = validated_data['website'],
+ )
+
+ return user
+
+ class Meta:
+ model = customUser
+ # Tuple of serialized model fields (see link [2])
+ fields = ( "id", "username", "password", "website", "image" )
+
+
+class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
+ def validate(self, attrs):
+ data = super().validate(attrs)
+ refresh = self.get_token(self.user)
+ data['refresh'] = str(refresh)
+ data['access'] = str(refresh.access_token)
+
+ # Add extra responses here
+ data['id'] = self.user.id
+ data['username'] = self.user.username
+ return data
\ No newline at end of file
diff --git a/hospital/tests.py b/hospital/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/hospital/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/hospital/urls.py b/hospital/urls.py
new file mode 100644
index 0000000..3c54004
--- /dev/null
+++ b/hospital/urls.py
@@ -0,0 +1,10 @@
+# accounts/urls.py
+from django.urls import path
+from .views import CreateUserView, HospitalDetail
+from .views import CustomObtainAuthToken
+
+urlpatterns = [
+ path('signup/', CreateUserView.as_view(), name='signup'),
+ path("/", HospitalDetail.as_view(), name="hospital_detail"),
+ path('authenticate/', CustomObtainAuthToken.as_view())
+]
\ No newline at end of file
diff --git a/hospital/views.py b/hospital/views.py
new file mode 100644
index 0000000..7cefef0
--- /dev/null
+++ b/hospital/views.py
@@ -0,0 +1,27 @@
+from rest_framework import permissions
+from rest_framework.generics import CreateAPIView, RetrieveAPIView
+from django.contrib.auth import get_user_model # If used custom user model
+from .models import customUser
+from .serializers import UserSerializer
+from rest_framework_simplejwt.views import TokenObtainPairView
+from .serializers import MyTokenObtainPairSerializer
+
+
+
+
+class CustomObtainAuthToken(TokenObtainPairView):
+ serializer_class = MyTokenObtainPairSerializer
+
+class CreateUserView(CreateAPIView):
+ model = get_user_model()
+ permission_classes = [
+ permissions.AllowAny # Or anon users can't register
+ ]
+ serializer_class = UserSerializer
+
+class HospitalDetail(RetrieveAPIView):
+ queryset = customUser.objects.all()
+ serializer_class = UserSerializer
+ permission_classes = [
+ permissions.AllowAny # Or anon users can't register
+ ]
\ No newline at end of file
diff --git a/lifeshare/__init__.py b/lifeshare/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/lifeshare/asgi.py b/lifeshare/asgi.py
new file mode 100644
index 0000000..123b308
--- /dev/null
+++ b/lifeshare/asgi.py
@@ -0,0 +1,16 @@
+"""
+ASGI config for lifeshare project.
+
+It exposes the ASGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lifeshare.settings')
+
+application = get_asgi_application()
diff --git a/lifeshare/settings.py b/lifeshare/settings.py
new file mode 100644
index 0000000..941c2f8
--- /dev/null
+++ b/lifeshare/settings.py
@@ -0,0 +1,172 @@
+"""
+Django settings for lifeshare project.
+
+Generated by 'django-admin startproject' using Django 4.0.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.0/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/4.0/ref/settings/
+"""
+
+from pathlib import Path
+import environ
+# Build paths inside the project like this: BASE_DIR / 'subdir'.
+BASE_DIR = Path(__file__).resolve().parent.parent
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'django-insecure-y-*f%f49t3ffr)al-#hw&&_^ro3510@%&h69re5+dy@z-@y%z1'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+env = environ.Env(
+ DEBUG=(bool, False),
+ ENVIRONMENT=(str, "PRODUCTION"),
+ ALLOW_ALL_ORIGINS=(bool, False),
+ ALLOWED_HOSTS=(list, []),
+ ALLOWED_ORIGINS=(list, []),
+ DATABASE_ENGINE=(str, "django.db.backends.sqlite3"),
+ DATABASE_NAME=(str, BASE_DIR / "db.sqlite3"),
+ DATABASE_USER=(str, ""),
+ DATABASE_PASSWORD=(str, ""),
+ DATABASE_HOST=(str, ""),
+ DATABASE_PORT=(int, 5432),
+)
+
+ALLOWED_HOSTS = tuple(env.list("ALLOWED_HOSTS"))
+# Application definition
+
+INSTALLED_APPS = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ # 3rd party
+ "whitenoise.runserver_nostatic",
+ "rest_framework",
+ 'rest_framework_simplejwt',
+ "corsheaders",
+ ## local
+ 'blood_donating',
+ 'accounts',
+ 'hospital'
+]
+
+MIDDLEWARE = [
+ "django.middleware.security.SecurityMiddleware",
+ "corsheaders.middleware.CorsMiddleware",
+ "whitenoise.middleware.WhiteNoiseMiddleware",
+ "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",
+]
+
+ROOT_URLCONF = 'lifeshare.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [BASE_DIR/'templates'],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'lifeshare.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
+
+
+DATABASES = {
+ "default": {
+ "ENGINE": env.str("DATABASE_ENGINE"),
+ "NAME": env.str("DATABASE_NAME"),
+ "USER": env.str("DATABASE_USER"),
+ "PASSWORD": env.str("DATABASE_PASSWORD"),
+ "HOST": env.str("DATABASE_HOST"),
+ "PORT": env.int("DATABASE_PORT"),
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/4.0/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/4.0/howto/static-files/
+
+STATIC_URL = 'static/'
+
+STATIC_ROOT = BASE_DIR / 'staticfiles'
+STATICFILES_DIRS = [
+ BASE_DIR / 'static'
+]
+
+
+# Default primary key field type
+# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
+
+DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+
+REST_FRAMEWORK = {
+ 'DEFAULT_PERMISSION_CLASSES': [
+ 'rest_framework.permissions.IsAuthenticated',
+ ],
+ 'DEFAULT_AUTHENTICATION_CLASSES': [
+ 'rest_framework_simplejwt.authentication.JWTAuthentication',
+ 'rest_framework.authentication.BasicAuthentication',
+ 'rest_framework.authentication.SessionAuthentication'
+ ],
+}
+
+MEDIA_ROOT = BASE_DIR / 'uploads'
+MEDIA_URL = '/files/'
diff --git a/lifeshare/urls.py b/lifeshare/urls.py
new file mode 100644
index 0000000..779470f
--- /dev/null
+++ b/lifeshare/urls.py
@@ -0,0 +1,31 @@
+"""lifeshare URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/4.0/topics/http/urls/
+Examples:
+Function views
+ 1. Add an import: from my_app import views
+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
+Class-based views
+ 1. Add an import: from other_app.views import Home
+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
+Including another URLconf
+ 1. Import the include() function: from django.urls import include, path
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path, include
+from rest_framework_simplejwt import views as jwt_views
+from rest_framework_simplejwt.views import (
+ TokenObtainPairView,
+ TokenRefreshView,
+)
+
+urlpatterns = [
+ path('admin/', admin.site.urls),
+ path('api/v1/add/',include('accounts.urls')),
+ path('api/token/', jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'),
+ path('api/token/refresh/', jwt_views.TokenRefreshView.as_view(), name='token_refresh'),
+ path('hospital/', include('hospital.urls')),
+]
+
diff --git a/lifeshare/wsgi.py b/lifeshare/wsgi.py
new file mode 100644
index 0000000..4a094a4
--- /dev/null
+++ b/lifeshare/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for lifeshare project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lifeshare.settings')
+
+application = get_wsgi_application()
diff --git a/manage.py b/manage.py
new file mode 100755
index 0000000..3e7c243
--- /dev/null
+++ b/manage.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+ """Run administrative tasks."""
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lifeshare.settings')
+ try:
+ from django.core.management import execute_from_command_line
+ except ImportError as exc:
+ raise ImportError(
+ "Couldn't import Django. Are you sure it's installed and "
+ "available on your PYTHONPATH environment variable? Did you "
+ "forget to activate a virtual environment?"
+ ) from exc
+ execute_from_command_line(sys.argv)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 0000000..3918d60
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,334 @@
+[[package]]
+name = "asgiref"
+version = "3.4.1"
+description = "ASGI specs, helper code, and adapters"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"]
+
+[[package]]
+name = "django"
+version = "4.0"
+description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+
+[package.dependencies]
+asgiref = ">=3.4.1,<4"
+sqlparse = ">=0.2.2"
+tzdata = {version = "*", markers = "sys_platform == \"win32\""}
+
+[package.extras]
+argon2 = ["argon2-cffi (>=19.1.0)"]
+bcrypt = ["bcrypt"]
+
+[[package]]
+name = "django-cors-headers"
+version = "3.10.1"
+description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+Django = ">=2.2"
+
+[[package]]
+name = "django-environ"
+version = "0.8.1"
+description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application."
+category = "main"
+optional = false
+python-versions = ">=3.4,<4"
+
+[package.extras]
+develop = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)", "furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"]
+docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"]
+testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"]
+
+[[package]]
+name = "django-phone-field"
+version = "1.8.1"
+description = "Lightweight model and form field for phone numbers in Django"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+Django = ">=1.10"
+
+[[package]]
+name = "djangorestframework"
+version = "3.13.1"
+description = "Web APIs for Django, made easy."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+django = ">=2.2"
+pytz = "*"
+
+[[package]]
+name = "djangorestframework-simplejwt"
+version = "5.0.0"
+description = "A minimal JSON Web Token authentication plugin for Django REST Framework"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+django = "*"
+djangorestframework = "*"
+pyjwt = ">=2,<3"
+
+[package.extras]
+dev = ["pytest-watch", "wheel", "twine", "ipython", "cryptography", "pytest-cov", "pytest-django", "pytest-xdist", "pytest", "tox", "flake8", "pep8", "isort", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)", "python-jose (==3.0.0)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"]
+lint = ["flake8", "pep8", "isort"]
+python-jose = ["python-jose (==3.0.0)"]
+test = ["cryptography", "pytest-cov", "pytest-django", "pytest-xdist", "pytest", "tox"]
+
+[[package]]
+name = "gunicorn"
+version = "20.1.0"
+description = "WSGI HTTP Server for UNIX"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+eventlet = ["eventlet (>=0.24.1)"]
+gevent = ["gevent (>=1.4.0)"]
+setproctitle = ["setproctitle"]
+tornado = ["tornado (>=0.2)"]
+
+[[package]]
+name = "pillow"
+version = "8.4.0"
+description = "Python Imaging Library (Fork)"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "psycopg2-binary"
+version = "2.9.3"
+description = "psycopg2 - Python-PostgreSQL Database Adapter"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "pyjwt"
+version = "2.3.0"
+description = "JSON Web Token implementation in Python"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+crypto = ["cryptography (>=3.3.1)"]
+dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"]
+docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"]
+tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"]
+
+[[package]]
+name = "pytz"
+version = "2021.3"
+description = "World timezone definitions, modern and historical"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "sqlparse"
+version = "0.4.2"
+description = "A non-validating SQL parser."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "tzdata"
+version = "2021.5"
+description = "Provider of IANA time zone data"
+category = "main"
+optional = false
+python-versions = ">=2"
+
+[[package]]
+name = "whitenoise"
+version = "5.3.0"
+description = "Radically simplified static file serving for WSGI applications"
+category = "main"
+optional = false
+python-versions = ">=3.5, <4"
+
+[package.extras]
+brotli = ["brotli"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.9"
+content-hash = "2e4554106aa28e22d929a0dfcc8a39a99afd9dd4b95a87f7b8ab2f02b0ab54f9"
+
+
+[metadata.files]
+asgiref = [
+ {file = "asgiref-3.4.1-py3-none-any.whl", hash = "sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214"},
+ {file = "asgiref-3.4.1.tar.gz", hash = "sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9"},
+]
+django = [
+ {file = "Django-4.0-py3-none-any.whl", hash = "sha256:59304646ebc6a77b9b6a59adc67d51ecb03c5e3d63ed1f14c909cdfda84e8010"},
+ {file = "Django-4.0.tar.gz", hash = "sha256:d5a8a14da819a8b9237ee4d8c78dfe056ff6e8a7511987be627192225113ee75"},
+]
+django-cors-headers = [
+ {file = "django-cors-headers-3.10.1.tar.gz", hash = "sha256:b5a874b492bcad99f544bb76ef679472259eb41ee5644ca62d1a94ddb26b7f6e"},
+ {file = "django_cors_headers-3.10.1-py3-none-any.whl", hash = "sha256:1390b5846e9835b0911e2574409788af87cd9154246aafbdc8ec546c93698fe6"},
+]
+django-environ = [
+ {file = "django-environ-0.8.1.tar.gz", hash = "sha256:6f0bc902b43891656b20486938cba0861dc62892784a44919170719572a534cb"},
+ {file = "django_environ-0.8.1-py2.py3-none-any.whl", hash = "sha256:42593bee519a527602a467c7b682aee1a051c2597f98c45f4f4f44169ecdb6e5"},
+]
+django-phone-field = [
+ {file = "django-phone-field-1.8.1.tar.gz", hash = "sha256:db63af60fc3a3c66b9faa7e72bb7972cd1518299f2e93d68dd95d8df6214f7ed"},
+ {file = "django_phone_field-1.8.1-py3-none-any.whl", hash = "sha256:407e74b65e8f7dd14d0a0aa89e277516d57ad6a09ce992cdd94e15b1624b9961"},
+]
+djangorestframework = [
+ {file = "djangorestframework-3.13.1-py3-none-any.whl", hash = "sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa"},
+ {file = "djangorestframework-3.13.1.tar.gz", hash = "sha256:0c33407ce23acc68eca2a6e46424b008c9c02eceb8cf18581921d0092bc1f2ee"},
+]
+djangorestframework-simplejwt = [
+ {file = "djangorestframework_simplejwt-5.0.0-py3-none-any.whl", hash = "sha256:ddcbeef51155d1e71410dde44b581c7e04cfb74776f5337661ac3ef4c0c367e6"},
+ {file = "djangorestframework_simplejwt-5.0.0.tar.gz", hash = "sha256:30b10e7732395c44d21980f773214d2b9bdeadf2a6c6809cd1a7c9abe272873c"},
+]
+gunicorn = [
+ {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"},
+ {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"},
+]
+pillow = [
+ {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"},
+ {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"},
+ {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"},
+ {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"},
+ {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"},
+ {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"},
+ {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"},
+ {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"},
+ {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"},
+ {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"},
+ {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"},
+ {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"},
+ {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"},
+ {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"},
+ {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"},
+ {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"},
+ {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"},
+ {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"},
+ {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"},
+ {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"},
+ {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"},
+ {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"},
+ {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"},
+ {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"},
+ {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"},
+ {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"},
+ {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"},
+ {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"},
+ {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"},
+ {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"},
+ {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"},
+ {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"},
+ {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"},
+ {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"},
+ {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"},
+ {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"},
+ {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"},
+ {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"},
+ {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"},
+ {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"},
+ {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"},
+]
+psycopg2-binary = [
+ {file = "psycopg2-binary-2.9.3.tar.gz", hash = "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-win32.whl", hash = "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029"},
+ {file = "psycopg2_binary-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b"},
+ {file = "psycopg2_binary-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba"},
+ {file = "psycopg2_binary-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-win32.whl", hash = "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce"},
+ {file = "psycopg2_binary-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-win32.whl", hash = "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d"},
+ {file = "psycopg2_binary-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f"},
+]
+pyjwt = [
+ {file = "PyJWT-2.3.0-py3-none-any.whl", hash = "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f"},
+ {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"},
+]
+pytz = [
+ {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"},
+ {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"},
+]
+sqlparse = [
+ {file = "sqlparse-0.4.2-py3-none-any.whl", hash = "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d"},
+ {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"},
+]
+tzdata = [
+ {file = "tzdata-2021.5-py2.py3-none-any.whl", hash = "sha256:3eee491e22ebfe1e5cfcc97a4137cd70f092ce59144d81f8924a844de05ba8f5"},
+ {file = "tzdata-2021.5.tar.gz", hash = "sha256:68dbe41afd01b867894bbdfd54fa03f468cfa4f0086bfb4adcd8de8f24f3ee21"},
+]
+whitenoise = [
+ {file = "whitenoise-5.3.0-py2.py3-none-any.whl", hash = "sha256:d963ef25639d1417e8a247be36e6aedd8c7c6f0a08adcb5a89146980a96b577c"},
+ {file = "whitenoise-5.3.0.tar.gz", hash = "sha256:d234b871b52271ae7ed6d9da47ffe857c76568f11dd30e28e18c5869dbd11e12"},
+]
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..8843f9a
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,24 @@
+[tool.poetry]
+name = "lifeshare-back"
+version = "0.1.0"
+description = ""
+authors = ["Yahialabeeb "]
+
+[tool.poetry.dependencies]
+python = "^3.9"
+Django = "^4.0"
+djangorestframework = "^3.13.1"
+django-environ = "^0.8.1"
+psycopg2-binary = "^2.9.3"
+gunicorn = "^20.1.0"
+whitenoise = "^5.3.0"
+django-cors-headers = "^3.10.1"
+djangorestframework-simplejwt = "^5.0.0"
+django-phone-field = "^1.8.1"
+Pillow = "^8.4.0"
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
diff --git a/templates/base.html b/templates/base.html
new file mode 100644
index 0000000..ec94dd0
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ {% block title %}Django Auth Tutorial{% endblock %}
+
+
+
+ {% block content %}
+ {% endblock %}
+
+
+
\ No newline at end of file
diff --git a/templates/registration/signup.html b/templates/registration/signup.html
new file mode 100644
index 0000000..404a990
--- /dev/null
+++ b/templates/registration/signup.html
@@ -0,0 +1,13 @@
+
+{% extends 'base.html' %}
+
+{% block title %}Sign Up{% endblock %}
+
+{% block content %}
+ Sign up
+
+{% endblock %}
\ No newline at end of file
diff --git a/uploads/image/project.png b/uploads/image/project.png
new file mode 100644
index 0000000..989ad5a
Binary files /dev/null and b/uploads/image/project.png differ
diff --git a/uploads/image/project4.png b/uploads/image/project4.png
new file mode 100644
index 0000000..97c2286
Binary files /dev/null and b/uploads/image/project4.png differ
diff --git a/uploads/image/project4_KSixa58.png b/uploads/image/project4_KSixa58.png
new file mode 100644
index 0000000..97c2286
Binary files /dev/null and b/uploads/image/project4_KSixa58.png differ
diff --git a/uploads/image/project4_lymYvKO.png b/uploads/image/project4_lymYvKO.png
new file mode 100644
index 0000000..97c2286
Binary files /dev/null and b/uploads/image/project4_lymYvKO.png differ
diff --git a/uploads/image/yaseen.PNG b/uploads/image/yaseen.PNG
new file mode 100644
index 0000000..8828bf6
Binary files /dev/null and b/uploads/image/yaseen.PNG differ