diff --git a/sahara/db.sqlite3 b/sahara/db.sqlite3 index 08c69f9..33e0fb4 100644 Binary files a/sahara/db.sqlite3 and b/sahara/db.sqlite3 differ diff --git a/sahara/main/__pycache__/admin.cpython-312.pyc b/sahara/main/__pycache__/admin.cpython-312.pyc index 125b2d4..d43cfe6 100644 Binary files a/sahara/main/__pycache__/admin.cpython-312.pyc and b/sahara/main/__pycache__/admin.cpython-312.pyc differ diff --git a/sahara/main/__pycache__/forms.cpython-312.pyc b/sahara/main/__pycache__/forms.cpython-312.pyc index 4fb3138..9e091ac 100644 Binary files a/sahara/main/__pycache__/forms.cpython-312.pyc and b/sahara/main/__pycache__/forms.cpython-312.pyc differ diff --git a/sahara/main/__pycache__/models.cpython-312.pyc b/sahara/main/__pycache__/models.cpython-312.pyc index 1aff89d..eb99c66 100644 Binary files a/sahara/main/__pycache__/models.cpython-312.pyc and b/sahara/main/__pycache__/models.cpython-312.pyc differ diff --git a/sahara/main/__pycache__/urls.cpython-312.pyc b/sahara/main/__pycache__/urls.cpython-312.pyc index 5a051a8..2496d92 100644 Binary files a/sahara/main/__pycache__/urls.cpython-312.pyc and b/sahara/main/__pycache__/urls.cpython-312.pyc differ diff --git a/sahara/main/__pycache__/views.cpython-312.pyc b/sahara/main/__pycache__/views.cpython-312.pyc index 2f14f32..a00c760 100644 Binary files a/sahara/main/__pycache__/views.cpython-312.pyc and b/sahara/main/__pycache__/views.cpython-312.pyc differ diff --git a/sahara/main/admin.py b/sahara/main/admin.py index 9e6ec17..879e25a 100644 --- a/sahara/main/admin.py +++ b/sahara/main/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from django.contrib.auth.admin import UserAdmin -from .models import User,ServiceRequest # Import your custom User model +from .models import User,ServiceRequest,Service # Import your custom User model class CustomUserAdmin(UserAdmin): model = User @@ -17,7 +17,7 @@ class CustomUserAdmin(UserAdmin): # Fieldsets for the add and change forms in the admin fieldsets = ( (None, {'fields': ('email', 'password')}), - ('Personal Info', {'fields': ('first_name', 'last_name')}), + ('Personal Info', {'fields': ('first_name', 'last_name','profile','service_offered')}), ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser')}), ('Important Dates', {'fields': ('last_login',)}), # Remove 'date_joined' if it doesn't exist ) @@ -26,7 +26,7 @@ class CustomUserAdmin(UserAdmin): add_fieldsets = ( (None, { 'classes': ('wide',), - 'fields': ('email', 'first_name', 'last_name', 'password1', 'password2', 'is_staff', 'is_superuser', 'is_active'), + 'fields': ('email', 'first_name', 'last_name','profile','service_offered', 'password1', 'password2', 'is_staff', 'is_superuser', 'is_active'), }), ) @@ -35,4 +35,5 @@ class CustomUserAdmin(UserAdmin): # Register your custom User model with the custom UserAdmin class admin.site.register(User, CustomUserAdmin) -admin.site.register(ServiceRequest) \ No newline at end of file +admin.site.register(ServiceRequest) +admin.site.register(Service) \ No newline at end of file diff --git a/sahara/main/forms.py b/sahara/main/forms.py index 5f6afaf..acce591 100644 --- a/sahara/main/forms.py +++ b/sahara/main/forms.py @@ -2,7 +2,11 @@ from django import forms from django.contrib.auth.forms import AuthenticationForm from .models import User +from django import forms +from .models import User, Service + class UserRegistrationForm(forms.ModelForm): + # Password and confirm password fields with custom classes password = forms.CharField( widget=forms.PasswordInput(attrs={ 'class': 'form-control', @@ -18,7 +22,7 @@ class UserRegistrationForm(forms.ModelForm): class Meta: model = User - fields = ['first_name', 'last_name', 'email', 'password'] + fields = ['email', 'first_name', 'last_name', 'profile', 'price', 'bio', 'service_offered', 'login_profile'] widgets = { 'first_name': forms.TextInput(attrs={ 'class': 'form-control', @@ -32,8 +36,39 @@ class UserRegistrationForm(forms.ModelForm): 'class': 'form-control', 'placeholder': 'Enter your email address', }), + 'profile': forms.ClearableFileInput(attrs={ + 'class': 'form-control', + 'placeholder': 'Upload your profile image', + }), + 'bio': forms.Textarea(attrs={ + 'class': 'form-control', + 'placeholder': 'Enter your bio', + 'rows': 4, # You can customize the rows and columns as needed + }), + 'price': forms.NumberInput(attrs={ + 'class': 'form-control', + 'placeholder': 'Enter your price', + }), + 'service_offered': forms.Select(attrs={ + 'class': 'form-control', + }), + 'login_profile': forms.Select(attrs={ + 'class': 'form-control', + }), } + def clean(self): + cleaned_data = super().clean() + password = cleaned_data.get('password') + confirm_password = cleaned_data.get('confirm_password') + + # Check if passwords match + if password != confirm_password: + self.add_error('confirm_password', 'Passwords do not match') + + return cleaned_data + + def clean(self): cleaned_data = super().clean() password = cleaned_data.get('password') @@ -41,12 +76,3 @@ class UserRegistrationForm(forms.ModelForm): if password and confirm_password and password != confirm_password: raise forms.ValidationError("Passwords do not match.") - -class UserLoginForm(AuthenticationForm): - def __init__(self, *args, **kwargs): - self.request = kwargs.pop('request', None) - super(UserLoginForm, self).__init__(*args, **kwargs) - # Change the username field label and placeholder to 'Email' - self.fields['username'].label = 'Email' - self.fields['username'].widget.attrs.update({'placeholder': 'Enter your email'}) - self.fields['password'].widget.attrs.update({'placeholder': 'Enter your password'}) diff --git a/sahara/main/migrations/0004_user_service_offered.py b/sahara/main/migrations/0004_user_service_offered.py new file mode 100644 index 0000000..3b71748 --- /dev/null +++ b/sahara/main/migrations/0004_user_service_offered.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.4 on 2025-01-11 20:13 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0003_service_alter_user_bio_alter_user_price_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='service_offered', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.service'), + ), + ] diff --git a/sahara/main/migrations/0005_user_login_profile_alter_servicerequest_service_and_more.py b/sahara/main/migrations/0005_user_login_profile_alter_servicerequest_service_and_more.py new file mode 100644 index 0000000..faf1e2b --- /dev/null +++ b/sahara/main/migrations/0005_user_login_profile_alter_servicerequest_service_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 5.1.4 on 2025-01-12 01:26 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0004_user_service_offered'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='login_profile', + field=models.CharField(choices=[('NORMAL', 'Normal User'), ('SERVICE', 'Service Provider'), ('ADMIN', 'Admin User')], default='NORMAL', max_length=15), + ), + migrations.AlterField( + model_name='servicerequest', + name='service', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='service_offered', to='main.service'), + ), + migrations.AlterField( + model_name='user', + name='profile', + field=models.ImageField(blank=True, null=True, upload_to='profile-images/'), + ), + ] diff --git a/sahara/main/migrations/__pycache__/0004_user_service_offered.cpython-312.pyc b/sahara/main/migrations/__pycache__/0004_user_service_offered.cpython-312.pyc new file mode 100644 index 0000000..e7f596c Binary files /dev/null and b/sahara/main/migrations/__pycache__/0004_user_service_offered.cpython-312.pyc differ diff --git a/sahara/main/migrations/__pycache__/0005_user_login_profile_alter_servicerequest_service_and_more.cpython-312.pyc b/sahara/main/migrations/__pycache__/0005_user_login_profile_alter_servicerequest_service_and_more.cpython-312.pyc new file mode 100644 index 0000000..9e8b386 Binary files /dev/null and b/sahara/main/migrations/__pycache__/0005_user_login_profile_alter_servicerequest_service_and_more.cpython-312.pyc differ diff --git a/sahara/main/models.py b/sahara/main/models.py index fe61cac..257ba59 100644 --- a/sahara/main/models.py +++ b/sahara/main/models.py @@ -32,7 +32,6 @@ class UserManager(BaseUserManager): user.set_password(password) user.save(using=self._db) - # Send verification email try: self.send_verification_email(user) except: @@ -76,6 +75,12 @@ class UserManager(BaseUserManager): ) +OPTIONS = [ + ('NORMAL','Normal User'), + ('SERVICE', 'Service Provider'), + ('ADMIN', 'Admin User'), + ] + class User(AbstractBaseUser, PermissionsMixin): email = models.EmailField(unique=True) first_name = models.CharField(max_length=30) @@ -83,13 +88,19 @@ class User(AbstractBaseUser, PermissionsMixin): is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) - profile = models.ImageField(blank=True,null=True) + profile = models.ImageField(blank=True,null=True, upload_to="profile-images/") price = models.PositiveBigIntegerField(blank=True, null=True) bio = models.CharField(max_length=200, blank=True, null=True) member_since = models.DateTimeField(auto_now_add=True) updated_on = models.DateField(auto_now=True) + service_offered = models.ForeignKey(Service, on_delete=models.CASCADE,blank=True,null=True) + login_profile = models.CharField( + max_length=15, + choices=OPTIONS, + default='NORMAL', + ) USERNAME_FIELD = 'email' - REQUIRED_FIELDS = ['first_name', 'last_name'] + REQUIRED_FIELDS = ['first_name', 'last_name','price','bio'] objects = UserManager() @@ -112,7 +123,7 @@ class ServiceRequest(models.Model): remarks = models.TextField(blank=True, null=True) is_completed = models.BooleanField(default=False) completed_date = models.DateTimeField(null=True,blank=True) - service = models.ForeignKey(Service, on_delete=models.CASCADE, related_name="service") + service = models.ForeignKey(Service, on_delete=models.CASCADE, related_name="service_offered") def __str__(self): return self.service.name diff --git a/sahara/main/templates/main/home.html b/sahara/main/templates/main/home.html index c2af0db..0a76e01 100644 --- a/sahara/main/templates/main/home.html +++ b/sahara/main/templates/main/home.html @@ -1,63 +1,152 @@ {% extends 'base.html' %} +{% load static %} {% block content %} - - - - - - Login Form - - - - -
-
-

Login

-
- {% csrf_token %} -
- - -
-
- - +
+
+

Welcome to Sahara

+

Your one-stop platform for elder care services.

+
+
+ + + +
+
+
+
+

Services

+ +

Price

+ + +

+ Price: Rs.100.00 + (1.00x) +

-
-
- - +
+ +
+

Available Caretakers

+
+ + {% for user in service_providers %} +
+
+ {% if user.profile %} + {{ user.first_name }} {{ user.last_name }}'s Image + {% else %} + Avatar Image + {% endif %} + +
+
{{ user.first_name|capfirst }} {{ user.last_name|capfirst }}
+

Bio: {{ user.bio }}

+

Member Since: {{ user.member_since|date:"F j, Y" }}

+
+

Rs. {{ user.price|floatformat:2 }}

+ + +
+
+
- Forgot password? + {% empty %} +
Oops! No Caretaker Found Currently.
+ {% endfor %} +
- - +
+
+
+ + + - - - + + -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/sahara/main/templates/main/register.html b/sahara/main/templates/main/register.html index 32a26b4..8cbc3d9 100644 --- a/sahara/main/templates/main/register.html +++ b/sahara/main/templates/main/register.html @@ -3,34 +3,131 @@ {% block content %}

Register

-
+ {% csrf_token %} -
+ +
{{ form.first_name }} + {% if form.first_name.errors %} +
+ {% for error in form.first_name.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %}
-
+ +
{{ form.last_name }} + {% if form.last_name.errors %} +
+ {% for error in form.last_name.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %}
-
- - {{ form.username }} -
-
+ +
{{ form.email }} + {% if form.email.errors %} +
+ {% for error in form.email.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %}
-
+ +
{{ form.password }} + {% if form.password.errors %} +
+ {% for error in form.password.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %}
-
+ +
{{ form.confirm_password }} + {% if form.confirm_password.errors %} +
+ {% for error in form.confirm_password.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %} +
+ +
+ + {{ form.profile }} + {% if form.profile.errors %} +
+ {% for error in form.profile.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %} +
+ +
+ + {{ form.price }} + {% if form.price.errors %} +
+ {% for error in form.price.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %} +
+ +
+ + {{ form.bio }} + {% if form.bio.errors %} +
+ {% for error in form.bio.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %} +
+ +
+ + {{ form.service_offered }} + {% if form.service_offered.errors %} +
+ {% for error in form.service_offered.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %} +
+ +
+ + {{ form.login_profile }} + {% if form.login_profile.errors %} +
+ {% for error in form.login_profile.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %}
+

Already have an account? Login here.

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/sahara/main/views.py b/sahara/main/views.py index 8a07b40..67d52db 100644 --- a/sahara/main/views.py +++ b/sahara/main/views.py @@ -1,22 +1,37 @@ -from django.shortcuts import render, redirect,HttpResponse +from django.shortcuts import render, redirect,HttpResponse,get_list_or_404 from django.contrib.auth import login, logout, authenticate from django.contrib.auth.tokens import default_token_generator from django.utils.http import urlsafe_base64_decode from django.contrib.auth.decorators import login_required from django.contrib import messages -from .models import User -from .forms import UserRegistrationForm, UserLoginForm +from .models import User,Service +from .forms import UserRegistrationForm import logging logger = logging.getLogger('main') def home(request): - return render(request,"main/home.html") + category = request.GET.get('category') + services = Service.objects.all() + if category: + try: + service = Service.objects.get(id=category) + service_providers = User.objects.filter(service_offered=service) + except Service.DoesNotExist: + service_providers = [] + else: + service_providers = User.objects.filter(service_offered__isnull=False) + + context = { + 'service_providers': service_providers, + 'services': services + } + return render(request, "main/home.html", context) def register(request): - if request.method == 'POST': - form = UserRegistrationForm(request.POST) + if request.method == 'POST' and request.FILES: + form = UserRegistrationForm(request.POST,request.FILES, instance=request.user) if form.is_valid(): user = form.save(commit=False) user.set_password(form.cleaned_data['password']) @@ -27,11 +42,12 @@ def register(request): messages.success(request, 'Registration successful! Please check your email to activate your account.') except Exception as e: logger.error(f"Error sending verification email: {e}") - messages.error(request, 'Error sending verification email. Please try again later.') + messages.error(request, e) return redirect('login') else: form = UserRegistrationForm() + messages.error(request, 'email already exists') return render(request, 'main/register.html', {'form': form}) def activate_account(request, uidb64, token): @@ -54,17 +70,17 @@ def user_login(request): print(request.user.is_authenticated) if request.user.is_authenticated: return redirect('home') - - if request.method == 'POST': - email = request.POST['email'] - password = request.POST['password'] - user = authenticate(request, email = email, password = password) - if user is not None: - form = login(request, user) - messages.success(request, f' welcome {user} !!') - return redirect('home') + else: + if request.method == 'POST': + email = request.POST['email'] + password = request.POST['password'] + user = authenticate(request, email = email, password = password) + if user is not None: + form = login(request, user) + messages.success(request, f' welcome {user} !!') + return redirect('home') else: - messages.info(request, f'account done not exit plz sign in') + messages.info(request, f'Something went wrong') messages.info(request, f'You are Already Logged in as {request.user}') return render(request, 'main/login.html', {'title':'log in'}) diff --git a/sahara/media/127266331_1064740373976536_6156792533421165886_n.jpg b/sahara/media/127266331_1064740373976536_6156792533421165886_n.jpg new file mode 100644 index 0000000..70d9581 Binary files /dev/null and b/sahara/media/127266331_1064740373976536_6156792533421165886_n.jpg differ diff --git a/sahara/media/profile-images/Screenshot_2024-07-17_085055.png b/sahara/media/profile-images/Screenshot_2024-07-17_085055.png new file mode 100644 index 0000000..f36fd16 Binary files /dev/null and b/sahara/media/profile-images/Screenshot_2024-07-17_085055.png differ diff --git a/sahara/media/profile-images/Screenshot_2024-07-17_085055_9Hzrf4D.png b/sahara/media/profile-images/Screenshot_2024-07-17_085055_9Hzrf4D.png new file mode 100644 index 0000000..f36fd16 Binary files /dev/null and b/sahara/media/profile-images/Screenshot_2024-07-17_085055_9Hzrf4D.png differ diff --git a/sahara/sahara/__pycache__/settings.cpython-312.pyc b/sahara/sahara/__pycache__/settings.cpython-312.pyc index 566c17c..ec419d3 100644 Binary files a/sahara/sahara/__pycache__/settings.cpython-312.pyc and b/sahara/sahara/__pycache__/settings.cpython-312.pyc differ diff --git a/sahara/sahara/__pycache__/urls.cpython-312.pyc b/sahara/sahara/__pycache__/urls.cpython-312.pyc index aa562e2..b87b6c0 100644 Binary files a/sahara/sahara/__pycache__/urls.cpython-312.pyc and b/sahara/sahara/__pycache__/urls.cpython-312.pyc differ diff --git a/sahara/sahara/settings.py b/sahara/sahara/settings.py index 59b1e40..2b3cdbd 100644 --- a/sahara/sahara/settings.py +++ b/sahara/sahara/settings.py @@ -118,8 +118,6 @@ USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.1/howto/static-files/ -STATIC_URL = 'static/' - # Default primary key field type # https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field @@ -134,8 +132,6 @@ EMAIL_PORT = 587 EMAIL_HOST_USER = os.environ.get("EMAIL_ADDRESS") EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_PASSWORD") -STATIC_URL = 'static/' - # Default primary key field type # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field @@ -144,8 +140,11 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' AUTH_USER_MODEL = 'main.User' -STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'static') +STATIC_URL = 'static/' +STATICFILES_DIRS = [ + BASE_DIR / "static", +] +STATIC_ROOT = BASE_DIR / "staticfiles" MEDIA_URL = '/media/' -MEDIA_ROOT = os.path.join(BASE_DIR, 'media') +MEDIA_ROOT = BASE_DIR / "static" diff --git a/sahara/sahara/urls.py b/sahara/sahara/urls.py index 83e71c3..2b394f8 100644 --- a/sahara/sahara/urls.py +++ b/sahara/sahara/urls.py @@ -1,7 +1,13 @@ from django.contrib import admin -from django.urls import path, include +from django.urls import path,include +from django.conf import settings +from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), path('', include('main.urls')), -] \ No newline at end of file +] + + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/sahara/static/css/styles.css b/sahara/static/css/styles.css new file mode 100644 index 0000000..db25951 --- /dev/null +++ b/sahara/static/css/styles.css @@ -0,0 +1,144 @@ +body { + background-color:#ffffff; +} +.navbar .navbar-brand { + margin-right: auto; +} +.navbar .nav { + margin: 0 auto; + text-align: center; +} +.navbar .login { + margin-left: auto; +} +.search-bar { + margin-top: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.search-bar input { + width: 50%; + border-radius: 50px; +} +.profile-card { + border: 1px solid #ddd; + border-radius: 10px; + overflow: hidden; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} +.profile-card:hover { + transform: translateY(-10px); + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); +} +.profile-card img { + width: 100%; + height: 200px; + object-fit: cover; + object-position: 10%; +} +.profile-card .card-body { + padding: 15px; +} +.profile-card .card-title { + font-size: 1.25rem; + font-weight: bold; + margin-bottom: 10px; +} +.profile-card .card-text { + font-size: 0.9rem; + color: #555; +} +.profile-card .price { + font-size: 1.1rem; + font-weight: bold; + color: #007bff; +} +.profile-card .availability { + font-size: 0.9rem; + color: #28a745; +} + +.category-bar { + background-color: #f8f9fa; /* Light background */ + padding: 20px; + border-radius: 10px; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); /* Subtle shadow */ +} + +.category-bar h4 { + font-size: 1.25rem; + font-weight: bold; + margin-bottom: 15px; + color: #333; +} + +.category-bar ul { + padding-left: 0; +} + +.category-bar .category-link { + display: block; + padding: 10px 15px; + margin: 5px 0; + color: #555; + text-decoration: none; + border-radius: 5px; + transition: background-color 0.3s ease, color 0.3s ease; +} + +.category-bar .category-link:hover { + background-color: #007bff; /* Highlight on hover */ + color: #fff; +} + +/* odd */ +.form-container { + font-family: Arial, sans-serif; + margin: auto; + padding: 30px; + background: rgba(255, 255, 255, 0.9); + border-radius: 8px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + width: 600px; +} +.form-container h2 { + margin-bottom: 20px; +} +.form-group { + margin-bottom: 15px; +} +.form-group label { + display: block; + margin-bottom: 5px; +} +.form-group input, +.form-group textarea, +.form-group select { + width: 100%; + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; +} +.form-group input[type="file"] { + padding: 5px; +} +.form-group button { + width: 100%; + padding: 10px; + background-color: #007BFF; + color: #fff; + border: none; + border-radius: 5px; + cursor: pointer; +} +.form-group button:hover { + background-color: #0056b3; +} +.form-wrapper { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; + background: url('img/backgroung-form.jpg') no-repeat center center/cover; +} \ No newline at end of file diff --git a/sahara/static/img/backgroung-form.jpg b/sahara/static/img/backgroung-form.jpg new file mode 100644 index 0000000..8c8422c Binary files /dev/null and b/sahara/static/img/backgroung-form.jpg differ diff --git a/sahara/static/img/dummypic.png b/sahara/static/img/dummypic.png new file mode 100644 index 0000000..fd85231 Binary files /dev/null and b/sahara/static/img/dummypic.png differ diff --git a/sahara/static/img/logofinal.png b/sahara/static/img/logofinal.png new file mode 100644 index 0000000..691b2f1 Binary files /dev/null and b/sahara/static/img/logofinal.png differ diff --git a/sahara/static/img/pic1.jpg b/sahara/static/img/pic1.jpg new file mode 100644 index 0000000..bfbb2b8 Binary files /dev/null and b/sahara/static/img/pic1.jpg differ diff --git a/sahara/static/profile-images/127266331_1064740373976536_6156792533421165886_n.jpg b/sahara/static/profile-images/127266331_1064740373976536_6156792533421165886_n.jpg new file mode 100644 index 0000000..70d9581 Binary files /dev/null and b/sahara/static/profile-images/127266331_1064740373976536_6156792533421165886_n.jpg differ diff --git a/sahara/static/profile-images/Screenshot_2024-07-17_085055.png b/sahara/static/profile-images/Screenshot_2024-07-17_085055.png new file mode 100644 index 0000000..f36fd16 Binary files /dev/null and b/sahara/static/profile-images/Screenshot_2024-07-17_085055.png differ diff --git a/sahara/static/profile-images/Screenshot_2024-08-12_071545.png b/sahara/static/profile-images/Screenshot_2024-08-12_071545.png new file mode 100644 index 0000000..7138cdc Binary files /dev/null and b/sahara/static/profile-images/Screenshot_2024-08-12_071545.png differ diff --git a/sahara/templates/base.html b/sahara/templates/base.html index 6afacda..4df818a 100644 --- a/sahara/templates/base.html +++ b/sahara/templates/base.html @@ -1,3 +1,4 @@ +{% load static %} @@ -5,12 +6,13 @@ Sahara - + +
+
+ {% for message in messages %} + + {% endfor %} +
+ {% block content %}