From 11fa62984381067db218f4cddf1973e453144190 Mon Sep 17 00:00:00 2001 From: Ravi kumar Jha Date: Sat, 26 Apr 2025 03:53:16 +0530 Subject: [PATCH] Added email Validator feature --- accounts/__init__.py | 0 accounts/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 142 bytes accounts/__pycache__/admin.cpython-312.pyc | Bin 0 -> 186 bytes accounts/__pycache__/apps.cpython-312.pyc | Bin 0 -> 452 bytes accounts/__pycache__/models.cpython-312.pyc | Bin 0 -> 1951 bytes accounts/admin.py | 3 + accounts/apps.py | 6 + accounts/migrations/0001_initial.py | 31 +++++ accounts/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 1348 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 153 bytes accounts/models.py | 31 +++++ accounts/tests.py | 3 + accounts/views.py | 3 + cheaper/__init__.py | 0 cheaper/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 141 bytes cheaper/__pycache__/settings.cpython-312.pyc | Bin 0 -> 2484 bytes cheaper/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1008 bytes cheaper/asgi.py | 16 +++ cheaper/settings.py | 123 ++++++++++++++++++ cheaper/urls.py | 22 ++++ cheaper/wsgi.py | 16 +++ db.sqlite3 | Bin 0 -> 143360 bytes manage.py | 22 ++++ 24 files changed, 276 insertions(+) create mode 100644 accounts/__init__.py create mode 100644 accounts/__pycache__/__init__.cpython-312.pyc create mode 100644 accounts/__pycache__/admin.cpython-312.pyc create mode 100644 accounts/__pycache__/apps.cpython-312.pyc create mode 100644 accounts/__pycache__/models.cpython-312.pyc create mode 100644 accounts/admin.py create mode 100644 accounts/apps.py create mode 100644 accounts/migrations/0001_initial.py create mode 100644 accounts/migrations/__init__.py create mode 100644 accounts/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 accounts/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 accounts/models.py create mode 100644 accounts/tests.py create mode 100644 accounts/views.py create mode 100644 cheaper/__init__.py create mode 100644 cheaper/__pycache__/__init__.cpython-312.pyc create mode 100644 cheaper/__pycache__/settings.cpython-312.pyc create mode 100644 cheaper/__pycache__/urls.cpython-312.pyc create mode 100644 cheaper/asgi.py create mode 100644 cheaper/settings.py create mode 100644 cheaper/urls.py create mode 100644 cheaper/wsgi.py create mode 100644 db.sqlite3 create mode 100644 manage.py diff --git a/accounts/__init__.py b/accounts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/accounts/__pycache__/__init__.cpython-312.pyc b/accounts/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..228acde35414ce7e530eaf86e48073795d3b96e6 GIT binary patch literal 142 zcmX@j%ge<81jcpT86f&Gh(HIQS%4zb87dhx8U0o=6fpsLpFwJV={j4*gche36~`23 zWR@l7WyU0Dq$U=m7R4kcC+C;ul@!Os$7kkcmc+;F6;$5hu*uC&Da}c>D`ExeW(4A5 P5aS~=BO_xGGmr%UAG9F1 literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/admin.cpython-312.pyc b/accounts/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a69a0d7bc8ce137a4c30b04b5eaa208c248ff17 GIT binary patch literal 186 zcmX@j%ge<81jcpT8BRd@F^B^LOi;#W0U%>KLkdF*V-7mQTYM>5iFxVyddc~DB}JJ@Ma)12D;Yk6)cw+Owu%WYPAw{qDbC0&OU%oR zNzO=3EJ!ViNlZ@8FU>0{jscsaS5SG2!zMRBr8Fniu80Gul@W-GL5vT~jEs!;7!-=w GfE)m|7A=PW literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/apps.cpython-312.pyc b/accounts/__pycache__/apps.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33636a426078c6fb547d2b21dd215d8398646f2f GIT binary patch literal 452 zcmXv~ze~eF6n-yBrS=yhT5xc15wc`)5fPzQbnE6|2pnhb+D6hO<{F_6g3v#}t>Awk z{wXew<-p0wO^7Z|-X-Y`?|tvS@4b8Xy|vp7Q0L&GIeu38Qx~gKt3bZ5zycUB3}J#U zA{cN1%$Nf+Ilh{u&NXJ1UHj67jdH!0B>gxV1|z?u%ZOExZz-?<4lXiq4Ti4C4A+{O zwk10~-;c9sD$4%*U3NpGQS7j5XA(0W3g)S-c57_%zGqC$~^$RK$UH=x%a(Dm$ literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/models.cpython-312.pyc b/accounts/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e8be97b3da4ee2df348a2e38fa0660d4741e389 GIT binary patch literal 1951 zcmbtV&rcgi6rS;V?e!0^D3k^;vD-A2T)?G7L7`2eMueoT3aZ+s2iNIpyF0{2>$Nkx zrm;&Zx8eXN;8I_61i>MHMx|araRu5EDN;|qMKQhf)c3|V7=+YHebRpO=FOWoZ{GWM z_qVRDAOW$x;Y>jy=SgBa8#Ihvvrb&u)ENhwL_lIcx(4ev5Z$sTf- z81gbPe2gxH+o4XzZ8!xbtcdmL* zR!bxy&y~l&{YD!r-x^Dek4+`j%Ohj=M?UJXz%-p~&F}v(G5YxJ^6Q^ii+Ghd%V}9N zKA-0~%}Kg6UXIQPi>_H#-ihmZ%h9q{+%9N3vy%zQ^>F6O;H+mj-Z$ZKWr$Q{ZkGt9 z7Bt6U+_Ldn@%Y~((;uYo*^Jw1JCj}1tZZ7(Fs;CNTGRD>(Q@o`v%1Mb$?X<7X%16G zERMazqS#Xa74o9*Ze{i`)U|eP_1gOEldH8*;;?&o_u|!O-IKe@z+I+7{(K zFr4BSa!c?l2}+fmaBGR2$F6oNl$0RcT*4#j>B^$ETh#U1%$&E8XmK6_bY;%ylJI`8B`ALb27Upc zGYh|}+74IMa&KoIEhBEUvGf&k5b0ejuar41u|K}VEsXO&wVF&L6 zsN?6m{tLkW=)LR3ew=N-sCGHhIx^X6`b9XZqv@s9(ynr$-E=+-s~lZ;3;}D%-$Zy9 zz?BO;t20-*_r+(;_6F^Ik?Tw?a#NhfFQG3ox!K;!s38o%V}A$$?F|jBOzww<_CiBX z>{@7~a{C}0#fC@s!qH7nEj$A4?uoDWS7RHo&FNatc;(XuG`q=65e?q|fU%%i5AsRl zyCwK1 wD5cLy^f{UMg9KiA{q*KhpF#)M->Hsnj2;nCkNSLcU}b*ITs8k9po%K|1B_Lbf&c&j literal 0 HcmV?d00001 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..0b3e675 --- /dev/null +++ b/accounts/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# Generated by Django 5.2 on 2025-04-25 21:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Product', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('price', models.CharField(max_length=10)), + ('source_url', models.URLField(max_length=150)), + ], + ), + migrations.CreateModel( + name='UserAccount', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('email', models.EmailField(max_length=50, unique=True)), + ('password', models.CharField(max_length=100)), + ], + ), + ] diff --git a/accounts/migrations/__init__.py b/accounts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/accounts/migrations/__pycache__/0001_initial.cpython-312.pyc b/accounts/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a79d5d02dca8f67e948d8c49ec06d254c7a7005 GIT binary patch literal 1348 zcmb7EF>KpL6uqM;ilS(TQf#YID`$w&hB6$u*%G8KQnztiBtelh9S8vg&AUi+DN;F# zZq>ypkfF$wsa2=Wg*|xm*fBsC3J@UUrU0F^33Y-1nR-WxkPS2l@(J9%yL=c}AFz_2d06`bDp#j^1AwVF2Er5i_0A(=Tky58wzt8sL zW@LJzo*i?j3sh-4O=5K&-wUYJ_7Qdin=hqSn1Yihkc(nqKm-f{K_k-yhA04>-BDBW ztVaUMu(jNdHk(Tkg6tDf_CVSfleq^1%Ejzb%9-^@KFIGgZElRGypdNp!&774LgIJ2 zMRTWlP4QrUUr5%O$N%SY?j3W{V(q2VstHC#1P@B79?RzZ8?#wB6J=%=Wm7QJ-lD!l z^S9HR`Oy&5*d`UpZAE^L$=< z;9wU8v~Ztof5W!@(CgAHZd;B!zLM~GHBc$^oQEN%a>ojSAAEwwh)v(o=csJPVVEXW zOp_I3=wgOd(|j0OE)R{3a*pS8S@2XvxPv`}J=?(n;l)i0n{l?cc^MO4TU7nbY2IMx zaFd5d^P4S;Bv8J8_f~?GFL;Dg?04|=HT(%q*aqPB_04Myo>0&TTF$QJISspoEk+2tz(+DqjdW65jxZxo9mo<;U^ZC-Ft%(R1q(`?VGRR-}MH$J<19|zl zSbbhxjLP+=yQ6Y_P_7?|&sHMCj65^|jkIgW#rL9W zz5n5;S|3#FhugzyGF$8K^>_c+`+e`|;_$*oqpBew!>4Smgq% zgX-!b`DHYPcdtK^uN_~ zmU*;ec}@Q^+K%rmzNX}uKH{{Pt20F9>q!M{kX1J1e}Lcv)=V-G!dDW2`U|N7rKieB OTN!98F993G-v0pu2Td6O literal 0 HcmV?d00001 diff --git a/accounts/migrations/__pycache__/__init__.cpython-312.pyc b/accounts/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9a196d9eac3cda52e8cb30d23253d0034500671 GIT binary patch literal 153 zcmX@j%ge<81jcpT86f&Gh(HIQS%4zb87dhx8U0o=6fpsLpFwJVSvXt8gche36~`23 zWR@l7WyU0Dq$U=m7R4kcC+C;ul@!P1W~LV36q~FM2Qrlkw>L9kLaN(4~0G0`-UD`ZH33Mlkv@Hx;5}| zB6nwJ$;1Hiib3QPLoG@SwdnaARlsdk=L|Bqv$JNix%T3CMHlE zC2#=E*ini?$yXkQ7H7~bN`ciZIyZQx2hZ~g-SUY^bU~a&b7Bhoor7N*WyJI7qIhBN zQueaE0NaWbwq(6!Fa%qcqPGaMX_!p2jpYtDnT}~};ikn#BCA-(rfgxvZ0s@fXn
  • WYxVa&{)yB+bS5+BRAr@n7o@__f5jet%$?V8# z7nA?v%fy=#j{a~@G)p_as%*9G!g4c$LoIrhb#wJvy`EpBczJ#V=zg;n94OcpD{gVk? zY}9US*Hnp}8?jhe>!{Fi>;}NGj>bK~76#2%AE}9x8Wh6!mIU3>grE$QWWDynG|g!% z*2LS;5te;pWP4nMZl2Dtck^f8o-#hp%^85PF6(oG%Uu2`UoJSlLa`<|A+B1L2D4zL zS}#`0f}I(sVVATNR_=5lcY}j*f(UQQUDZ0SS+sGI6|$`=7QSsqKscIbJx+ixuNKR^ z<12G(ya|^+Wj~n;d{7M?nUGz>L=xN%3L3a$8w8u2<+fwj!h)hHs_Yi|v!R7y+K)b# zX-&};t*e!=-m=;!_^&?}KP>+0D8>_l#~({j?rPXnnx`53SYPZC$J?mq?I7IX&;&XA z(-AFXQZo=%3A?Pcph=7s1*@o>opXYc1lO}9Il&HGf~vA%dLgw=NRr%(!sZlHCE9Dg@T<6!SC9cj3PI6sXExPulVxDs=$q5&@I_J6- zoDA2fKar}OAgotv1?d@ADuS{C1sE@J<<$na%1il5fd|6k8ZU_zD49?L0xmAyFFOHu zRu>`iIxy#5?@p?~uW*f0T>|Ecv{K|tgGb>;b}qL0V% zTZ`@NIiZJ;U3&!{x}mP!JvKXH&^50aUmAMPjT zkNn;w*!TxFm#FZ}+oag{dH@$1EUJ@>ZzdPD;o^M!6VF>J)4xv5W_t0%*laI+7@g^b Z4k743KSm|yAkYYP;qE?_GOs}{{sovnIFtYY literal 0 HcmV?d00001 diff --git a/cheaper/__pycache__/urls.cpython-312.pyc b/cheaper/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e8320550521d24a26370766e04eefe743023dcb GIT binary patch literal 1008 zcmb7Dzi-qq6n1jCw&Z9F8v}z8LoU)a5tX_`g$h+vR6-1hE~k^OzQlL&DYhfqDI7y3 zHby$#-+=g27}+8*F|oC(SeUT$106_6U@7r?PtV``-uLWJo0~4s>(+TMz1;!et8v=p zG{*Hv8%vOYAxNym&MayVZOho5tV5llV*wjrCvmVnuh3e6dY|9?-8bGxyN=DQ;rgQM zuc31ta8F)5gE41QGAjg9gflqh0>&vuITkP%e2!xkxbDjo!_z`!IZ_G>CQo5Tq=JGM z3QMR_Bvc%p5&TL9@JK^YE-)laqtO~S&oGi0N{k~H>Xj;$%P0&J9?Kw^BR1o0xtP-s zvv4oi4HeHxEJKqV>hdylpS(s?W68)pDp*`muF6)R4+8i&Ng!g7(3}euK{yqhLb@2E zJa2+E%_@Jl$u}LC239)MM|HDl-}44dUn!?}02!kAp=WH*cMmfp<<3MmmaL%ujRjXJ z7KTVrF>dKR)mZ<-#^eV`jtxlP|AWyni?bpjY^Fu1>Y3Kegj;=%D`B9fqQ_%$ao>m2 zM#`v`s~$&S1aC<;xr0iSe`Y($_$<@{wv{{+sBk^scfXk%>04zNC6q92I7aa|Yn2;5 z_czM*@mSxF@wnV-DCtg=AQPb<4k&voJcW5Wr6Y;LrDKSfy_I2p0N1A0kN#maI+0k& zkxa=MVr0}@^}~sPPnc);6ZKUs6#xJL literal 0 HcmV?d00001 diff --git a/cheaper/asgi.py b/cheaper/asgi.py new file mode 100644 index 0000000..2133002 --- /dev/null +++ b/cheaper/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for cheaper 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/5.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cheaper.settings') + +application = get_asgi_application() diff --git a/cheaper/settings.py b/cheaper/settings.py new file mode 100644 index 0000000..b7a0c09 --- /dev/null +++ b/cheaper/settings.py @@ -0,0 +1,123 @@ +""" +Django settings for cheaper project. + +Generated by 'django-admin startproject' using Django 5.2. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.2/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/5.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-qdsb1wl#sv2+8$7g+es&rzrovy02*m@^3!me**&z%gzstf^q4(' + +# 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', + 'accounts', #custom user app +] + +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 = 'cheaper.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 = 'cheaper.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.2/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/5.2/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/5.2/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/cheaper/urls.py b/cheaper/urls.py new file mode 100644 index 0000000..49e4fb1 --- /dev/null +++ b/cheaper/urls.py @@ -0,0 +1,22 @@ +""" +URL configuration for cheaper project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.2/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 + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/cheaper/wsgi.py b/cheaper/wsgi.py new file mode 100644 index 0000000..bf0a643 --- /dev/null +++ b/cheaper/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for cheaper 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/5.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cheaper.settings') + +application = get_wsgi_application() diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..9a49d22ab3f896c38adf97e853d85697d0dfef76 GIT binary patch literal 143360 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 literal 0 HcmV?d00001 diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..1c2fd0d --- /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', 'cheaper.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()