From 113e1f44172c14758bcb5f693a78e7efdb7ad761 Mon Sep 17 00:00:00 2001 From: Gokuldevx Date: Mon, 18 Aug 2025 20:23:47 +0530 Subject: [PATCH] minor change --- .../__pycache__/settings.cpython-313.pyc | Bin 2355 -> 2461 bytes civicfix/civicfix/settings.py | 5 + .../core/__pycache__/admin.cpython-313.pyc | Bin 182 -> 1185 bytes .../core/__pycache__/apps.cpython-313.pyc | Bin 498 -> 615 bytes .../core/__pycache__/forms.cpython-313.pyc | Bin 0 -> 1502 bytes .../core/__pycache__/models.cpython-313.pyc | Bin 179 -> 1002 bytes .../core/__pycache__/urls.cpython-313.pyc | Bin 313 -> 718 bytes .../core/__pycache__/views.cpython-313.pyc | Bin 341 -> 1015 bytes civicfix/core/admin.py | 24 ++++- civicfix/core/apps.py | 5 +- civicfix/core/forms.py | 21 +++++ civicfix/core/migrations/0001_initial.py | 48 ++++++++++ civicfix/core/migrations/__init__.py | 1 + .../__pycache__/0001_initial.cpython-313.pyc | Bin 0 -> 3820 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 149 -> 149 bytes civicfix/core/models.py | 11 ++- civicfix/core/templates/core/register.html | 88 ++++++++++++++++++ civicfix/core/urls.py | 4 + civicfix/core/views.py | 17 +++- civicfix/db.sqlite3 | Bin 131072 -> 0 bytes 20 files changed, 219 insertions(+), 5 deletions(-) create mode 100644 civicfix/core/__pycache__/forms.cpython-313.pyc create mode 100644 civicfix/core/forms.py create mode 100644 civicfix/core/migrations/0001_initial.py create mode 100644 civicfix/core/migrations/__pycache__/0001_initial.cpython-313.pyc create mode 100644 civicfix/core/templates/core/register.html delete mode 100644 civicfix/db.sqlite3 diff --git a/civicfix/civicfix/__pycache__/settings.cpython-313.pyc b/civicfix/civicfix/__pycache__/settings.cpython-313.pyc index 592f0d422b54fee1b50676626eb0482eec654aa2..9100e234d3b8f91ec3feb9b2766f46f58e2ee598 100644 GIT binary patch delta 363 zcmY*UyGp}g7|maP()1GB=F;>MTb-m1O@}Ht78|rsEzL=`LIw$zf)u`PE-F4j$?PO< zZuKPu2i>HTkKpA6{Hs$Bobz!GhXdb2yVKPlRZU9*x83{k!(1)1_I&5&3NmFJ3CSU& zEEH0a8cCkL>aD}8ulto7$w==d{&R9EPbCYj(=6tqyI66#dO7F7hR=d7_E`|K-onL3+N)C^`3 zE!;%Jl_eifFQSGWKgyGQt`qpjVF1?)PX=ALADhXi#!~AKj(Vq|=XQIZd+3LO*I()) y8wCDZ7(XXF>3#7X6P)eFhSE!Y8j@bS&VBPZR9=i%N&7IXLf?z_o1{})6n_D$B2SJw{rc4lVea2vxU@o9Z+<}Y+jKMs5Ec%Q^{K33M0>OO2{J{djg26(;!oecJ zqIzrwj75UMV!`4-bz;F12D%_h63me@VAN+R5(<_s5)PIr5(#E05(Q$hVA&$^V7VfR zbVg12$q9@fH^(rgvM^~%PCm(&HQ9xI^JE1MM=m3vLl}X$SbTCehbPk~k;!{G&Tw30 K5GpbNiUI(n)-HGe diff --git a/civicfix/civicfix/settings.py b/civicfix/civicfix/settings.py index ba0425d..b8c4d3f 100644 --- a/civicfix/civicfix/settings.py +++ b/civicfix/civicfix/settings.py @@ -29,6 +29,8 @@ INSTALLED_APPS = [ 'core', ] +AUTH_USER_MODEL = 'core.User' + MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -113,3 +115,6 @@ STATIC_URL = 'static/' # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +LOGIN_REDIRECT_URL = 'home' +LOGOUT_REDIRECT_URL = 'home' diff --git a/civicfix/core/__pycache__/admin.cpython-313.pyc b/civicfix/core/__pycache__/admin.cpython-313.pyc index 2b39130e039f1c406a4a0a360e333afe26ea5b72..b71af22e65603606ae7e787fcd8add66628e9689 100644 GIT binary patch literal 1185 zcmY*Z&ube;6rTO5-IZj?Y3(>}F(S~GZ9z?48%imK;`f+Aa`;5&$r3YJG54O zhukLA+a=T=I)~26c6hxN8skPByf7@bw8yfEC=i4{Dh^*6^1>W~7S~wPYp;5GrS$>Q zr({ULq6BPefkSO@sRJH$sYm@g)`3kMh=Ll0h@u)b5w#3DaKXpDZMs1_eH*z24cdiZ z?8ckAb2L+>oV->P7)72AW~iuO6RtfzVItSw^i&pHM?xj3D8)H1bbwfuY&42pXrr5M zp5BtqwZIw`&&tG053e z>8@E!aMSvr^UmGLR6@y$vX`-vqf#B!(Q`Q#g>D*SawbK=Gt;)mBIB`FC-XmP;X18P z^eecJCpA($N^u37DB>>?hdM~=43k7hiK*Ny=ZITL@^Hp-lRL6blGL@xF=!#paxSnO znNZW5J<-jYjYM8@(BZ1Syi~f)vJ4$fxeeV)Osh(fCaf$${4~Slk_39FWQjkb-#_|% zn2JXty$AA)r{#)_#LvT20w30Qw?BOX=6=+J0qP+Rzmex}4KBW$-xypBo`>zrpxWK9 zI-gd-!93h~_F47b{c4w1!4LCrd)|6`LCDR4y>RSX(Sq1vbK#Tdoo5fK55BJ6{iX`O zU9=mU{>9zJ4H9k4Z}#TfCoesxi+dg1>v&uKuiwLmYYivZ`Hk$16=T^?WnmHn^9J>; zH;sKZD^L4%4uJm(cmvEe%@vqurUT$(EGgcTI=LR&Rv|vBSHD;_=1aJP)I3f(yYc(pFMF5n-`3W@cGvPR#ggE(bcntE(irM9{{zp(ObP%1 literal 182 zcmey&%ge<81k0lrWjF!p#~=<2FhLog1%QmH48aV+jNS}hj75wJ4Czdo%r8OGnvAzt z6H{_C^ZYcKZtm}#sl@w(r6)^)9tYr8MQg=(u*(xSEvn(??peR2pHMs=B yNz1H=NzN}yjRBjXS5SG2!zMRBr8Fniu80GujS+~8L5vT~jEs!;7!-=wfE)m5Oe}i< diff --git a/civicfix/core/__pycache__/apps.cpython-313.pyc b/civicfix/core/__pycache__/apps.cpython-313.pyc index 41d6f5a962a34449d80103523ceb7743c05cef88..bb8d376908185abd65c28c1866ad347f3493c246 100644 GIT binary patch delta 317 zcmeyw{G5gNGcPX}0|>Y*&iFo&H48Pqfl7*5fkXqt0}h_gKn6n*Cy?;dpIA~- zl$lgol3E-e4^~&i2hza}B0#2q36P75g@8mG!wpG`3oK$cxCI+rzOpc}@)q$;p1`PV y53&KF^A?9qZhlH>PO4pzI8XxQ>S7Tf@qw9x6O zf(6JZ<^>XM3^yb#F0hE*;1+ClDH52>%A{-$(o`e>A_RfNEe@O9{FKt1RJ$T!AeRw{ di$#FM2WCb_#=8uPU)Y!!g(gUTWdKrOT>t@#F)9E6 diff --git a/civicfix/core/__pycache__/forms.cpython-313.pyc b/civicfix/core/__pycache__/forms.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..630c814198b32384ff02ae392a54b0638cec2513 GIT binary patch literal 1502 zcmZ`(&2Jk;6rb6ztep*ZAf`zO!F(uUh2#PvNU0z~iV`WYNFW=ZFpQS<#NKGVo4#E) z1@#bdKn_&usrN{nxFG(NhD)OnJs~0G2860T^4_kS(yATFzkOdb^FDs#^NEQv!}U+| zr{1x~*dL@kTINVNUq<0J^O(n*Y=Z-@ldLth4IOlpb zgWfi_^Ai5Qfl(Tor!R4^(Eq}dKGM){c&2A9X<+9`k73gGBDR1Ql)Uj4`+$3;S+-~I zaVUFbK+DG*oVS?ks7oth7Je(^ZP^Xe3?A1&sqSEPHpr`k5M<}9f|fN`Q{}#YT|_eO zW<8*UpQvzjFFUWJ=jr;uyo}X+jLJR^z#q}? z{1=2}ew%%P-(v0PE%qgj$>W~3#AB_+wki6l<>@rZmKKdjjPkSNj8WXh8J>x|$e6Dd ze|sePRXT6`;=GX=KZ_%=j(%j9wYi1_vVx@F4>OoVC%lNT<66p02m2C~k^0x9a)Lmcahd1t2+@Wz=o4H$CIH@fhADq-K4~?7UXIN(E(NXzxeDc(( z-daCezu7#kyfhpyhDh9S`HnjQFQWvP2&M^U2&iwWyh=P?BZ}n(tI|r(heD?w^^YgGBvo%zOn IhTnYif4rAj{r~^~ literal 0 HcmV?d00001 diff --git a/civicfix/core/__pycache__/models.cpython-313.pyc b/civicfix/core/__pycache__/models.cpython-313.pyc index 5b9a7ddbaae4c770c4829f47b3a20f9c8a1c94a3..8c0e36e7ef18bcb00e1c32f110206bb1bbdfcc4e 100644 GIT binary patch literal 1002 zcmah{F>ljA6uyh?Bu!kEBx)&9MJtpRdC5{b6jhaIMTZ1c2)7fFPL6X)TpYW+J6DB; zObCgEr7H_dx-l>?@FPf;L?=2ibwdi>xvSHPvT&B4zwh3?d+&SCpzuCMRV4QGydxLx61r2^)h})1O_| z{`YaD@+WL<9YgXz{?vc`Y3a}3yjwA)&o<l5(#4wj%|m z8no#|K0lw48+(=}G9Blb_%vwowlM0x6TA?55c$3@^z@PN8JCQa|S=7vCP@c_z)uf(ku<;1D8 z(2qDJ5%^+O2`K-&ot4)zQ<^UNF*En!=>41T>APde(J9)srbU{N!0AvzM1~M~edH@_ z67n)~{E26VkfsNW`(8kUkPuKBg}D`mK6Qc}kNORf@fdME?!BggFeO%%g2O`)S;>IP zLggPKrncJ-#1Y0}I}9ik)LpZLFz#^AB@XA{)ukpT^UO&f%qpX%3F#}N8po>AyhWqj z?P0Do$d!8g{oHD|GAi5|7FGs@m0r{@taYD^^7F&|@*uz5qy7AYZgphlhvve-T<9e} zm%i@x&8_a^3mqGaaUPXo*Gh@0#(@*G!g8Y?i!DyL8wRSrvJ>%kIi3dSGDc)42jnCe xs6Rih_ND@n-iTYg3Cr?`8aXRU^Gm}RpP_{_w0edXf9ol{_-^9@$_Ur%v literal 179 zcmey&%ge<81k0lrW!M1e#~=<2FhLog1%QmH48aV+jNS}hj75wJ4Czdo%r8OGnvA#D za`RJCbBg^mnQn2WWF_XM=j){;6)^)PS2BDCskx=@Y!#E7S(cd`P?VpQnp^_mq-9pb tB(oF diff --git a/civicfix/core/__pycache__/urls.cpython-313.pyc b/civicfix/core/__pycache__/urls.cpython-313.pyc index 56eeed51b671c322e67f7f00d6bb8a2668f4f2e8..62119fb43311d0c4847e055d7f0d603c9b2c1b87 100644 GIT binary patch literal 718 zcmZuuO>fgc5M9UXB#x7&!bX7LP$5;tmsq6&sS(Phw-iAY3y>;{$hh0sl|Q1j)0W&g zAcYg*fZ)yr{sBKD7KezHa^h4@Mfn5Fnz+8OhnY9?=IzYvE*p&+f^)y~#eFLv^os}i zkyl{(8^A|oB2(B$U4aT49GCV>U6EqIB47!yxPdI;E;6wt_Uid1g*PR$yenoE6{uJ% zm>ikas|wk|z4bg__?}we9GNv!*%i$Cm9_y|EoTe=Kkb7RZLV>(fvGZR>gyLgs|ySd z?ZgEyoqFUfzJT{Z3^D9R0pVr491lJp6GR^9G%$VAZm@MA5)R{R#zD(3KQzRYT2X2rI<4{ z4*S`dv?{ycF4=28>{VS(-}(9Qy>f67RbC)Xy= z-XFd@{Cu3^&7ZhBxjiMH!Vlrsc8VYJ_~x`dSGQ7iYpxopYRo!MXJFNX*^8Gc?(>RU h)9zf;Q%#?1+o`twL)-a&FU5P8veYcSQRsDO{1*W{v6=t? delta 238 zcmX@dx|6B?GcPX}0}v?2EXv3S(vLwL7+`}kK05&!QyGF8f*HLTycmlZ6&QkXs0Fl#WIC9^(b5o>>-N!I((dZ)wjdz{ zPr?a}A#&7sFy1)&Gn&)`c`5P0i5s!Tv-6f+jU-O;=FPmBc{AV4v^qN42~zi?Px>v1 zkYl0vgt|+uJ9zDp9LdoclBGbi5=aT5OEZD23^K}roIDfEDxjbo>?IJ&Daga6P%3;P zK1oSj0cI8%@G!8V0ZemJln2XJ$uLi-@SwbB%5aQzW-hRjVLPBYhGkA$P|<|lCmDqR zo>niiJyQ5%%VT{RujT1~BQji=e%(efm(9dPkLd^HYG2k-f=}nsPkl-+avs|8^ z%RO;>w|>!`3%FBe;EsmN%Q)y%m@5_L=vEN~GU!Cc!-oB|rk0H&muNF+dPw%9hYObp->s$o2~j%P9WU?+#LKKtDrrLN{aYZ#tR@&AraI~spyVbimc-*sTmg#`; zEUi`@-G#}6qAT`UGsKKs5MPM^@vZyVwm|2&Vx`>31@GM6Ml?>px^l M(=DZqKA>*sZ>#&v>i_@% delta 168 zcmey)ewB&uGcPX}0}u$uEXv4Wn8+ugEe7OGWe8>nX7pz8Vk}}*UJF6s=?^;smkTfy6Bio80`A(wtPgA|4=@5r~UI89?i%- zBQQ#(%2lb#C6~Qyik#xAoO1J#98%%vqof=}^&YaRoVej~Qn{t_x@Y)tA@5e8nC{p8 z^?R?s_cOzXj*bWiKYy9~WAV39j{7GS4u1mPE`ER)#^91vf4+|2H{gROJ;Xp3f$|CsVmjby^w)><)cMf|z{05~qDKz7s z;-xU)&a}iuq_EUJ!viJ?n6oW0R9A=8IU@k73s8M6Q9&st#ieeB>iML-Gg9xkPdY1| zllWXmHgQ^0cBsXg*kbMC>9uKZDdUrRq`sLT_7vKb$R|;}G%8*4P?rJKGA6*?rPH2due4YjJG~}dky0$?W1sXQ zC|#ZL0e{zi6mk7W5otiQ&OTnsKyHn*7)$`_+G$@IyEmjsX-b-wCZwAzsz3Pw>}L!+ zBi(YbnK+!h4YlxjT99V{kDQC0_9dG+y>^&$Q#@qd7c+jS*gol}_=$$OYkcdr$|P}$0u&cis2wES8RCXb!ODrn3s2GL_(2{Q3vK|&j)-2B4PDh8V@m|zK!I)+;3z7ktFa^HqU|V7 z#Rf0hG?Z5=hC{+dWRztGy>eV$YR3 ztM{_#WkttGON$fJ&KLZ&9($)qz^GuJb+ zXqm=VdjEHn)gb9a7+Y8_A=_38$j0Yk8TZh~0ONQAVxuXJg>8@YgbDXyrwCF(QZNfTF5a#f0dPpnHh417}EnZs{h{s!R}FA;n|bW<4^& zKgcIYelrCHNC~HjN?*C~{Jdg?RNp}Bf4p;CBXu=DrLK>tN>B& z++~Ml^*S;vvjE9%rNyIEgDfu~=Tx@CtKWn&1+0h^wMZ`t+UYsjV&t+>!HPjb%DU~)A|h?p`f~`h4K2&>)@NQv zhGxS?+5H>}l@t@|1lxatFQtAGlHKMflZZ^iRxyw)lc+4etSAQ608*Fiwn+nW!L(qZ zO*bLtU^uFwGBPz}syb92{T3tb3oQR0(T^_dXDrU^g*j-S_oyc%ya4s?PCFKX+!eiq zTroOtSq4%}R|;y+6|-QGHq|m6tgqt`=)&|Ph4ihOx(fPNy(YAFSm7jcmlmh1AW(61 z1B%iC164>nBAC`D>3XD?TPqfQy0CVt1w_gTiC7Q{@4K;Arp4^&s;oHFfeQ3mS;n`) zgAee>kulI{w5{Z&r2Fv=Z&g678Its{G!rOR752*=rjzMSlT@ErFW z?)%Q}*GmUME_~}i;LikKe|Zq$!adEKi`WFZf`V`la1u$&dBac?U`0jqFOA!7f-%9 z+Z>*13{UN>9&p^xd&ScwP$L5NUO!rUc7JnQnUYRqyOsLk=@DK zs#foJugy3bZw!v_^n&V#zI*iAtGvona~c)mi1*Y^G=?U2Mi>m!ojGBdvXgwk*m(%- z47~|9#i@okwX^ou+@EvJ*=&6_+nimi&#u)Fu8VG5SO{)3k~emy>&dxVZ2lwm>%$AR z*rKOvvLR0H+^viAwb+7piLpli*xNI^7v4?P`=8WePxs>Iw{JEFCK>}1JCv(spFy4b zC4ZN?^|kN|Iw0XC9q#z=Q;rkM6c~Tt--};-v(_BF-59;SJ5tMT!s-(LlpfFXOv_71 z0Fa&vD!u6?jS6uj99--^(|K@(8@{}EIlY${e&6Qr?L3Hb-2>bA{_yzskDG~1J&|c9 zZq^ewn~C{)V*YQ5#aiqxzW(W-S_kf{F9=WeU}0zU)M2Y>b`JPrh( m&-Wq7`7V6Njef@^{?1+bSMahg_)Vl48>z=e{>_2F)cg+`%neci literal 0 HcmV?d00001 diff --git a/civicfix/core/migrations/__pycache__/__init__.cpython-313.pyc b/civicfix/core/migrations/__pycache__/__init__.cpython-313.pyc index e259cd5718b86fc5c5a32286accc96c1a4b12896..b8e38999ca1d71564cb9cc1029aa89d39c2f0616 100644 GIT binary patch delta 21 bcmbQrIF*t2GcPX}0}w2BT%5r?k+%Z?IHd(? delta 21 bcmbQrIF*t2GcPX}0}w2aUX;Nwk+%Z?IcWuh diff --git a/civicfix/core/models.py b/civicfix/core/models.py index 71a8362..607962c 100644 --- a/civicfix/core/models.py +++ b/civicfix/core/models.py @@ -1,3 +1,12 @@ from django.db import models +from django.contrib.auth.models import AbstractUser +from django.urls import reverse -# Create your models here. +class User(AbstractUser): + is_citizen = models.BooleanField(default=False) + is_moderator = models.BooleanField(default=False) + is_resolver = models.BooleanField(default=False) + phone = models.CharField(max_length=15, blank=True, null=True) + + def get_absolute_url(self): + return reverse('home') \ No newline at end of file diff --git a/civicfix/core/templates/core/register.html b/civicfix/core/templates/core/register.html new file mode 100644 index 0000000..56798e5 --- /dev/null +++ b/civicfix/core/templates/core/register.html @@ -0,0 +1,88 @@ +{% extends "core/base.html" %} + +{% block title %}Register as Citizen{% endblock %} + +{% block content %} +
+
+
+
+
+

Create Citizen Account

+
+ {% csrf_token %} + + {% if form.errors %} +
+ Error! Please correct the following: +
    + {% for field, errors in form.errors.items %} + {% for error in errors %} +
  • {{ error }}
  • + {% endfor %} + {% endfor %} +
+
+ {% endif %} + +
+ + {{ form.username }} + Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. +
+ +
+ + {{ form.email }} +
+ +
+ + {{ form.phone }} +
+ +
+ + {{ form.password1 }} + +
    +
  • Your password can't be too similar to your other personal information.
  • +
  • Your password must contain at least 8 characters.
  • +
  • Your password can't be a commonly used password.
  • +
  • Your password can't be entirely numeric.
  • +
+
+
+ +
+ + {{ form.password2 }} + Enter the same password as before, for verification. +
+ +
+ +
+
+ +
+ +

+ Already have an account? Login here +

+
+
+
+
+
+{% endblock %} + +{% block extra_js %} + +{% endblock %} \ No newline at end of file diff --git a/civicfix/core/urls.py b/civicfix/core/urls.py index 0d4ddcf..0dcea45 100644 --- a/civicfix/core/urls.py +++ b/civicfix/core/urls.py @@ -1,6 +1,10 @@ from django.urls import path +from django.contrib.auth import views as auth_views from . import views urlpatterns = [ path('', views.home, name='home'), + path('register/', views.register, name='register'), + path('login/', auth_views.LoginView.as_view(template_name='core/login.html'), name='login'), + path('logout/', auth_views.LogoutView.as_view(), name='logout'), ] \ No newline at end of file diff --git a/civicfix/core/views.py b/civicfix/core/views.py index 25729de..58ab75a 100644 --- a/civicfix/core/views.py +++ b/civicfix/core/views.py @@ -1,4 +1,17 @@ -from django.shortcuts import render +from django.shortcuts import render, redirect +from django.contrib.auth import login +from .forms import CitizenRegistrationForm def home(request): - return render(request, 'core/index.html') \ No newline at end of file + return render(request, 'core/index.html') + +def register(request): + if request.method == 'POST': + form = CitizenRegistrationForm(request.POST) + if form.is_valid(): + user = form.save() + login(request, user) + return redirect('home') + else: + form = CitizenRegistrationForm() + return render(request, 'core/register.html', {'form': form}) \ No newline at end of file diff --git a/civicfix/db.sqlite3 b/civicfix/db.sqlite3 deleted file mode 100644 index ae6669a3616b79e04ccb3162c0cd92f9d081d6de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131072 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