From f7cbe1601d8d8e5c788893d0d139bb0a44507c23 Mon Sep 17 00:00:00 2001 From: M7mdQash Date: Sat, 4 Apr 2026 21:16:12 +0300 Subject: [PATCH 1/7] did lab fully --- LabProject/LabProject/__init__.py | 0 LabProject/LabProject/asgi.py | 16 + LabProject/LabProject/settings.py | 118 +++++ LabProject/LabProject/urls.py | 23 + LabProject/LabProject/wsgi.py | 16 + LabProject/mainApp/__init__.py | 0 LabProject/mainApp/admin.py | 3 + LabProject/mainApp/apps.py | 5 + LabProject/mainApp/migrations/__init__.py | 0 LabProject/mainApp/models.py | 3 + LabProject/mainApp/static/css/style.css | 474 ++++++++++++++++++ LabProject/mainApp/static/images/camera.png | Bin 0 -> 7604 bytes .../mainApp/static/images/google-logo.png | Bin 0 -> 13504 bytes .../mainApp/static/images/mircophone.png | Bin 0 -> 7737 bytes .../static/images/tos_main_illustration.svg | 1 + .../mainApp/static/text/termsOfService.rtf | 70 +++ .../mainApp/templates/mainApp/base.html | 18 + .../mainApp/templates/mainApp/home.html | 75 +++ .../mainApp/templates/mainApp/terms.html | 139 +++++ LabProject/mainApp/tests.py | 3 + LabProject/mainApp/urls.py | 9 + LabProject/mainApp/views.py | 10 + LabProject/manage.py | 22 + 23 files changed, 1005 insertions(+) create mode 100644 LabProject/LabProject/__init__.py create mode 100644 LabProject/LabProject/asgi.py create mode 100644 LabProject/LabProject/settings.py create mode 100644 LabProject/LabProject/urls.py create mode 100644 LabProject/LabProject/wsgi.py create mode 100644 LabProject/mainApp/__init__.py create mode 100644 LabProject/mainApp/admin.py create mode 100644 LabProject/mainApp/apps.py create mode 100644 LabProject/mainApp/migrations/__init__.py create mode 100644 LabProject/mainApp/models.py create mode 100644 LabProject/mainApp/static/css/style.css create mode 100644 LabProject/mainApp/static/images/camera.png create mode 100644 LabProject/mainApp/static/images/google-logo.png create mode 100644 LabProject/mainApp/static/images/mircophone.png create mode 100644 LabProject/mainApp/static/images/tos_main_illustration.svg create mode 100644 LabProject/mainApp/static/text/termsOfService.rtf create mode 100644 LabProject/mainApp/templates/mainApp/base.html create mode 100644 LabProject/mainApp/templates/mainApp/home.html create mode 100644 LabProject/mainApp/templates/mainApp/terms.html create mode 100644 LabProject/mainApp/tests.py create mode 100644 LabProject/mainApp/urls.py create mode 100644 LabProject/mainApp/views.py create mode 100755 LabProject/manage.py diff --git a/LabProject/LabProject/__init__.py b/LabProject/LabProject/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/LabProject/LabProject/asgi.py b/LabProject/LabProject/asgi.py new file mode 100644 index 0000000..fc3e1a4 --- /dev/null +++ b/LabProject/LabProject/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for LabProject 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/6.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'LabProject.settings') + +application = get_asgi_application() diff --git a/LabProject/LabProject/settings.py b/LabProject/LabProject/settings.py new file mode 100644 index 0000000..de2be91 --- /dev/null +++ b/LabProject/LabProject/settings.py @@ -0,0 +1,118 @@ +""" +Django settings for LabProject project. + +Generated by 'django-admin startproject' using Django 6.0.3. + +For more information on this file, see +https://docs.djangoproject.com/en/6.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/6.0/ref/settings/ +""" + +from pathlib import Path + +# 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/6.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-c&1eu(5ie_z#zv!f9)b+tq)m3l$6_55o0*h&u*i057)$!y!56q' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'mainApp', +] + +MIDDLEWARE = [ + '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', +] + +ROOT_URLCONF = 'LabProject.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'LabProject.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/6.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/6.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/6.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/6.0/howto/static-files/ + +STATIC_URL = 'static/' diff --git a/LabProject/LabProject/urls.py b/LabProject/LabProject/urls.py new file mode 100644 index 0000000..c5dee38 --- /dev/null +++ b/LabProject/LabProject/urls.py @@ -0,0 +1,23 @@ +""" +URL configuration for LabProject project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/6.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 + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('mainApp.urls')), +] diff --git a/LabProject/LabProject/wsgi.py b/LabProject/LabProject/wsgi.py new file mode 100644 index 0000000..20ee972 --- /dev/null +++ b/LabProject/LabProject/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for LabProject 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/6.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'LabProject.settings') + +application = get_wsgi_application() diff --git a/LabProject/mainApp/__init__.py b/LabProject/mainApp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/LabProject/mainApp/admin.py b/LabProject/mainApp/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/LabProject/mainApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/LabProject/mainApp/apps.py b/LabProject/mainApp/apps.py new file mode 100644 index 0000000..d675b6a --- /dev/null +++ b/LabProject/mainApp/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MainappConfig(AppConfig): + name = 'mainApp' diff --git a/LabProject/mainApp/migrations/__init__.py b/LabProject/mainApp/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/LabProject/mainApp/models.py b/LabProject/mainApp/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/LabProject/mainApp/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/LabProject/mainApp/static/css/style.css b/LabProject/mainApp/static/css/style.css new file mode 100644 index 0000000..091f8f0 --- /dev/null +++ b/LabProject/mainApp/static/css/style.css @@ -0,0 +1,474 @@ +/* ============================================================ + Base + ============================================================ */ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: 'Roboto', Arial, sans-serif; + font-size: 14px; + color: #202124; + background: #fff; +} + +a { + color: #1a0dab; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +.material-symbols-outlined { + font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24; + vertical-align: middle; +} + +/* ============================================================ + Icon button (shared) + ============================================================ */ +.icon-btn { + background: none; + border: none; + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 50%; + padding: 8px; + color: #5f6368; +} + +.icon-btn:hover { + background: #f1f3f4; +} + +/* ============================================================ + HOME PAGE + ============================================================ */ +.home-wrapper { + display: flex; + flex-direction: column; + min-height: 100vh; +} + +/* Top nav */ +.top-nav { + display: flex; + justify-content: flex-end; + align-items: center; + padding: 6px 16px; +} + +.top-nav-links { + display: flex; + align-items: center; + gap: 4px; +} + +.top-nav-links a { + color: #202124; + font-size: 13px; + padding: 8px; +} + +.top-nav-links a:hover { + text-decoration: underline; +} + +.signin-btn { + background: #1a73e8; + color: #fff !important; + border-radius: 4px; + padding: 8px 16px !important; + font-size: 14px !important; + font-weight: 500; + text-decoration: none !important; + margin-left: 8px; +} + +.signin-btn:hover { + background: #1765cc; + text-decoration: none !important; +} + +/* Center / main */ +.home-main { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding-bottom: 80px; +} + +.logo-container { + margin-bottom: 28px; +} + +.google-logo { + width: 272px; + height: auto; +} + +/* Search form */ +.search-form { + display: flex; + flex-direction: column; + align-items: center; + gap: 20px; + width: 100%; + max-width: 584px; +} + +.search-bar { + display: flex; + align-items: center; + width: 100%; + border: 1px solid #dfe1e5; + border-radius: 24px; + padding: 6px 14px; + height: 44px; + box-shadow: none; + transition: box-shadow 0.2s, border-color 0.2s; +} + +.search-bar:hover, +.search-bar:focus-within { + box-shadow: 0 1px 6px rgba(32, 33, 36, 0.28); + border-color: rgba(223, 225, 229, 0); +} + +.search-icon { + color: #9aa0a6; + font-size: 20px; + margin-right: 8px; + flex-shrink: 0; +} + +.search-input { + flex: 1; + border: none; + outline: none; + font-size: 16px; + font-family: 'Roboto', Arial, sans-serif; + color: #202124; + background: transparent; +} + +.search-bar-icons { + display: flex; + align-items: center; + gap: 4px; +} + +.bar-icon { + width: 24px; + height: 24px; + object-fit: contain; +} + +/* Search buttons */ +.search-buttons { + display: flex; + gap: 12px; +} + +.search-btn { + background: #f8f9fa; + border: 1px solid #f8f9fa; + border-radius: 4px; + color: #3c4043; + font-size: 14px; + font-family: 'Roboto', Arial, sans-serif; + padding: 0 16px; + height: 36px; + cursor: pointer; + white-space: nowrap; +} + +.search-btn:hover { + box-shadow: 0 1px 1px rgba(0,0,0,0.1); + background: #f1f3f4; + border-color: #f1f3f4; +} + +/* Language line */ +.language-line { + font-size: 13px; + color: #202124; + margin-top: 4px; +} + +.language-line a { + color: #1a0dab; + margin-left: 6px; +} + +/* Footer */ +.home-footer { + border-top: 1px solid #e4e5e7; + background: #f2f2f2; + font-size: 13px; + color: #70757a; +} + +.footer-top { + padding: 13px 24px; + border-bottom: 1px solid #e4e5e7; +} + +.footer-bottom { + display: flex; + justify-content: space-between; + padding: 10px 24px; +} + +.footer-left, +.footer-right { + display: flex; + gap: 24px; +} + +.footer-left a, +.footer-right a { + color: #70757a; + font-size: 13px; +} + +.footer-left a:hover, +.footer-right a:hover { + text-decoration: underline; +} + +/* ============================================================ + TERMS OF SERVICE PAGE + ============================================================ */ +.terms-wrapper { + display: flex; + flex-direction: column; + min-height: 100vh; +} + +/* Header */ +.terms-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 24px; + border-bottom: 1px solid #e8eaed; + position: sticky; + top: 0; + background: #fff; + z-index: 100; +} + +.terms-header-left { + display: flex; + align-items: center; +} + +.terms-logo { + width: 92px; + height: auto; +} + +.terms-header-right { + display: flex; + align-items: center; + gap: 12px; +} + +.terms-search-bar { + display: flex; + align-items: center; + gap: 8px; + border: 1px solid #dfe1e5; + border-radius: 24px; + padding: 6px 16px; + height: 38px; + width: 280px; +} + +.terms-search-bar span { + color: #9aa0a6; + font-size: 20px; +} + +.terms-search-bar input { + border: none; + outline: none; + font-size: 14px; + font-family: 'Roboto', Arial, sans-serif; + background: transparent; + color: #202124; + width: 100%; +} + +.terms-header-right .icon-btn .material-symbols-outlined { + font-size: 32px; + color: #5f6368; +} + +/* Full-page layout: sidebar at the far left, main area fills the rest */ +.terms-page-layout { + display: flex; + flex: 1; +} + +/* Sidebar — sits at the absolute left edge of the page */ +.terms-sidebar { + width: 220px; + flex-shrink: 0; + padding: 32px 16px 32px 24px; + border-right: 1px solid #e8eaed; + position: sticky; + top: 57px; /* clears the sticky header */ + align-self: flex-start; + max-height: calc(100vh - 57px); + overflow-y: auto; +} + +/* Right-side column: tabs + scrollable content */ +.terms-main { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +/* Tab navigation */ +.terms-tabs { + display: flex; + gap: 0; + border-bottom: 1px solid #e8eaed; + padding: 0 24px; + position: sticky; + top: 57px; + background: #fff; + z-index: 90; +} + +.tab-link { + color: #5f6368; + font-weight: 500; + padding: 14px 20px; + border-bottom: 3px solid transparent; + letter-spacing: 0.01em; + text-transform: uppercase; + font-size: 12px; +} + +.tab-link:hover { + color: #1a73e8; + text-decoration: none; + background: #f8f9fa; +} + +.tab-active { + color: #1a73e8; + border-bottom-color: #1a73e8; +} + +/* Content area */ +.terms-body { + padding: 40px 24px; +} + +.terms-sidebar ul { + list-style: none; + padding: 0; +} + +.terms-sidebar > ul > li { + margin-bottom: 8px; +} + +.terms-sidebar ul ul { + padding-left: 16px; + margin-top: 6px; +} + +.terms-sidebar ul ul li { + margin-bottom: 6px; +} + +.terms-sidebar a { + color: #202124; + font-size: 13px; + line-height: 1.6; +} + +.terms-sidebar a:hover { + color: #1a73e8; +} + +/* Content */ +.terms-content { + flex: 1; + max-width: 780px; +} + +.terms-illustration { + margin-bottom: 40px; +} + +.terms-illustration img { + max-width: 100%; + height: auto; +} + +.terms-content h1 { + font-size: 32px; + font-weight: 400; + color: #202124; + margin-bottom: 16px; +} + +.terms-meta { + font-size: 14px; + color: #5f6368; + margin-bottom: 8px; +} + +.terms-meta a { + color: #1a0dab; +} + +.terms-content section { + margin-top: 40px; +} + +.terms-content h2 { + font-size: 22px; + font-weight: 400; + color: #202124; + margin-bottom: 16px; +} + +.terms-content p { + font-size: 15px; + line-height: 1.7; + color: #3c4043; + margin-bottom: 16px; +} + +.terms-content ul { + padding-left: 28px; + margin-bottom: 16px; +} + +.terms-content ul li { + font-size: 15px; + line-height: 1.7; + color: #3c4043; + margin-bottom: 10px; +} + +.terms-content a { + color: #1a0dab; +} diff --git a/LabProject/mainApp/static/images/camera.png b/LabProject/mainApp/static/images/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..4ecc70532054bba37a5c170f098176e6f4781889 GIT binary patch literal 7604 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 literal 0 HcmV?d00001 diff --git a/LabProject/mainApp/static/images/tos_main_illustration.svg b/LabProject/mainApp/static/images/tos_main_illustration.svg new file mode 100644 index 0000000..883e2d6 --- /dev/null +++ b/LabProject/mainApp/static/images/tos_main_illustration.svg @@ -0,0 +1 @@ +scene_password_manager_welcome diff --git a/LabProject/mainApp/static/text/termsOfService.rtf b/LabProject/mainApp/static/text/termsOfService.rtf new file mode 100644 index 0000000..6cbe1e0 --- /dev/null +++ b/LabProject/mainApp/static/text/termsOfService.rtf @@ -0,0 +1,70 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2709 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Arial-BoldMT;\f1\fswiss\fcharset0 ArialMT;} +{\colortbl;\red255\green255\blue255;\red24\green25\blue27;\red255\green255\blue255;\red19\green0\blue155; +} +{\*\expandedcolortbl;;\cssrgb\c12549\c12941\c14118;\cssrgb\c100000\c100000\c100000;\cssrgb\c10196\c5098\c67059; +} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} +\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0 +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\b\fs48 \cf2 \cb3 \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec2 Google Terms of Service\ +\pard\pardeftab720\sa280\partightenfactor0 + +\f1\b0\fs28 \cf2 Effective 5 January 2022\'a0|\'a0{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms/archive?hl=en-SA&fg=1"}}{\fldrslt \cf4 \strokec4 Archived versions}}\'a0|\'a0{\field{\*\fldinst{HYPERLINK "https://www.gstatic.com/policies/terms/pdf/20220105/it7r24p9/google_terms_of_service_en-GB.pdf"}}{\fldrslt \cf4 \strokec4 Download PDF}}\ +\pard\pardeftab720\sa280\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#footnote-country-version"}}{\fldrslt \cf4 \strokec4 Country version:}}\'a0Saudi Arabia\ +\pard\pardeftab720\partightenfactor0 +\cf2 \ +\pard\pardeftab720\sa298\partightenfactor0 + +\f0\b\fs36 \cf2 What\'92s covered in these terms\ +\pard\pardeftab720\sa280\partightenfactor0 + +\fs28 \cf2 We know it\'92s tempting to skip these Terms of Service, but it\'92s important to establish what you can expect from us as you use Google\'a0{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#footnote-services"}}{\fldrslt \cf4 \strokec4 services}}, and what we expect from you.\ +\pard\pardeftab720\sa280\partightenfactor0 + +\f1\b0 \cf2 These Terms of Service reflect\'a0{\field{\*\fldinst{HYPERLINK "https://about.google/intl/en-GB_SA/how-our-business-works"}}{\fldrslt \cf4 \strokec4 the way that Google\'92s business works}}, the laws that apply to our company, and\'a0{\field{\*\fldinst{HYPERLINK "https://www.google.com/about/philosophy.html?hl=en_GB"}}{\fldrslt \cf4 \strokec4 certain things that we\'92ve always believed to be true}}. As a result, these Terms of Service help define Google\'92s relationship with you as you interact with our services. For example, these terms include the following topic headings:\ +\pard\tx220\tx720\pardeftab720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf4 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \uc0\u8226 }{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#toc-what-you-expect"}}{\fldrslt \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec4 What you can expect from us}}\cf2 \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec2 , which describes how we provide and develop our services\cb1 \ +\ls1\ilvl0\cf4 \cb3 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \uc0\u8226 }{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#toc-what-we-expect"}}{\fldrslt \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec4 What we expect from you}}\cf2 \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec2 , which establishes certain rules for using our services\cb1 \ +\ls1\ilvl0\cf4 \cb3 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \uc0\u8226 }{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#toc-content"}}{\fldrslt \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec4 Content in Google services}}\cf2 \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec2 , which describes the intellectual property rights to the content that you find in our services \'96 whether that content belongs to you, Google or others\cb1 \ +\ls1\ilvl0\cf4 \cb3 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \uc0\u8226 }{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#toc-problems"}}{\fldrslt \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec4 In case of problems or disagreements}}\cf2 \expnd0\expndtw0\kerning0 +\outl0\strokewidth0 \strokec2 , which describes other legal rights that you have, and what to expect in case someone violates these terms.\cb1 \ +\pard\pardeftab720\sa280\partightenfactor0 +\cf2 \cb3 Understanding these terms is important because, by using our services, you\'92re agreeing to these terms.\ +Besides these terms, we also publish a\'a0{\field{\*\fldinst{HYPERLINK "https://www.google.com/privacy?hl=en-SA&fg=1"}}{\fldrslt \cf4 \strokec4 Privacy Policy}}. Although it\'92s not part of these terms, we encourage you to read it to better understand how you can\'a0{\field{\*\fldinst{HYPERLINK "https://myaccount.google.com/?hl=en_GB"}}{\fldrslt \cf4 \strokec4 update, manage, export and delete your information}}.\ +\pard\pardeftab720\partightenfactor0 + +\f0\b\fs48 \cf2 Terms\ +\pard\pardeftab720\partightenfactor0 + +\f1\b0\fs28 \cf2 \ +\pard\pardeftab720\sa298\partightenfactor0 + +\f0\b\fs36 \cf2 Service provider\ +\pard\pardeftab720\sa280\partightenfactor0 + +\f1\b0\fs28 \cf2 Google\'a0{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#footnote-services"}}{\fldrslt \cf4 \strokec4 services}}\'a0are provided by, and you\'92re contracting with:\ +Google LLC\cb1 \uc0\u8232 \cb3 organised under the laws of the State of Delaware, USA, and operating under the laws of the USA\cb1 \uc0\u8232 \u8232 \cb3 1600 Amphitheatre Parkway\cb1 \uc0\u8232 \cb3 Mountain View, California 94043\cb1 \uc0\u8232 \cb3 USA\ +\pard\pardeftab720\partightenfactor0 +\cf2 \ +\pard\pardeftab720\sa298\partightenfactor0 + +\f0\b\fs36 \cf2 Age requirements\ +\pard\pardeftab720\sa280\partightenfactor0 + +\f1\b0\fs28 \cf2 If you\'92re under the\'a0{\field{\*\fldinst{HYPERLINK "https://support.google.com/accounts/answer/1350409?hl=en_GB"}}{\fldrslt \cf4 \strokec4 age required to manage your own Google Account}}, you must have your parent or legal guardian\'92s permission to use a Google Account. Please ask your parent or legal guardian to read these terms with you.\ +If you\'92re a parent or legal guardian, and you allow your child to use the\'a0{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms?hl=en-SA&fg=1#footnote-services"}}{\fldrslt \cf4 \strokec4 services}}, then these terms apply to you and you\'92re responsible for your child\'92s activity on the services.\ +Some Google services have additional age requirements as described in their\'a0{\field{\*\fldinst{HYPERLINK "https://www.google.com/terms/service-specific?hl=en-SA&fg=1"}}{\fldrslt \cf4 \strokec4 service-specific additional terms and policies}}.\ +} \ No newline at end of file diff --git a/LabProject/mainApp/templates/mainApp/base.html b/LabProject/mainApp/templates/mainApp/base.html new file mode 100644 index 0000000..3d42fbb --- /dev/null +++ b/LabProject/mainApp/templates/mainApp/base.html @@ -0,0 +1,18 @@ +{% load static %} + + + + + + {% block title %}Google{% endblock %} + + + + + + {% block extra_head %}{% endblock %} + + + {% block body %}{% endblock %} + + diff --git a/LabProject/mainApp/templates/mainApp/home.html b/LabProject/mainApp/templates/mainApp/home.html new file mode 100644 index 0000000..b0e3ecc --- /dev/null +++ b/LabProject/mainApp/templates/mainApp/home.html @@ -0,0 +1,75 @@ +{% extends 'mainApp/base.html' %} +{% load static %} + +{% block title %}Google{% endblock %} + +{% block body %} +
+ + + +
+
+ +
+ +
+ + +
+ + +
+
+ +
+ Google offered in: العربية +
+
+ + +
+ + +{% endblock %} diff --git a/LabProject/mainApp/templates/mainApp/terms.html b/LabProject/mainApp/templates/mainApp/terms.html new file mode 100644 index 0000000..62e12c2 --- /dev/null +++ b/LabProject/mainApp/templates/mainApp/terms.html @@ -0,0 +1,139 @@ +{% extends 'mainApp/base.html' %} +{% load static %} + +{% block title %}Google Terms of Service{% endblock %} + +{% block body %} +
+ +
+
+ + + +
+
+ + +
+
+ +
+ + + +
+ + + +
+
+ +
+ Terms of Service illustration +
+ +

Google Terms of Service

+ +

+ Effective 5 January 2022 |  + Archived versions |  + Download PDF +

+

+ Country version: Saudi Arabia +

+ +
+

What's covered in these terms

+

+ We know it's tempting to skip these Terms of Service, but it's important to establish what you can expect + from us as you use Google services, and what we expect from you. +

+

+ These Terms of Service reflect the way that Google's business works, the laws that apply + to our company, and certain things that we've always believed to be true. As a result, + these Terms of Service help define Google's relationship with you as you interact with our services. + For example, these terms include the following topic headings: +

+ +

+ Understanding these terms is important because, by using our services, you're agreeing to these terms. +

+

+ Besides these terms, we also publish a Privacy Policy. Although it's not part of these + terms, we encourage you to read it to better understand how you can + update, manage, export and delete your information. +

+
+ +
+

Terms

+ +
+

Service provider

+

+ Google services are provided by, and you're contracting with: +

+

+ Google LLC
+ organised under the laws of the State of Delaware, USA, and operating under the laws of the USA
+
+ 1600 Amphitheatre Parkway
+ Mountain View, California 94043
+ USA +

+
+ +
+

Age requirements

+

+ If you're under the age required to manage your own Google Account, you must have your + parent or legal guardian's permission to use a Google Account. Please ask your parent or legal guardian + to read these terms with you. +

+

+ If you're a parent or legal guardian, and you allow your child to use the + services, then these terms apply to you and you're responsible for your child's + activity on the services. +

+

+ Some Google services have additional age requirements as described in their + service-specific additional terms and policies. +

+
+
+ +
+
+
+
+
+{% endblock %} diff --git a/LabProject/mainApp/tests.py b/LabProject/mainApp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/LabProject/mainApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/LabProject/mainApp/urls.py b/LabProject/mainApp/urls.py new file mode 100644 index 0000000..00be42d --- /dev/null +++ b/LabProject/mainApp/urls.py @@ -0,0 +1,9 @@ +from . import views +from django.urls import path + +app_name = "mainApp" + +urlpatterns = [ + path('', views.home_view, name='home'), + path('terms/', views.terms_view, name='terms'), +] diff --git a/LabProject/mainApp/views.py b/LabProject/mainApp/views.py new file mode 100644 index 0000000..bfcbb50 --- /dev/null +++ b/LabProject/mainApp/views.py @@ -0,0 +1,10 @@ +from django.shortcuts import render +from django.http import HttpRequest, HttpResponse + + +def home_view(request): + return render(request, 'mainApp/home.html') + + +def terms_view(request): + return render(request, 'mainApp/terms.html') diff --git a/LabProject/manage.py b/LabProject/manage.py new file mode 100755 index 0000000..88fbd0e --- /dev/null +++ b/LabProject/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', 'LabProject.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() From 9635bc18e8a9c3e004f483ba0c3481186b4674cf Mon Sep 17 00:00:00 2001 From: Mohammad Abdulhafiz <113006736+M7mdQash@users.noreply.github.com> Date: Sat, 4 Apr 2026 21:20:13 +0300 Subject: [PATCH 2/7] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a6429bf..28648ae 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +## to run this lab: cd into LabProject and then use 'python manage.py runserver' + # LAB-Django-Templates-Resolving-URLS-Static From 063e9344da5c071b99149171bf205a8bc32093ba Mon Sep 17 00:00:00 2001 From: M7mdQash Date: Mon, 6 Apr 2026 09:32:37 +0300 Subject: [PATCH 3/7] quick fix --- LabProject/mainApp/templates/mainApp/base.html | 18 ++++++++++++++++++ LabProject/mainApp/templates/mainApp/home.html | 18 +----------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/LabProject/mainApp/templates/mainApp/base.html b/LabProject/mainApp/templates/mainApp/base.html index 3d42fbb..946e086 100644 --- a/LabProject/mainApp/templates/mainApp/base.html +++ b/LabProject/mainApp/templates/mainApp/base.html @@ -15,4 +15,22 @@ {% block body %}{% endblock %} + + diff --git a/LabProject/mainApp/templates/mainApp/home.html b/LabProject/mainApp/templates/mainApp/home.html index b0e3ecc..1e6230a 100644 --- a/LabProject/mainApp/templates/mainApp/home.html +++ b/LabProject/mainApp/templates/mainApp/home.html @@ -47,23 +47,7 @@ - +