From a74f3bd5cfdbb278db03d313fcc0ae6afb276549 Mon Sep 17 00:00:00 2001
From: bmzsombi <bmzsombi@sch.bme.hu>
Date: Sun, 6 Apr 2025 21:12:54 +0200
Subject: [PATCH] rollback?

---
 imageuploader/pictures/__init__.py            |   0
 .../__pycache__/__init__.cpython-313.pyc      | Bin 0 -> 153 bytes
 .../__pycache__/admin.cpython-313.pyc         | Bin 0 -> 326 bytes
 .../pictures/__pycache__/apps.cpython-313.pyc | Bin 0 -> 515 bytes
 .../__pycache__/forms.cpython-313.pyc         | Bin 0 -> 781 bytes
 .../__pycache__/models.cpython-313.pyc        | Bin 0 -> 1208 bytes
 .../pictures/__pycache__/urls.cpython-313.pyc | Bin 0 -> 569 bytes
 .../__pycache__/views.cpython-313.pyc         | Bin 0 -> 1817 bytes
 imageuploader/pictures/admin.py               |   4 +++
 imageuploader/pictures/apps.py                |   6 ++++
 imageuploader/pictures/forms.py               |   7 +++++
 .../pictures/migrations/0001_initial.py       |  24 +++++++++++++++
 .../pictures/migrations/0002_post_banner.py   |  18 +++++++++++
 .../pictures/migrations/0003_post_author.py   |  21 +++++++++++++
 .../migrations/0004_alter_post_author.py      |  21 +++++++++++++
 imageuploader/pictures/migrations/__init__.py |   0
 .../__pycache__/0001_initial.cpython-313.pyc  | Bin 0 -> 1125 bytes
 .../0002_post_banner.cpython-313.pyc          | Bin 0 -> 801 bytes
 .../0003_post_author.cpython-313.pyc          | Bin 0 -> 1150 bytes
 .../0004_alter_post_author.cpython-313.pyc    | Bin 0 -> 1180 bytes
 .../__pycache__/__init__.cpython-313.pyc      | Bin 0 -> 164 bytes
 imageuploader/pictures/models.py              |  13 ++++++++
 .../pictures/templates/posts/picture_new.html |  16 ++++++++++
 .../templates/posts/picture_page.html         |  21 +++++++++++++
 .../templates/posts/pictures_list.html        |  23 ++++++++++++++
 imageuploader/pictures/tests.py               |   3 ++
 imageuploader/pictures/urls.py                |  11 +++++++
 imageuploader/pictures/views.py               |  28 ++++++++++++++++++
 28 files changed, 216 insertions(+)
 create mode 100644 imageuploader/pictures/__init__.py
 create mode 100644 imageuploader/pictures/__pycache__/__init__.cpython-313.pyc
 create mode 100644 imageuploader/pictures/__pycache__/admin.cpython-313.pyc
 create mode 100644 imageuploader/pictures/__pycache__/apps.cpython-313.pyc
 create mode 100644 imageuploader/pictures/__pycache__/forms.cpython-313.pyc
 create mode 100644 imageuploader/pictures/__pycache__/models.cpython-313.pyc
 create mode 100644 imageuploader/pictures/__pycache__/urls.cpython-313.pyc
 create mode 100644 imageuploader/pictures/__pycache__/views.cpython-313.pyc
 create mode 100644 imageuploader/pictures/admin.py
 create mode 100644 imageuploader/pictures/apps.py
 create mode 100644 imageuploader/pictures/forms.py
 create mode 100644 imageuploader/pictures/migrations/0001_initial.py
 create mode 100644 imageuploader/pictures/migrations/0002_post_banner.py
 create mode 100644 imageuploader/pictures/migrations/0003_post_author.py
 create mode 100644 imageuploader/pictures/migrations/0004_alter_post_author.py
 create mode 100644 imageuploader/pictures/migrations/__init__.py
 create mode 100644 imageuploader/pictures/migrations/__pycache__/0001_initial.cpython-313.pyc
 create mode 100644 imageuploader/pictures/migrations/__pycache__/0002_post_banner.cpython-313.pyc
 create mode 100644 imageuploader/pictures/migrations/__pycache__/0003_post_author.cpython-313.pyc
 create mode 100644 imageuploader/pictures/migrations/__pycache__/0004_alter_post_author.cpython-313.pyc
 create mode 100644 imageuploader/pictures/migrations/__pycache__/__init__.cpython-313.pyc
 create mode 100644 imageuploader/pictures/models.py
 create mode 100644 imageuploader/pictures/templates/posts/picture_new.html
 create mode 100644 imageuploader/pictures/templates/posts/picture_page.html
 create mode 100644 imageuploader/pictures/templates/posts/pictures_list.html
 create mode 100644 imageuploader/pictures/tests.py
 create mode 100644 imageuploader/pictures/urls.py
 create mode 100644 imageuploader/pictures/views.py

diff --git a/imageuploader/pictures/__init__.py b/imageuploader/pictures/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/imageuploader/pictures/__pycache__/__init__.cpython-313.pyc b/imageuploader/pictures/__pycache__/__init__.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9bbe52a22f064f48c1b82cc0ada72dc3d8bb83f3
GIT binary patch
literal 153
zcmey&%ge>Uz`*e5*ZXu3{TM{RFe8-lnT3IYVJbs9gC?WjN`@jP1_p-DAgNmx`WgAT
zsrpG(#re5O`9=E0RjEmtIf+Ro`kA?j>8Yg!Ir)hxsYUt)`Nbv0`tk9Zd6^~g@p=W7
iw>WHa^HWN5QtgUZ85kHq78QdSADI~$8H<=17#IKyk|v`7

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/__pycache__/admin.cpython-313.pyc b/imageuploader/pictures/__pycache__/admin.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4917768c6fb9e9c5917537201cbce6fb0337ebbc
GIT binary patch
literal 326
zcmey&%ge>Uz`#%?{4qU*fq~&Mhy%mSP{!vV1_p+y48aV+jNS}hj75wJ48csn%-&31
z%tg!!3^9yB98i@=R1h~32g;0LHf4k`6&TW4G+AGQIGT*NSQArnGxJ`8<TM#?u>|B7
zm-uP2-Qr8hO3X{o*GtaND=ErMDgwFZ7F%w9N@`AV5i0`&!!4HL%#zew97U<=nZ+fk
zMJpLTgG{_-s-Kaco2s8wRh*xjlwYJ@T$P%XnUk1gqMw<Yn4Vf%kdvR7l3Ju+kY8L<
ztPi$aub}c4hfQvNN@-52T@fz>0|Ur4#j*?x3?G;o85!>~DBNX`c)-Bg&eh0uok92_
PgYX2Gs|=DwAa4Qy%~ndy

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/__pycache__/apps.cpython-313.pyc b/imageuploader/pictures/__pycache__/apps.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..cf2f236a9f67da466e76327eca0189bf5928d727
GIT binary patch
literal 515
zcmey&%ge>Uz`*e5*ZcH71_p-5APx+(LK&ac7#J9)G6XXOGkP<4F%~f@Fi0>cF$6P7
zF$6QmFq$$$)D<zMvuLuu1aUMOZ*e*n6gcPSrDdikgG6AM5z6>112!{;p@=b<p@=D%
zv4}aCsfZ<*xrjBGrHCz^Rg>)&cR+q|NioEbmn;kn3{|ozS&4b+`Fbfydb#;2sX4`Z
zPMPVBr6u`pnW;G`w^$268dfs+X|mtqh>y=p%uS7tzr__FpPQdjnge3<#K#wwCgwn8
z_~YZ#GK-2!ax(K$^YY{4ZwaNOrX`l<l*A{NmgL8$femE=DZV8dA75OOSdy6>pIA~-
zl$lgol3E-eU&O({!0;L5rCTQY8Tq-X`bkyA`MF8?Mf$~6sY#hRiAg5<nYoGSsig%u
z`H3m1MfzYT>L(Ty6zdgK7J-5oOn|&s%*(*Q(8h2>(&7S(*bQ!>W|txX1_lPOyq_lX
zEpDjqL7Iy|few}dy8)t5kb!~W7KaVQw{}Is3=9mQ@Gcf%U|{&b%*e=imqGCh8xy1O
N1kJAuOpL-{T>vKsh;#q|

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/__pycache__/forms.cpython-313.pyc b/imageuploader/pictures/__pycache__/forms.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..43537214a77a2d0b4d53cbb7ebc03278f7ad8ee7
GIT binary patch
literal 781
zcmey&%ge>Uz`(G{^<(;G1_p-5APx+(LK&ak7#J9)G6XXOGkP<4F%~f@Fa$FNGkY_6
zF&8l_Fi0>cF$A+nF$A;5Fa~iz^&nBE%n(iyYdV`I`%4f<lkpa7T7FS(@k>Sq1_n*W
zTWq=cDXBTd$skD>W`Qz3Yk;kfVJKn@W+-9`W-MX`TgfEF5X@}K1W{GQ63kM>n$D`p
zc8kloC^fMpH6XvZ<R!=q6hooP89tj}7#hP81P%*`fiSX&O`jo{DUh*<J(#(OBb`N)
z^%g(E0zKc<lEjywfYM~S#afbCl9PIiB`H6p@)k>RPHFlrwxq<oywswV41SuNw>aYC
z^AdAY<Ku5}#mDF7r<CS^*gWy^g{6r(P#OOC__WNT;*y-qywtq>`1m4_*|%6gp1H*e
z4y0RbX_=`xDaE%$<Kv4<5=%0Z;}c6tiZYW*OHzyD<BJ3s7#Kc-Tz|_{KO;XkRX?e!
zI6pTjzevBhDm5uHCo#!HKQlKmJ+-tTCqFSIwMf4pzqq7W9~>Wg1(mm0Kz=F$1qI0N
zVvu=l3^xSCrgKl^?qIzoXxPnGB+0<QP$Uf^K+=AiY(;_~ju40t1`#440<1s+!~&^;
zXp#bP*<l1Ieu{Y*7#P|ZzB4hg8hv44Vl{#&1gY`UWV^+dl9ia3o?iq?MYk9r;lb$(
zN-l2sMY%;FWne!;bb*Y&#bE;pUArQA1_lOD5-SEd<pVP#Bja5LiMtFUUs#wKjV6dr
Om!ByAm4TTNVkH2XgsnFK

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/__pycache__/models.cpython-313.pyc b/imageuploader/pictures/__pycache__/models.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f6c0a46293e668f1281cb5cd0f1d5840ba5f9c86
GIT binary patch
literal 1208
zcmey&%ge>Uz`(G><74`1Mh1q*APx+(LK&ak7#J9)G6XXOGkP<4F%~f@fY?mlOkT`I
z%nA$=3`z{a%u)=&EHR8h98f(-lqoZWQ^cCis>${e#L;BD#g?0&lA2Sj$#{z;v^cdW
z86*tD>`=z%Uto)47>XE!8H$*K8H<=>Sc1R~hN^&4N({kF!OWJ7MQkxFL3~g_Bua_F
z6v`{&h+zp5f^v{3Bo$mSEJ0#OQc$K6LoiD)t0iL*PYg?t6jTt2Qep^Z3uXysw`3~f
zi(v_pLz03rl^9|KVpxKdpj;#>m?fAanA4J_NGO;~ilIn2n7c?MokNr77E3^Wamh;-
z1_p+g-V6*3nvA!&auX}!b5irtOEN+<8E^3<mX_ql=jE5jC#IxS@uVf@<Rm2~XX_Q@
zrE4<XVoym;ODxSPxy724lbDz7r^$SaGe0jrB{e6tB=r_cUTIEF5jO(^Loy?hV?b<B
zlzj$yaw<b8LlBZAjH$w)$>^uac#E|pvm_@K6pO{FIcdcpy$ZL?^fU5vQ}vUoit}@m
z@{9C~t5TCPa}twG^fPl4(^E?ea`F>XQj7Ep@{3D~^&tsCub}c4dwhIxNl|?KEgq1!
z^`JZ+1_p*=5YfPJgI~D6s<Y|>hva9FLsl|qir(UgkIzfYO^uJg#T6f)o1ape17h>U
z#}}3+=0Iim<KxpZi;7EfGV@aN^5f%+K>oYM>70>R<d&J5lTswWz`$^eGbFX51kAt1
zl9ZoPd5beRr!*ZZP@Gemev8*7u_QGlGdC3~n37nMdW*{w<SB><TT)_PUTV=TF1P%m
z)Xele@6^g7Q0(1ecXkYRc64#Q#g<rFl969jBn+}q6y(LklFa1z#FCPt%%swi)Z+N~
zB2elp5@lduC<3L_A~p~UM1V{xE?{6_Xk)m+BXpfd<`R$03Z{!Z+6}HZxCO6sOJCxa
zzRWG#;DUuGe~DXuMaV^NqXw57yu#Oc<u38cEvVZOa*@}m!3{1lqhv+d`nr{M2V5=$
zg<a$gZ*cp{!pJHGaSX@_ewu8zI8(9`^V0M6Qj#FyC<Wyw=jVYup$GDz9wb&Fo@ez1
z<#mWZQ2lm`!v+#%c179@3=E*;Q!LHE!0>^Yk&*E(gUnq9?Jq2xj8YwD{WhI8Ul}+V
HA#MQx0jVAz

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/__pycache__/urls.cpython-313.pyc b/imageuploader/pictures/__pycache__/urls.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2c3110390a56b093c75efa8d3646973991d44ac3
GIT binary patch
literal 569
zcmey&%ge>Uz`$_R?PIzyBLl-@5C?`ipp4Jc7#J9)G6XXOGkP<4F%~f@fY?mlOkT`I
z%nA&_%)u<)EMBZdtO^XltVL`w%t{QwY%#1sd{F&JR4{umhb1#u1!oLvkN}btlo`wg
zSHT^_8YBc2MxugwKq~Z^i@4HxHThnGWHcFXu_mVEX69)!-eM_8EXjDu$iTn=5-rP2
zEib;sT998{QhbZy7E4ZMaS2FKUSe))6=z;*xh_abzlsCKtm3vQ&M8f|0ugo~!_rgz
zG`Vl_rDP@MrRVD<=jW9aWhNCdGcYjR;)V*A7UdKdu`n<&6oG=Qhz%sikyua=53=PJ
z7s!U<c#zGvI6&<9ywvhroM2W#VtVQ=?$V;1g2a-N)S|rNl?<Oj9=c_spOK%Ns-IL<
zoS&PNU!-4Lm70{9lbB?ppP8GOo?2Rvlb@K9TBHv$rC1;20KJ0BTO2mI`6;D2sdhzT
z3=9mQFevt8U|{&b%*e=imqFn!gUnq9;RoD84ICfY7+5(wggQd6^U7Z2m0jR=kwyC^
u3rC0agw*MI6Z2MBU1Tu>@nvVQ&gY-Wzas4-i|Ge;7JjBi?jjKe1_l5*9+dF_

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/__pycache__/views.cpython-313.pyc b/imageuploader/pictures/__pycache__/views.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..588b26383ed22003960d4cea1036e80d4e9e7d9c
GIT binary patch
literal 1817
zcmey&%ge>Uz`$_9?PGd9GXuk85C?`?pp4Hk3=9lY8G;#t8NC_27>gLan2MMb7=oFC
znZ234Sc+H_KyobJtX^zIY+!L#Z+0(^A`S(HU^Xd+BF<oTDTX4h7&aw_V2)r;OU7U>
zDF#!h;YHl(+?qTuK|D>STWm$Cc`2zyw>XMYQ!<NElS^JQGB7Y`GTved$S*F@WW2?f
zlb@cM7hjZGSejXsnxe^gi#093D7QEnqz+^V2(vLTFfcPPFnq28J3JaB2F5{5U<!o@
zVnyMCIWWfsv4goNL@=W%)UG_nXik_^C^$Gm84VasK{himFsLwSviMc8>ZT-?q*jR*
z<QJC|>x0SooXp}9y^NCFoLj750ZrB-kc)4z=O<;QCYKc7VouD-xy6xRl#*H$pHx`{
zGEkH07CXq(sl_ElpcpF#`9wkCmZ^S5er~FMQdMz&Zc=`cesNW5Qf5wKl8Jt1Zen_B
zX+chYVoGWe#Af}n%+&H?y@JYHTwsgAE-4aVU|`^2U|=XVVPIfrV7S90(C^dfbDc-#
zB9F{v9=Yp0>KA#`SFm5^F=%kT!!0;L{era7hVUJ!7ff6(bGu$(as3Pmgk+F|KnxHD
zc?aa`&rxJXKqzA{qa|Y=Q#3pRpaIN;7QmpSQJhnnUL^wd5!j#c1&QgYkN{=@iE6Td
z!?%c=fq~%`b9!nCBt)5u_!t-%iiAOg2+02+7b_?z6!C-9ae{P$O)3&&U|`?{DbQsA
z2M{-ZzfGsjb#Cd4+|mm~E^td<;8tsJfd-A?2Dcq98|*G~J6&LLDiUO1V5s8NFD*_j
zD%J-lU42c)Tby84d}&b*_GFvH2+D7v3_+l<M8m<1RuK#gi8Txi(eMxtg5^{swMq=3
z3_+lHKoSEnLm7fVkqu%ZVN<ACd5ocqL7;F#k^?be8A1cZVPIfLv}RxkWefs^3RDC}
zfl38X%!M)pfr1w%45dSva^SXyGGWsXvq^y=8Wb~NeZefSET_WYFG|SYFcb0^qea2m
z85kHs8G>1Z+0e2lyWcIA0RP|+H%-P{Y{~h#xtS$Zkc?pk%A!@mpd<jvwDEbV<<Jxb
zDsD8nZ?Wa3mSp6o6oI^Ri_5tvHL)ZWR7Mp^f>IBwo2QR!@GXwa;`p+}oXnJ4EX9ds
zskc}_3E>u7VrfZ6eo+x9)=-k7G)OCZUTQhmVwB{_0TKeaqDX~-fdQ1PihIDR@c}zu
zdtGDQ46)1X@^|<}uJg-Z;+J2*zMN+v&x-W*xhr!o^V@W=+~DT#x9zm;x9_ySAtp6F
zb7JO#(g~Rt#B@8{Z^)|5kC_?M;ojqSgGU&Y^?Us82usiKxh$-Cfk*QLCj*c47aj%y
zQHar(`4u}@plRIzl-4g8IbG&<zQE!PPV9b~Jhuc=vJ&&s^Yw}|@{3B6OG}Euo&<aM
z7F%w9N@`9qI78l&gDOnU&nqd)Owt2|i(X1<a(+=_Nq$jr5h(NDVgLs*xRe6tL~sDC
zWB}U+$*LSSx%nxjIjMF<S_}*fpu)M>f`NhI12ZEd<9!C*y9^R{87%KI2!G;WVsvBt
j#Kpwu%=nRmfk|M7{zXQuk4#*QE{va<8JM&oOt8rS&75@h

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/admin.py b/imageuploader/pictures/admin.py
new file mode 100644
index 0000000..112f607
--- /dev/null
+++ b/imageuploader/pictures/admin.py
@@ -0,0 +1,4 @@
+from django.contrib import admin
+from .models import Post
+
+admin.site.register(Post)
\ No newline at end of file
diff --git a/imageuploader/pictures/apps.py b/imageuploader/pictures/apps.py
new file mode 100644
index 0000000..b38c60c
--- /dev/null
+++ b/imageuploader/pictures/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class PostsConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'pictures'
diff --git a/imageuploader/pictures/forms.py b/imageuploader/pictures/forms.py
new file mode 100644
index 0000000..37e0e85
--- /dev/null
+++ b/imageuploader/pictures/forms.py
@@ -0,0 +1,7 @@
+from django import forms 
+from . import models 
+
+class CreatePost(forms.ModelForm): 
+    class Meta: 
+        model = models.Post
+        fields = ['title','body','slug','banner']
\ No newline at end of file
diff --git a/imageuploader/pictures/migrations/0001_initial.py b/imageuploader/pictures/migrations/0001_initial.py
new file mode 100644
index 0000000..6297b53
--- /dev/null
+++ b/imageuploader/pictures/migrations/0001_initial.py
@@ -0,0 +1,24 @@
+# Generated by Django 5.2 on 2025-04-05 09:57
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Post',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(max_length=75)),
+                ('body', models.TextField()),
+                ('slug', models.SlugField()),
+                ('date', models.DateTimeField(auto_now_add=True)),
+            ],
+        ),
+    ]
diff --git a/imageuploader/pictures/migrations/0002_post_banner.py b/imageuploader/pictures/migrations/0002_post_banner.py
new file mode 100644
index 0000000..912685a
--- /dev/null
+++ b/imageuploader/pictures/migrations/0002_post_banner.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.2 on 2025-04-05 12:32
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('posts', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='post',
+            name='banner',
+            field=models.ImageField(blank=True, default='fallback.png', upload_to=''),
+        ),
+    ]
diff --git a/imageuploader/pictures/migrations/0003_post_author.py b/imageuploader/pictures/migrations/0003_post_author.py
new file mode 100644
index 0000000..3413a52
--- /dev/null
+++ b/imageuploader/pictures/migrations/0003_post_author.py
@@ -0,0 +1,21 @@
+# Generated by Django 5.2 on 2025-04-05 15:06
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('posts', '0002_post_banner'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='post',
+            name='author',
+            field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/imageuploader/pictures/migrations/0004_alter_post_author.py b/imageuploader/pictures/migrations/0004_alter_post_author.py
new file mode 100644
index 0000000..d89258f
--- /dev/null
+++ b/imageuploader/pictures/migrations/0004_alter_post_author.py
@@ -0,0 +1,21 @@
+# Generated by Django 5.2 on 2025-04-05 15:14
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('posts', '0003_post_author'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='post',
+            name='author',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/imageuploader/pictures/migrations/__init__.py b/imageuploader/pictures/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/imageuploader/pictures/migrations/__pycache__/0001_initial.cpython-313.pyc b/imageuploader/pictures/migrations/__pycache__/0001_initial.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1e977a8357823b3158c2349cd2b0c73a5dd205bd
GIT binary patch
literal 1125
zcmey&%ge>Uz`!u&--q-TCI*JbAPx+(LK&a!7#J9)G6XXOGkP<4F%~g;F%>Z>Fi0>c
zF$6P7F$6QmFb1(f)gn=*%n(iyb2^JA>q`(vlj#;$Zf1H>Vo7FxUhyrq-29Z(oZ@7V
z6b$n~8K1v^EsbF)Vhm;|VhUy~Vh(01V$o+PVvS)7;)AL}qLdhdnS)tkID&+b1ffij
zLxY)uS%cYv*)3U2n1VTCID$l=l1P*iLojDBmnEYKQ!sZ7N01nj6qKpNU<zfKFa`6(
za0E#}xkwa>8r~R=ASonCC==`=K9EiNtik-2O!|yPe8B=m{ON+4Lbo`5VPW(V6s{q+
zSOW5kOKve`rnuc=@^sN;xy6%MT9O~1T$GwvlA3ahyPzmDH?gQPK0CGY7H4s4QD$OJ
zW>xAfp0d=Ur2OL4_`Jm2)LX12nI$=?FTEKU7&IAgapfjf#OI{urI%#fVoAzRsl3Hf
zoKu>9izOwoBvq3UYC~Rrd3<6@iYC)77O)v?X_=`xDa9)p{4@n_am0fSj*q{^6(66Q
zpHiBW8Xtd)CqBNgG%*LHJU;#we|&seW>IlTPG(+eUVeQ1E%wa3%#zH+oLf98sRgNd
zDXDqMnW@D^ptN#}+ZpU3Ur?$jVqsulxW(g?neJFxlJ5qx_7<meMq&|^8IoF20%Zp0
zl%_+Nye^3)sUexUsSqw#enBcMt%=6R7ndZKWG2TamXs7_CY6??7RSdIfuip-C{Av<
z>u2QWrs^kE73b$B<rnD}SEVLp<|HPW=x638rl*z`<m4x&q!#HH<QJC|>myRJzJY;(
zVLa4VdIgn5peO?qAV%>71_p*Uh6j8?4elRU7)96`d_Hh6a0*}Nkh{bocSBJ8fuQJw
zvg_hnm&CPpu$)l25EXwRujrz9@dbgB8-fxu)UHcuU6Rt;kaSVX@`8ZX4MFi4V%H@#
zFG*@%mejr=po2?5_mZUU4wH+L4i^L*KX9{&@O@<E<mCFm%q_&$>{X=Bz`y`@qMs(q
zEzXpz#Ju!;y_6(yEPw+ZEC~)Ah*}L$WN_F(BH6A;i-CcGk%57sScZXt;R7=xBja~A
c21d;<Y(k7|6S%Gms9Y3K`N|-~$OhI80HJyz5C8xG

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/migrations/__pycache__/0002_post_banner.cpython-313.pyc b/imageuploader/pictures/migrations/__pycache__/0002_post_banner.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5a736588e1ecc08fe2868920dae4005e0a30e248
GIT binary patch
literal 801
zcmey&%ge>Uz`*cZ>0|n2Mh1q*APx+(LK&a!7#J9)G6XXOGkP<4F%~g;F%>Z>Fi0>c
zF$6P7F$6QmFb1(f)gn=*%n(iyb2^JA>q`(vlj#;$Zf1H>Vo7FxUhyrq-29Z(oZ@7V
z6byr%!@$7sIRR{G3_}rPFhdbjFk=yOFq1xG5lakf5D!c-f>vS(W)5bFVGj~Oh{0G&
z48g3yY{Bfo9G1+%oR-Y`j76NmTt!^z+?qVMIDKL6c?t4^Cetm}g8br=;#)ih1_p-l
znR%HdnTa{KSU`fe*pd?S@=}XJs(8{8b8?arle6^-^3rcHXfoeoP0C5k%f7{)lA4xS
znp1L%v$P;5KQSe~Bwv&H78lr~@p*~4skd0bBx_n`YEH^Z20u;iTO9FVnfUlyT=DU_
z`6;D2sqyi*c;e#=OA~WIs^jBt@yExfWfm2e<YeZh=H-K=Q&J03^HNgtk~33_i$Fnr
zi^DM`#SLU^5eowY!!0h)+{E-$u)r;@{DM?isEfwO7ndZKWG2TamXs7_CY6??7RSdI
z34;P16lAx&^)vEwQ}vUoit}@m@{9C~t5TCPa}twG^fN&wLOhmQqz?*`Vtqt>>Khms
z7{!A`<00XsS5R353RExwVibc?QX9huHU>_m56ny=Yz;mixEMHvuX9LW;*h=}E_*{z
z@`jMabs^<TLdq*tcJN&Y3b`m0`jMT5lj{RBn-E*GSCK3O0|VGVKTVcfoGDp}dFlCj
zDM{cU0DBxP3HA;|tsE#YIBXyRYgeSez`(%Bz`#%}!@$7sftit!@jDv>qvjVj9!9na
TT-OCuE()l8W#D0C1M3C=ZOG6u

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/migrations/__pycache__/0003_post_author.cpython-313.pyc b/imageuploader/pictures/migrations/__pycache__/0003_post_author.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..61d358c9351fe2644f2a6c4bba479d6161439646
GIT binary patch
literal 1150
zcmey&%ge>Uz`$_Z?PIzV69dCz5C?`?p^VQ#3=9lY8G;#t8NC^b7=sytnY@|2n2VSd
zKw`|^EMBZdtX^zIYzhn#3`z{aEK&@?tTC)Xd{F&JlqoZWQ^cOmsLA#c#PQQ)yv0$R
zT2hjkmtL&Nbc-uDGrcIWBr`v+_!e7keoAUiaWY6941?Xvz`*eN7uZ!XU>6lJ1v3^g
z2Q$U61i|EC>KPaqlo(>zu)2m3qDY^qh$Dt2NC?71CY2b1nS)tkxPruxMIme@kS}?H
zq#!(GGDrlO2Vn=vKxkw#NDi3?VPkh`Fq<WFFuNtQK4XzUFh`MKI;$q<ElyupNWJ7>
zU|`T>y2V<MUtCgrOTfUuz$hNXj!#O=%S$b~#RB5oVoNM7$;dDA(`3HIo|2lDSejFE
zi!(njJ|#6LwIuZxQ%Sxi^DQoLn8)WO=BD0a0h6q0nW;G`D;YF}ZgIqeCF0|6amB~y
z=BJeAq{heJ;)#zhEKSS-DUOf7#UCG^mRVF>l9QR2nwK9RU&O+|z;H{XxID3-ATcQ?
zH9jS^AT=)~H7~ic2$URd@jHfwc*KVWy9UMk`n$OL+~R?&$V@H1#o?He;s$a-5hy|4
z;&RI`O3h5q^G>b2#g>wln3tY^izy}P76;fDnfZCQ*qt4NogH0VZ*k=pq{5PtXncHe
zNn%N6a(rS*Nl|7}X-R5ve0-5GC?$bH{+73XMt*Lpeo|F&er{5Jk$!PiYEouSVv>n|
zW^Q77YH2}Eequ^$kv=FSi}ewSRNuhBz!(zPkl@uTs4QY<U|;|fpol5XV_;xtWB9<v
zz^QhFL+Cn(`Xvta6&%+!94=}&T;_26z{)Jb*5LDjhk;Z0I*0Tn4(S`>vNr@JZwN_T
z7gD|?q`bmqhueP7ou1cid@kDfT(=3mXcKzfCibFD?1iMP>q%7?ld3KXRexk>;pF<j
z%qGOv>{X-;bATqtElEfy>7^v;f#bGV4;EBKvY@EphRP@B=cPengcB-~k_3)CaKMAT
z0}d~U;VK}l95#?dU{|EUz`y{?PQ^+L3=AKb85tQrvoSC#-epj@&!F*zjhB&a0@rl`
Qm5Tx@Um18A*}!H10Ihl(1^@s6

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/migrations/__pycache__/0004_alter_post_author.cpython-313.pyc b/imageuploader/pictures/migrations/__pycache__/0004_alter_post_author.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b7592ef74e81f97843e50507d3a713fe836433b0
GIT binary patch
literal 1180
zcmey&%ge>Uz`(H2<72u%69dCz5C?`?p^VQ#3=9lY8G;#t8NC^b7=sytnY@|2n2VSd
zKw`|^EMBZdtX^zIYzhn#3`z{aEK&@?tTC)Xd{F&JlqoZWQ^cOmsLA#c#PQQ)yv0$R
zT2hjkmtL&Nbc-uDGrcIWBr`v+_!e7keoAUiaWY6940A&npZ|be6$5rr5mPW@5pyt8
z3`-E$KTtJLN{Jzc4XbMyAqw=Fia26ef`lMEWKxMCm^qjwhAT)6Sro!nVhCmpW{cqo
zl7jG&$siGA9)ukv1EG=0AUR|ngpJ*;!R(eS!5o&%`iw;a!JI{c>8zSuw>W)aVfB)O
zfq_Aj=@x52esM|hEdc`q1LJrQJ3g_rBqP7*77K`Tiw(l_3(;h`#h#LymROooa*HLe
zG$-d4XMSFMN@`AON$M@8l6+0(TU_A4kIzfYO})heCRx)mQ*%;QGH43j;)n-J#K+&_
zijU9DPbtkwjgP;@6CYn#nwSGp93Ov+KR!M!v#7WvCo?ZKFF!uMh=qZH;g(2od1669
zVp2|Od`fCTYF<ieUUFp-C|%s*cMJ{jhz|{R4T|^mcX9Q(#RFH7nOb~{%Q2@Uwa5+R
zh9Xefyv5~~UzD1ep68ufd5bM2D={xU{}xk9(k%|KKQi<4Zm~N%20J^txZdK*FGz)@
zD$)4(;*!LY%;fmQl9Hm#q|%bq;`sO?P?UWJMZv8={fzwFRQ;r?;{4pC{38A0s??;+
zoWvv({mk6N^wiRVoczR;)FORQkQVDB(yP9Kfq_YUBFL4<VXs$ES;Wr3zyKyd@l;&R
zz`)SP@PUniQ|$(a&~*;=OC0JeIIe3rT-0#5%;ETfm05(X!RG@H1E=tH4%tf_vNyzK
zZwN}>5R$kqq<l$8d4<b{k^^POD-Tv)cMrel9)8_D;i7xOb@z;m?im+yOTRNP<T1K2
zeS}lO?o1!qSva{qFtZ7<HG37Qz+9uraZ3^saC#|8df*5z)`Nv!5h!uq;)cp6=jWwC
zqKOkKl9B|DQE*&<{RR#~h~cWBsOGSNqzt<vO$G)AP-ZJuVqjqSz|6?V_?eA?QSmN=
d!hHsfFKoPwY!kSy3#eQaQ2ENh%g6>c0|1isBsc&7

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/migrations/__pycache__/__init__.cpython-313.pyc b/imageuploader/pictures/migrations/__pycache__/__init__.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bcc84e21da6819ac225362e4b4645aa14d92499e
GIT binary patch
literal 164
zcmey&%ge>Uz`*e5*ZXu3{TM{RFe8-lnT3IYVJbs9gC?WjN`@jP1_p-DAgNo<`WgAT
zsrpG(#re5O`9=E0RjEmtIf+Ro`kA?j>8Yg!Ir)hxsYUt)`Nbv0`nj3uMTsSu`FX|q
t@$s2?nI-Y@dIgoYIBatBQ%ZAE?TT0#7#Kiy7K0ccnHd=wi<lW07yu~OD;fX*

literal 0
HcmV?d00001

diff --git a/imageuploader/pictures/models.py b/imageuploader/pictures/models.py
new file mode 100644
index 0000000..e255e6f
--- /dev/null
+++ b/imageuploader/pictures/models.py
@@ -0,0 +1,13 @@
+from django.db import models
+from django.contrib.auth.models import User
+
+class Picture(models.Model):
+    title = models.CharField(max_length=75)
+    body = models.TextField()
+    slug = models.SlugField()
+    date = models.DateTimeField(auto_now_add=True)
+    banner = models.ImageField(default='fallback.png', blank=True)
+    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, default=None)
+
+    def __str__(self):
+        return self.title
\ No newline at end of file
diff --git a/imageuploader/pictures/templates/posts/picture_new.html b/imageuploader/pictures/templates/posts/picture_new.html
new file mode 100644
index 0000000..11741b0
--- /dev/null
+++ b/imageuploader/pictures/templates/posts/picture_new.html
@@ -0,0 +1,16 @@
+{% extends 'layout.html' %}
+
+{% block title %}
+   New Picture
+{% endblock %}
+
+{% block content %}
+    <section>
+        <h1>New Picture</h1>
+        <form class="form-with-validation" action="{% url 'posts:new-picture' %}" method="post" enctype="multipart/form-data">
+            {% csrf_token %} 
+            {{ form }}
+            <button class="form-submit">Add Picture</button>
+        </form>
+    </section>
+{% endblock %}
\ No newline at end of file
diff --git a/imageuploader/pictures/templates/posts/picture_page.html b/imageuploader/pictures/templates/posts/picture_page.html
new file mode 100644
index 0000000..d828673
--- /dev/null
+++ b/imageuploader/pictures/templates/posts/picture_page.html
@@ -0,0 +1,21 @@
+{% extends 'layout.html' %}
+
+{% block title %}
+    {{ picture.title }}
+{% endblock %}
+
+{% block content %}
+    <section>
+        <img 
+            class="banner"
+            src="{{ picture.banner.url }}"
+            alt="{{ picture.title }}"
+        />
+        <h1>
+            {{ picture.title }}
+        </h1>
+        <p>{{ picture.date }}</p>
+        <p>{{ picture.body }}</p>
+        
+    </section>
+{% endblock %}
\ No newline at end of file
diff --git a/imageuploader/pictures/templates/posts/pictures_list.html b/imageuploader/pictures/templates/posts/pictures_list.html
new file mode 100644
index 0000000..b17308e
--- /dev/null
+++ b/imageuploader/pictures/templates/posts/pictures_list.html
@@ -0,0 +1,23 @@
+{% extends 'layout.html' %}
+
+{% block title %}
+    Pictures
+{% endblock %}
+
+{% block content %}
+    <section>
+    <h1>Pictures</h1>
+
+    {% for picture in pictures %}
+        <article class="post">
+            <h2>
+                <a href="{%  url 'pictures:page' slug=picture.slug %}">
+                    {{ picture.title }}
+                </a>
+            </h2>
+            <p>{{ picture.date }} by {{ picture.author }}</p>
+            <p>{{ picture.body }}</p>
+        </article>
+    {% endfor %}
+</section>
+{% endblock %}
\ No newline at end of file
diff --git a/imageuploader/pictures/tests.py b/imageuploader/pictures/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/imageuploader/pictures/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/imageuploader/pictures/urls.py b/imageuploader/pictures/urls.py
new file mode 100644
index 0000000..2ea0e73
--- /dev/null
+++ b/imageuploader/pictures/urls.py
@@ -0,0 +1,11 @@
+from django.contrib import admin
+from django.urls import path
+from . import views
+
+app_name = "pictures"
+
+urlpatterns = [
+    path("", views.pictures_list, name="list"),
+    path('new-picture/', views.picture_new, name="new-picture"),
+    path("<slug:slug>", views.picture_page, name="page")
+]
\ No newline at end of file
diff --git a/imageuploader/pictures/views.py b/imageuploader/pictures/views.py
new file mode 100644
index 0000000..e5818e1
--- /dev/null
+++ b/imageuploader/pictures/views.py
@@ -0,0 +1,28 @@
+from django.shortcuts import render, redirect
+from .models import Post
+from django.contrib.auth.decorators import login_required
+from . import forms
+
+
+
+def pictures_list(request):
+    pictures = Post.objects.all().order_by('-date')
+    return render(request, 'posts/posts_list.html', {'pictures': pictures})
+
+
+def picture_page(request, slug):
+    picture = Post.objects.get(slug=slug)
+    return render(request, 'pictures/picture_page.html', {'picture': picture})
+
+@login_required(login_url="/users/login/")
+def picture_new(request):
+    if request.method == 'POST': 
+        form = forms.CreatePost(request.POST, request.FILES) 
+        if form.is_valid():
+            newpicture = form.save(commit=False) 
+            newpicture.author = request.user 
+            newpicture.save()
+            return redirect('pictures:list')
+    else:
+        form = forms.CreatePost()
+    return render(request, 'pictures/picture_new.html', { 'form': form })
\ No newline at end of file
-- 
GitLab