From 97be83499ce15a92dd9296a58eeea83280bf2342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Thu, 23 Mar 2023 07:50:42 +0000 Subject: [PATCH 01/14] Finish Introduction and Django Admin --- blango/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 0 -> 2498 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 0 -> 904 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 0 -> 531 bytes blango/settings.py | 16 +++++-- blog/__init__.py | 0 blog/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 0 -> 532 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 0 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 0 -> 1181 bytes blog/admin.py | 10 +++++ blog/apps.py | 6 +++ blog/migrations/0001_initial.py | 39 ++++++++++++++++++ blog/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-36.pyc | Bin 0 -> 1231 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 139 bytes blog/models.py | 22 ++++++++++ blog/tests.py | 3 ++ blog/views.py | 3 ++ db.sqlite3 | Bin 0 -> 163840 bytes 20 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 blango/__pycache__/__init__.cpython-36.pyc create mode 100644 blango/__pycache__/settings.cpython-36.pyc create mode 100644 blango/__pycache__/urls.cpython-36.pyc create mode 100644 blango/__pycache__/wsgi.cpython-36.pyc create mode 100644 blog/__init__.py create mode 100644 blog/__pycache__/__init__.cpython-36.pyc create mode 100644 blog/__pycache__/admin.cpython-36.pyc create mode 100644 blog/__pycache__/apps.cpython-36.pyc create mode 100644 blog/__pycache__/models.cpython-36.pyc create mode 100644 blog/admin.py create mode 100644 blog/apps.py create mode 100644 blog/migrations/0001_initial.py create mode 100644 blog/migrations/__init__.py create mode 100644 blog/migrations/__pycache__/0001_initial.cpython-36.pyc create mode 100644 blog/migrations/__pycache__/__init__.cpython-36.pyc create mode 100644 blog/models.py create mode 100644 blog/tests.py create mode 100644 blog/views.py create mode 100644 db.sqlite3 diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e95ef762d4e64bc83602aefefeec895d5145783c GIT binary patch literal 130 zcmXr!<>ks`kV#&=ek&P@K*9*(m%e^Rer~FMa(+r? yzJ7UrQFd`bVsff}QchxCdOnPbkI&4@EQycTE2zB1VUwGmQks)$2QsJ_h#3IgTpd{e literal 0 HcmV?d00001 diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1497235fd5b1cf7d3e0a685c69ff90ac74bf0f25 GIT binary patch literal 2498 zcmb7F-E!Ji5Jn(=jBVmLPMrV9P2B`LNOtULl1?X$48mc8kq3#m)kQRdJ(dp<5|Kn4 z>o%{E7w9YLwpV?HUUemeO>r(<#1V)6`F8c~?$OTTVzJHKhfFDz`YSc{Dd7GME-%NV zQjpS8z(Cq!25BwLMEi`D(J~}W*sn}K`!&_i^>bPtSginAZ4PoKqZJ`fGX44f0u;V7 zt0|aUO=*je(MnL9m811F^jpGp9p=$uUR#C*ScDQ>gC)2Q%Vu7?0XJX;Zo(~CHM80Z z+}3Ww9Ww=4xC{5-K0JVjCQBK3^o>QlTfk|num(SnJUqUaf*-%7DWlznb@&Nw*5OHf ze;VJ*lrdTD4s2+5VN<(@S=`6<0M|o!ragj+#z96&m3d zBwt|+@1GFvcw||eMLnN$jxV0aumJ-R>T;hAYec;N6U!yXQ-S`D8mi2M?4jYGw1T~a z25NhxH*!g3)3euMXsm6${CU&dT;JUdUTu8nfA~}x?b>Vor;ksq@|Rb}y1wlU-vq() z&FzXBG8@6X*lfy2m3mt~;IvXzt~F%+t*odm@jwbnm6uyvTYS#}>hRPF3KNn-w&mC) zSQ#gQ2Db0gE+5w8DZo?Y~Mc{5-(VtQF_Gluu7K|15_9$dfc7$@UgDF zsG6R}b}h#YDv8B_0$AkKa0wqXMg22gi73O(!MQHjodrx%;HUhRv24n#d^rd<%fPYu zYWy>0`eG)4fvik}i})W2p}n|4ryOT9n{Y7gd@$x^%4>c+Mf}LMyg*1|`(!Y*aFF<} z(fdejm^3KQzL$x8dlwdVs>(nzT zZw!Z4Qid=ON)@VRn+PjR9C3a=xX_<~%4GIDt;Mns*@F2lODhCb_%j5T`i8JBU zDY2lu7Up#wk7ivD^FurUE!uU{NNt#Qys)6_(d0)umw1l#nS{9^4!rGag*{P`qGE?d zMXI(XRevY_5oT-BUS~gCjL$x)79V&@m?!pU>N<9qF^L~u`(3ZMv4VQiBjHL_Y1j3t zEWc|=x`G;|p-PEVZFdwEf#h}rYp;aM|FM;-owgL-R3t^gZaaq60tm>V1vnsdh;hZWR95zK&Qo^MpWxo;GHyc$k>g{l@CaPk@ zf)d^qJL+5gP*jv7xn0xWi_HcqWgLmcrr6r=i2D*ISCbI1fe)_9*u{ko^4HjY*&6Sf z+gq(L7s*r&DOE8>HOeDgu1R&V(^PegA?x*q)U5rPayPI<@$DZ$IB^CfjN5OuQIZAn}B13mbbjaXu6Z!18cii%2z10R>Yq~6%O>m{}$+o3I2ehq&q zS58R$0#1y*St&w7s--v+XZ+^9H*1Z- zk&j39NG6LULOfv!kGJFP@}{1b=c_EaqBNw>@@x=_>C>_r8ZbC2;UNF4&kvG8z(65f1+klHmd$!y8!h<^D=PVm%*R=t zUewguCrc2<2B`mIq1}cXPoxM&?diM)tib-BYUn7u zG;{CIRWJqv6=;vo<gvkXac#iY^F3EG7FH*ovZ9O&L!qHm5avIo2ML04u&74U-=wY4!ML%<6Q~H z@s%wUPhP?_$fzIry#id;yk#3U{Ql|BlhNQZ8=qZW4M&4nE(I) literal 0 HcmV?d00001 diff --git a/blango/settings.py b/blango/settings.py index f9209bef27..a0c688a3bd 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -11,6 +11,7 @@ """ from pathlib import Path +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -25,8 +26,14 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = [] - +ALLOWED_HOSTS = ['*'] +X_FRAME_OPTIONS = 'ALLOW-FROM ' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io' +CSRF_COOKIE_SAMESITE = None +CSRF_TRUSTED_ORIGINS = ['https://' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io'] +CSRF_COOKIE_SECURE = True +SESSION_COOKIE_SECURE = True +CSRF_COOKIE_SAMESITE = 'None' +SESSION_COOKIE_SAMESITE = 'None' # Application definition @@ -37,16 +44,17 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'blog', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', + #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', + #'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'blango.urls' diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fbcb298f1b03059e61c4c22a27c251344b89566 GIT binary patch literal 128 zcmXr!<>i{hAd|uX1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFJ1kN{M=Oi=#N<@{q@2XO^n4(dpROMtpP83g5+AQuP8qv43=d1&bc~2NS6-n1GvL^=o$p+lqC%UB$F0FcT^o+a8kmwG+rKZ&@?@jf$+{xirwbZ6k7VXSytJLK@dp z`uhZe3$*kBon?vxQvx`Yj;jJ@N`geWc|IWKSJKKd`Kin0=tggIJxnX_(!B+3#_NX1 zIqEbb&M?G^aG5Kux2CsR=Y`gNfXNfCwf->~|5kZFL_36G@@7P-@6LKixklwtgG+-q zkIyU~ktn%8pWFM;+jbqmh4yEN4{0!K+pfIXb^$}^+Wq3o;W3s-pm7qNyW$n!XRezA zbp#vgU#`P;jBXX_80sCdmpG>NDHfQC#KW!KXmb^9hcnrj7vHF3f04c3zu{idF_EgX T*LBbF=UJk2)ci!$;#9r>%cFxU literal 0 HcmV?d00001 diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ba5c9ef22431e787b2bccff9e06d7780a3a909b GIT binary patch literal 397 zcmYLFu};G<5Ix7KRMK`qj3BXQNd{Jg+9JW$g)NKa$+METXR(_jV{cIx``)lDnu(AC4`HFAm*TbJs09(ka|BkL{-W`Z-peiD8~hU z_5poFc6RU`r?;k2X<@K7>7(iIZ6^zr=Gyz9$5g58I-7J)JtvVrkM%HRA=`B}F?X}Q dZO`ljzuR;Fe;KP8_1yG)w0q%CV?B4ye*n9$VW9v3 literal 0 HcmV?d00001 diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6e227fb71ac53d243d48dc31b95f07ef05633b8 GIT binary patch literal 1181 zcma)5OK;Oa5Z?7Gj^iYywDiJ(YlPGsxFS^42T0I|T66JbI6 z7gk#u(gd{L!nR;{7PcX6tn%S?B|3?j9_;=#3s;($+r%D_jo2#2hiXl>rH8C_*^&MY z3m?fY0Poe-QC^e)yPanO98jeS;Q3Ki<|4~4L?k7A_ud~EwN03x*H%^~iMDZ%0oT;S z_&Zt}+B4K6Ciz+=QK@8u@_%-|jLQU_*DlKajV{5y4!Q5APY3_q&<*WVQkPVZRMR_e zFV`v_XK&P%CKA{Em+ykt;@!#avDiP{*?n8Lj*bt5-R&TBaK%Zk>+TLt9mJ_>S{`~M zt(t2@W!M2t;vx%F{UrorRC> l&*muD`}E!$dNx^0SU1F`eQNjl{8hZ5m)g8i>}aeyzW{N65Rm`? literal 0 HcmV?d00001 diff --git a/blog/admin.py b/blog/admin.py new file mode 100644 index 0000000000..4223a4085d --- /dev/null +++ b/blog/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin +from blog.models import Tag, Post +# Register your models here. +admin.site.register(Tag) + +class PostAdmin(admin.ModelAdmin): + prepopulated_fields = {"slug": ("title",)} + list_display = ('slug', 'published_at') + +admin.site.register(Post, PostAdmin) \ No newline at end of file diff --git a/blog/apps.py b/blog/apps.py new file mode 100644 index 0000000000..94788a5eac --- /dev/null +++ b/blog/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'blog' diff --git a/blog/migrations/0001_initial.py b/blog/migrations/0001_initial.py new file mode 100644 index 0000000000..fbebf9def8 --- /dev/null +++ b/blog/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# Generated by Django 3.2.5 on 2023-03-23 07:40 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('value', models.TextField(max_length=100)), + ], + ), + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('modified_at', models.DateTimeField(auto_now=True)), + ('published_at', models.DateTimeField(blank=True, null=True)), + ('title', models.TextField(max_length=100)), + ('slug', models.SlugField()), + ('summary', models.TextField(max_length=500)), + ('content', models.TextField()), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), + ('tags', models.ManyToManyField(related_name='posts', to='blog.Tag')), + ], + ), + ] diff --git a/blog/migrations/__init__.py b/blog/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/blog/migrations/__pycache__/0001_initial.cpython-36.pyc b/blog/migrations/__pycache__/0001_initial.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6979cb89c37435842633b9566b8c28cd0fc54bbb GIT binary patch literal 1231 zcmZuxOLN;c5GKHfD2kHpL`j=RJ3aKGi{wlX?Q}AoJZ!g})=4H-W-`2RAT3N&1__p+ z;wabT>L1eI)7xHq%DvM=PhF65l0(P=xGyZe{TASN!(sH2--W+?$NAg&Q?P_FD|5vQH*pIu@mk$geiHobfCv6N2Yl(SdT-sN2kwb83EtCsXTmTvvT5=% zGZT(ck!Q7Na$On>3Jp@3CrcZ5_3V-GfQI>(Cg~&$oP+~QT ztp>p8B?J&$dZ!$EWQ!q${v|u*8HebSx6y;oM#mIAr1e7^4Wq5L(`vh0jltd}C-1dS zGsAV#MsFRmk6ZhVZb!IjwbuRxNjq|PwYQ2^*H+gpdib)1qRe=5 z1HK~WzQ+FX6-{$==ORO%!x8dd4<;VQV%_L;SxeDKz(G~#g{U{_x!hpi$T}A)eTD}M3lo}Eh;&rNInKftB60eO2PIIZip!ZCh2BU5IR5TRd?O5uI zQ~>QrZObVdI%n9zAt%PwdZBW2)_FMk3nj{P%D+|${U&deM9-*ohCQ<`Ea?0n<~Z0} z>avk#g8`*F(=}o0>oTRYAsdOj(dacIGw4?Y&AbU0N@r6dh2r8`DoaCKW&I76_hfPt z!?e}Y6r(gHv}+|vj??sywNSQN(t3HBH^f!#(jpw23sF^KL4hDES%NH=o0?nK&che; zU(y#RhtJdFrw50>WBef^mj(xq+eRGQqg>mogYlz0dq^!hvV>xPE?+mDI6NSz^SqE- z&k0e{iP4d+WuBG4Q4a%Hi89m3VS!=G0bLgCJ$wFie)xEfJIA8j%(b1jYjq{JH|kHP z{+i{hAd|uX1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFAM#Q{M=Oi=#N<@{q@2XO^n4(dpRS*qnO>Awl9``ZtREkrnU`4-AFo$Xd5gm)H$SB` NC)EyQVlfai001v^At(R< literal 0 HcmV?d00001 diff --git a/blog/models.py b/blog/models.py new file mode 100644 index 0000000000..ed661cd0c1 --- /dev/null +++ b/blog/models.py @@ -0,0 +1,22 @@ +from django.db import models +from django.conf import settings +# Create your models here. +class Tag(models.Model): + value = models.TextField(max_length=100) + + def __str__(self): + return self.value + +class Post(models.Model): + author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT) + created_at = models.DateTimeField(auto_now_add=True) + modified_at = models.DateTimeField(auto_now=True) + published_at = models.DateTimeField(blank=True, null=True) + title = models.TextField(max_length=100) + slug = models.SlugField() + summary = models.TextField(max_length=500) + content = models.TextField() + tags = models.ManyToManyField(Tag, related_name="posts") + + def __str__(self): + return self.title \ No newline at end of file diff --git a/blog/tests.py b/blog/tests.py new file mode 100644 index 0000000000..7ce503c2dd --- /dev/null +++ b/blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/blog/views.py b/blog/views.py new file mode 100644 index 0000000000..91ea44a218 --- /dev/null +++ b/blog/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..adea2984879a3e0e581bd43332c930c74993e5ed GIT binary patch literal 163840 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 VAOHd&00Mi7fZNFq0I>Q0{{T{8yP5z1 literal 0 HcmV?d00001 From 4ee5e8db1efe3d1a7fb05ae71f6fed2d50471152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Thu, 23 Mar 2023 12:23:01 +0000 Subject: [PATCH 02/14] Finish generic relationships --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2498 -> 2498 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 904 -> 904 bytes blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 532 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1181 -> 1792 bytes blog/admin.py | 10 +++---- blog/migrations/0002_comment.py | 27 ++++++++++++++++++ blog/migrations/0003_auto_20230323_1221.py | 25 ++++++++++++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 0 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 0 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes blog/models.py | 14 +++++++++ db.sqlite3 | Bin 163840 -> 184320 bytes 16 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 blog/migrations/0002_comment.py create mode 100644 blog/migrations/0003_auto_20230323_1221.py create mode 100644 blog/migrations/__pycache__/0002_comment.cpython-36.pyc create mode 100644 blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index e95ef762d4e64bc83602aefefeec895d5145783c..cbc9b884f153d48805e62c15cf20570c8973f491 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=x&!8MVs1^^bT14#e? delta 14 VcmZo-Y+__H=H=zeWSGcS0{|4L0^k4u diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 1497235fd5b1cf7d3e0a685c69ff90ac74bf0f25..955a0d2c5fe55f288411ea4b3819df042452f761 100644 GIT binary patch delta 15 WcmX>kd`Othn3tF91lLBkJ)8g|(F9fi delta 15 WcmX>kd`Othn3tC;h;bv^9!>xt-~-nH diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 922157b09457c914d8f17dab1a03d9e6d09e4377..6484f23af05e7e2a4e19d2991f84d404755035f1 100644 GIT binary patch delta 15 WcmeBR?_g&$=H=x&!L^aCi5UPJ#{-H0 delta 15 WcmeBR?_g&$=H=zeWZ1~o#0&r#TLU2g diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 6fbcb298f1b03059e61c4c22a27c251344b89566..3d6de7b990f777e2e3f9f36531753cf3db68a616 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=x&!8MVs3IG;$1494+ delta 14 VcmZo*Y+z(F=H=y@#4wSq3IG*90|Nj6 diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index a8e5bd8cae8f923b97593256044c6cf990947989..8cdbe78c57027df580d08b3ce6eb5d5a67815bf5 100644 GIT binary patch delta 356 zcmYjNu}T9$6nyXY?d5XhQkXy*OA8My6e}T!62ZzSXtme`-VzdSb8wf`77s!dw#b!N zcay27o3dW|)~IyOE;i4DVP9Mp3^JIAk!glTv62Gq+rfJt(w^#KHT8NqTNZYlW0iz% z+I*d~-=NAwR9SP4hl5yXcw`+3Bv=JK&eP@<4|g;1vg9qdOt)WI%(16-U)mH+?% literal 532 zcmYjOy>8qv43=d1&bc~2NS6-n1GvL^=o$p+lqC%UB$F0FcT^o+a8kmwG+rKZ&@?@jf$+{xirwbZ6k7VXSytJLK@dp z`uhZe3$*kBon?vxQvx`Yj;jJ@N`geWc|IWKSJKKd`Kin0=tggIJxnX_(!B+3#_NX1 zIqEbb&M?G^aG5Kux2CsR=Y`gNfXNfCwf->~|5kZFL_36G@@7P-@6LKixklwtgG+-q zkIyU~ktn%8pWFM;+jbqmh4yEN4{0!K+pfIXb^$}^+Wq3o;W3s-pm7qNyW$n!XRezA zbp#vgU#`P;jBXX_80sCdmpG>NDHfQC#KW!KXmb^9hcnrj7vHF3f04c3zu{idF_EgX T*LBbF=UJk2)ci!$;#9r>%cFxU diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 9ba5c9ef22431e787b2bccff9e06d7780a3a909b..ca2a2f3b6e6a7e1ae311bb0fa2c16a6db1e54e73 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=x&!L^aCoe=;V^8=3n delta 15 WcmeBW?qy~(=H=y@#ITXAoe=;UeFIMb diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index e6e227fb71ac53d243d48dc31b95f07ef05633b8..e4f0f4c14e41c7b698a41ac5bb308e4ce8e35705 100644 GIT binary patch literal 1792 zcma)7OK%%D5MHi!wGXW%TXvoZ+O$OvMgi&2Yf;3IowR7}1h#VFg}%Dtza`pvFvt3Vob1rCQZLwY#heDv4dZrDF~B!71;>rZRrbD%%L zC@&$TC0S}^j59{Mo!VK8w`#qWI+@GeT6fZR=5epqUD$o@GwYcp+tPb$Nl&qPaMj`= zEWQk23D%YlETQbc(pg&~8J${t-S_z0)*dtMtdJ@#q4}k%swAJ0zWq$)N+;8&g;vQd z|3R%_?2L=NQh7C5EfkjhbigDV=!zwV*t~C?7*8i!*6)TeaqnWYT`exGP)I zd28{ubdgQlv?lTFy+kYy4zu`;NL4#x#wgnmzglw(JJ~TdxR-Idq?DXe zrRRTGIzqtTUyUw`OpT_6Op4L#Lcb~(@l=h@(m0g`I zzjTn(aBV-{^NcS<9%o7j6AFQ?%ars;h@Y2n+ITc=HNix^sh%b(m731eJrb1DhUn7L zgP>7TOZY6ZYs+kDzs7@2S4DW$Vi3 zTd-_PN4fxEu-4nqcch1M`on#%7BWi@^7QaT96dic{1Hj)pN{tr z4!JkgDy|Bx2NdV6v(R9arSFhw_eD`ARdT7mM{CZMZmNEl{8TyKyH31G*>n%$N==eX z)qy6g&sS2!mFWP|}1;}9X7&qNA1c$hS+sS-BtIl7{4z&G6K~e z$Sx4>83!c;ym}Xj0Y7~YGp74A*~TS)yfRL{OjGSQt^iZ=7wE^`1@_Vd5ouyQYDInj zKUrEORSK5s4vyO>a9vv}=@%H++>0p5Tk<{pP$TIFbP#oreh6W_7bnjrhvNxvqXRF{ zG@p>`QxcCMc(hoarAc|wAWR*lzl1QsX}X*>{os^PxmPZ;EY>Uih}`|7IA2W)l1+CJ zV~tbAvr^MbRAX=aX~UcHzuEp7f~nXgwI}sYgkKK>%*W_4-_{g!yw^2>oYONklxGcR zI_ovs`Mka||NPcc>Evv5Oa6rGz)zTQjHQnaP$Mt1=b#FbD=p|!61`e+|TvI%Kt?2Aq^GLs-JficJi`uFe* zg8m!qKM7D+jV(m~!pKtVZ%bPUA$An)Z{2nH*iW4YeMVm%u`!D;NxsSwG)N7dO5J8) zBH0v-3*Pb>vbgM8Sv2xpQ8I=+{L3@Pc*mk_-Wb|+LMRVyGEjbhO($C+l7+2?h3uwx zu{0({2%N{(?{QJ+Ru#o0TT?NPRbnCSm)%DnrU(18=i9T~N6WcXCfO-*r>f?=6&EZY zohXh2R+Mc%t|hBpRliC6wmTM;o)1hdS-~{~6CH}~boka#jcp$2uC7aUW`Yyhw7hA} z(q7q|&7{TM1M4!xXlPrW>izh39_x(Sw9@w@X7&^c4zA-eFTR~m(BB_Q%`8iKy zRC7^O%E<+TtlE#Y-Sz4r*ub~?jvE-E$&8S&74&RFCv`4OHb^i6o?X^q4tS~0y7;)v zWB!$WOjr+Py-Nd8fGB8CA5kCfr3*^(^K9de63qJ_$Vsu@EPnPKMBZI z>hA~%JSpB`CmohXMIsboQ{^_b<0K*6?yin}iGy`R1zGSPWg& zYqQfd9k;#l<`On-+Su0r;6^xV|De%zCGxROS;xCgzC}+^rrh7P+ E17epkdjJ3c literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc b/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2400f8c32876996810d71ee48eb796455fd5260 GIT binary patch literal 749 zcmYjPO^?$s5Vf6;rfGs!2*hRi0l75Y^or0Tt#&!UUf5GER+^a&2}xX>loedrYkvrT z$yZMN1x}39R*R#&%y{hQ_dHq0arpk~93BN@zuAAorTCKGVMzcCc*{DT^G@V~+g!9x z?%ptPz>W)SS%V|{+8L%8R#*gKWTBZx@DGc*5qI^4LM zR#hfityY;VRo7uZn%OA`OO3^dAdB&iG)Kj5RI*nOvH&nM!24p?j@OAxZma{@7abaR zLhruD7R=dJ}F&$=H=x&!8MVs6#y5W17rXI delta 14 VcmeBX>}F&$=H=y@#4wSq6#y1!10(7%g5PoB?S?@Z|*h!5Gj+D*XrYxzG^*Xj|Q&P6BTcBx7QBhB=cr2?_*pTvjd~e>X)!5qmwo4vokPs5+exT2%*Y}59K{7RV&7x~2+|ng^4DaGr)4BX64!a|| z?sD4=$!^qX$3BX^!)`Rx8oLyCS%~X#Ia{g}L{SW-GcQ*wX-SkqVn_<5gOU_9lzryzvnBZbCsnfrCc3!5JT~xG!>3UVp6m@?)jB^n8i53 z-*Evy#Z_FxEBG96h$qnLpj@7|Z#N~TzI^ENgAAS}_y>NEU*l)^9=?UIVFk}N z)FbFbh9WMH5v}V{ucY2F`|R^|`dQg(U$d{;Gxqt0`tML`gaSV>t3~CNUShsI6bQiN zm6B3bdPZ-@n0p~pF5ENnP71uhWb*kQY@+$@nZkr=(M<^gy8=;Fi;&US}`Wo%C zWc5?Gn5gRw^>a9=GRJ852|uWTVmYt8+TU~O+=`N^R#wu*eEPs*EEt|Ng{tN%>TgJ0%~UOBw~TJ2zEx z9D}g7puj`gxx-+ii+T|SWktJ^0FR@ReNo9(^n-**5c<++N^4qw6NkPiYK>Kh3n*^Ks1NRZ0Ic~BNfdNLApXN%%a|*X~{w1Zf iI6)0QMcub68jD3DyRO8-VJU3fjqaG#XQACzK>h=AgpV}< delta 305 zcmZozz}?WmH9=ZXlYxOj1BhY3Yod;^uqK0^%m!AV5F`I@kc2q@@6Cb*J^Y-aa=bvU zFt_|tspTNJHzl^_|e-{5*{@eUM8yk)IC;RBzF)B>% z*7soKn0!TFTT++{XaEO)0R#U#{?q)o`1kS`@YnG#;P2kp7{Ncez z{HOT$@XzP(;;-e;-`E(=KRMrjDzgIb+{x?#jvE_8c{k6EO)p|r;CG$OegP=(mv8#} z^^B~Wz3%TyVCH8$zMb8H@c`p?{}e_hrtK%48Leel#2E4!rgJ4Q$_TJtWN~AbXWGPM u#@NL0ogsf>qxE+ASxgUEw+Ey#Zpma;;Le%Oet{8atP1z`oZF03mH+@Jy;x)b From 4461e0e4881a02804791a1878932505aa2f8bf00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Thu, 23 Mar 2023 13:24:36 +0000 Subject: [PATCH 03/14] Finish html frameworks --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2498 -> 2515 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 904 -> 962 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 531 -> 531 bytes blango/settings.py | 4 +++- blango/urls.py | 3 +++ blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1792 bytes blog/__pycache__/views.cpython-36.pyc | Bin 0 -> 299 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes blog/urls.py | 0 blog/views.py | 2 ++ templates/base.html | 18 ++++++++++++++++++ templates/blog/index.html | 8 ++++++++ 19 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 blog/__pycache__/views.cpython-36.pyc create mode 100644 blog/urls.py create mode 100644 templates/base.html create mode 100644 templates/blog/index.html diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index cbc9b884f153d48805e62c15cf20570c8973f491..7d206b87edfd0ac54275c3a148541e00a526bd65 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=xoa+}Cj0{|8611|so delta 14 VcmZo-Y+__H=H=x&!8MVs1^^bT14#e? diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 955a0d2c5fe55f288411ea4b3819df042452f761..9fc77b2fa3246d44b1e042cb9b10147938b46578 100644 GIT binary patch delta 209 zcmX>kd|6o8n3tDJ&rc>rnva3uF#{6d0J0r`xR__6^4$7V_7o{;hIGah))eU!nH1R+ zxfJ#O3{guPGOCb0b*GomP^r%l26f#Qb=JAX3*46)MjL0;Bv`I%uC;F$vBaj l`4(r%=0hyOjEvly#n}Ebv1tRHSEM~zlCz$XWAaQ+O#qpNE-U~5 delta 205 zcmcaCd`MW?n3tF91eZ(-Gam!PV+JI^0c1M>aWUIO<+=6g3@NNBQYq3YGAXhta_KCY zj4ASSSkf7z#8MQZ#8VVglv3GKl%*L`ROT>cGDb|PAk%yti@T+$TWEsrzQYf+b(d%*)I5!%rqfo|%E+F#{4{0kR!{xYz|qq%cG=q%fv17+U&6diR#hJy`%#_X)#ht8swwkoS(NbyPS#FuZk@(B{wrq{}zKL&*ZmE22N32NjdrHdS#iZ<;AyHKHBGNOlD>_P`brZ woLQ23i>0(Er}!2(kSs_nDM>BLD_+S^#0j*fh;wo&vpp9ZkjcWx!^p!704%E_{r~^~ diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index 189842b4b737546b3618401abd25643cdcff7939..4bd162b3ed2233d9f2a63e4aeb7df11658506a05 100644 GIT binary patch delta 15 WcmbQtGMRH`V@ delta 15 WcmbQtGMRK diff --git a/blango/settings.py b/blango/settings.py index a0c688a3bd..dd88f6b947 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -62,7 +62,7 @@ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], + 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -131,3 +131,5 @@ # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + + diff --git a/blango/urls.py b/blango/urls.py index cde05802f9..3eaa9a6cfd 100644 --- a/blango/urls.py +++ b/blango/urls.py @@ -15,7 +15,10 @@ """ from django.contrib import admin from django.urls import path +import blog.views + urlpatterns = [ path('admin/', admin.site.urls), + path("", blog.views.index), ] diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 3d6de7b990f777e2e3f9f36531753cf3db68a616..746152b5a82459829467552bcc56932d1cacafb7 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=xoa+}Cj1ppPd11SIi delta 14 VcmZo*Y+z(F=H=x&!8MVs3IG;$1494+ diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 8cdbe78c57027df580d08b3ce6eb5d5a67815bf5..4cd0f705473ea850b685a2e06438ab9b518510c4 100644 GIT binary patch delta 14 VcmZo;X=7nC=H=xoa$Cs81OOIO0@DBh delta 14 VcmZo;X=7nC=H=y5aaqX51OODp0)qem diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index ca2a2f3b6e6a7e1ae311bb0fa2c16a6db1e54e73..08e5cecaf1dfbfa761691b231995a53ebe6c9f3a 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=xoa@)w(&IkY-8v}I! delta 15 WcmeBW?qy~(=H=x&!L^aCoe=;V^8=3n diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index e4f0f4c14e41c7b698a41ac5bb308e4ce8e35705..4ccc7ffbb0b2edc92bb8e83fa4711c3e1185a959 100644 GIT binary patch delta 15 WcmZqRYv5xu=H=xoa@)xEiwyu9xC7|` delta 15 WcmZqRYv5xu=H=z$ciG7Hiwyu7Tmysv diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f975568cafe6b67a2ef29642b9cdde0daedaf1c5 GIT binary patch literal 299 zcmYjMu};G<6nu7?f+{K)8Tf&8hzC}Lkl3@ZWoz@SCdH|X?NC4rNbn1M1izG(iC@2M7*P7&wyLN&p?4*Ve&2^lGV%U%GkB)AbBd=(3?WI7zm>yrymCG!xy;;UVay< zwY^r2<<6?Tb@zU^Y_wXL<#uh+VDs4Ny)SpqW1bA7%ttp8ZVIl7tUlvS+%J7=U1)~j aQ(PLSn17T*G9F*`mItG+<3EzwNp=7k<3N%C literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/0001_initial.cpython-36.pyc b/blog/migrations/__pycache__/0001_initial.cpython-36.pyc index cd0a6ede2c30c5c7fbc913a351f51dd365dce3b1..d7b68ef0906f2db07bb826065d44a8edf4add624 100644 GIT binary patch delta 15 WcmX@ld7hKan3tEU$ZaFrNfrPjb_7ZQ delta 15 WcmX@ld7hKan3tF91lLBklPmxvP6T8C diff --git a/blog/migrations/__pycache__/0002_comment.cpython-36.pyc b/blog/migrations/__pycache__/0002_comment.cpython-36.pyc index 5f58567fc8e6c97e617ed06458a84eccbbdea57e..c1a74bc5b6904432751b68a30dff5f5ac433cc15 100644 GIT binary patch delta 15 WcmeC?=;mNE=H=xoa@)wp$^rlyWCHvE delta 15 WcmeC?=;mNE=H=!3X}^(;l?4DDYXf`$ diff --git a/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc b/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc index d2400f8c32876996810d71ee48eb796455fd5260..4f20ef339d096f47f93ed325df7507fc34803d22 100644 GIT binary patch delta 15 WcmaFM`j(Z=n3tEU$ZaFrb0z>LkOZ0l delta 15 WcmaFM`j(Z=n3tE!!(}7eb0z>KiUe)| diff --git a/blog/migrations/__pycache__/__init__.cpython-36.pyc b/blog/migrations/__pycache__/__init__.cpython-36.pyc index bcb431c63477356bbb9879dcb4be1292f4ea0c0e..ec368aea05a0ef683a05fbdbcb881196705c3ab9 100644 GIT binary patch delta 14 VcmeBX>}F&$=H=xoa+}E33IG=114;k@ delta 14 VcmeBX>}F&$=H=x&!8MVs6#y5W17rXI diff --git a/blog/urls.py b/blog/urls.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/blog/views.py b/blog/views.py index 91ea44a218..7851fbf836 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,3 +1,5 @@ from django.shortcuts import render # Create your views here. +def index(request): + return render(request, "blog/index.html") \ No newline at end of file diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000000..00042757f3 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,18 @@ + + + + + + + Hello, world! + + +
+ {% block content %} + + {% endblock %} +
+ + + + \ No newline at end of file diff --git a/templates/blog/index.html b/templates/blog/index.html new file mode 100644 index 0000000000..d16be17bc4 --- /dev/null +++ b/templates/blog/index.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} +{% block content %} +
+
Column 1
+
Column 2
+
Column 3
+
+{% endblock %} \ No newline at end of file From 642a24fabc99f8394a0b459df1113e6d1de9dfaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Thu, 23 Mar 2023 16:57:18 +0000 Subject: [PATCH 04/14] Finish custom filters --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2515 -> 2515 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 962 -> 962 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 531 -> 531 bytes blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1792 bytes blog/__pycache__/views.cpython-36.pyc | Bin 299 -> 475 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes blog/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 0 -> 795 bytes blog/templatetags/blog_extras.py | 33 ++++++++++++++++++ blog/views.py | 6 ++-- db.sqlite3 | Bin 184320 -> 184320 bytes templates/blog/index.html | 22 ++++++++---- 20 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 blog/templatetags/__init__.py create mode 100644 blog/templatetags/__pycache__/__init__.cpython-36.pyc create mode 100644 blog/templatetags/__pycache__/blog_extras.cpython-36.pyc create mode 100644 blog/templatetags/blog_extras.py diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 7d206b87edfd0ac54275c3a148541e00a526bd65..ffb1c7ca3927fd1198b4536d4514946fd825521e 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=yL37yDR0{|2Q0?+^e delta 14 VcmZo-Y+__H=H=xoa+}Cj0{|8611|so diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 9fc77b2fa3246d44b1e042cb9b10147938b46578..bc76d93b19fb03fa50cd4c59d438d7d577109217 100644 GIT binary patch delta 15 WcmcaCd|8;yn3tD}C3GX(Sxx{Vt^^PO delta 15 WcmcaCd|8;yn3tDJ&u=5!Sxx{WhXgYK diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index ca33236f58b9b30e36dfddb547fbd786c95d6604..4527061215f6e424ede65438c4440e06e7016ebe 100644 GIT binary patch delta 15 WcmX@aeu$mTn3tD}C3GX(9%cX^as$5r delta 15 WcmX@aeu$mTn3tF9hu=oFJH`V@ diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 746152b5a82459829467552bcc56932d1cacafb7..b872a2468148e3e824fc538145168575aad8807d 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=yL37yDR1ppJx0?GgY delta 14 VcmZo*Y+z(F=H=xoa+}Cj1ppPd11SIi diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 4cd0f705473ea850b685a2e06438ab9b518510c4..219bd4cc46543b73817846116485fcfcde9c22b9 100644 GIT binary patch delta 14 VcmZo;X=7nC=H=yL30=s>1OOCi0(1ZX delta 14 VcmZo;X=7nC=H=xoa$Cs81OOIO0@DBh diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 08e5cecaf1dfbfa761691b231995a53ebe6c9f3a..6001930b18dbdd16adcd20bc9c47b9357b4e2832 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=yL3Ejxn&IkY)(gPL% delta 15 WcmeBW?qy~(=H=xoa@)w(&IkY-8v}I! diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index 4ccc7ffbb0b2edc92bb8e83fa4711c3e1185a959..09e9dab98e5fd5a31a9858ee872895a88c66697d 100644 GIT binary patch delta 15 WcmZqRYv5xu=H=yL3Ejx{iwyu7Zv%<| delta 15 WcmZqRYv5xu=H=xoa@)xEiwyu9xC7|` diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc index f975568cafe6b67a2ef29642b9cdde0daedaf1c5..83d5e9c24b276226aa825a8ecedbe3eaa92d6a97 100644 GIT binary patch literal 475 zcmYk2y-ve05XbE}PO5$g=*+|xh6ITfAtd$+39)3Un%FcBP8@89LRF@+@*upDS0-M8 ziF3qITX*-@`R;xvU(RM@^Ki=M7@==;a01XbVCDiGLkvsQ;2dMG0~s_VCxa$3Y-mnF zhm3xpJYvy3O5z{rLJ4+}<}KqI)X0j4Z&k}dhj+@@5|G33C<=B9X3oG_RO33Zqz?B0 z{>1Ot(j8zK*Q6bej6To~;E89p%J3yHv(jg3X zu_|g_TH~Te0p(f~pCzr@Xum}gxLEV&o*S$EMqfyeA^e_am1=laDkfC6QToYrtCDAh zT(xTj0gx|(Z%o>~IXb|7xA91X=U7i6E|NGuX0`7~O{KIgdus-&oBpSJE2J4#$|rtk i+9<{$@2M7*P7&wyLN&p?4*Ve&2^lGV%U%GkB)AbBd=(3?WI7zm>yrymCG!xy;;UVay< zwY^r2<<6?Tb@zU^Y_wXL<#uh+VDs4Ny)SpqW1bA7%ttp8ZVIl7tUlvS+%J7=U1)~j aQ(PLSn17T*G9F*`mItG+<3EzwNp=7k<3N%C diff --git a/blog/migrations/__pycache__/0001_initial.cpython-36.pyc b/blog/migrations/__pycache__/0001_initial.cpython-36.pyc index d7b68ef0906f2db07bb826065d44a8edf4add624..7fbba0630afbec5c7e295692901facb8f8080afc 100644 GIT binary patch delta 15 WcmX@ld7hKan3tD}C3GX(NfrPhEd%QS delta 15 WcmX@ld7hKan3tEU$ZaFrNfrPjb_7ZQ diff --git a/blog/migrations/__pycache__/0002_comment.cpython-36.pyc b/blog/migrations/__pycache__/0002_comment.cpython-36.pyc index c1a74bc5b6904432751b68a30dff5f5ac433cc15..66a939b723cf221fb92caef81d14e77538245599 100644 GIT binary patch delta 15 WcmeC?=;mNE=H=yL3EjxX$^rlw8v>mG delta 15 WcmeC?=;mNE=H=xoa@)wp$^rlyWCHvE diff --git a/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc b/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc index 4f20ef339d096f47f93ed325df7507fc34803d22..de1eb2d6c6c9504c9e262c95e7dd74bf22315297 100644 GIT binary patch delta 15 WcmaFM`j(Z=n3tD}C3GX(b0z>JM+7?n delta 15 WcmaFM`j(Z=n3tEU$ZaFrb0z>LkOZ0l diff --git a/blog/migrations/__pycache__/__init__.cpython-36.pyc b/blog/migrations/__pycache__/__init__.cpython-36.pyc index ec368aea05a0ef683a05fbdbcb881196705c3ab9..3fbed4b8aa80b177d59ae5b1d3cdce1852ccce39 100644 GIT binary patch delta 14 VcmeBX>}F&$=H=yL37yE+3IG)L0_y+( delta 14 VcmeBX>}F&$=H=xoa+}E33IG=114;k@ diff --git a/blog/templatetags/__init__.py b/blog/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17333aa2bd9825c419981e9169afc4d81853580e GIT binary patch literal 141 zcmXr!<>k_jkV#&=ek&P@K*9*(mz91-er~FMa(+r? zzJ7UrQFd`bVsff}QchxCdOncKPuDL=%`M1DEJ-a%OfS}tkI&4@EQycTE2zB1VUwGm OQks)$2Qsr5h#3HKvmxmK literal 0 HcmV?d00001 diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0f09e8da20682551410f56c0dbef5d21f02a091 GIT binary patch literal 795 zcmY*Xy>8nu5GE;!mgOIyh}$kL5M=XW4c!XIDA2XY&}>2hffgxQjwl%J7a;cq>Jexhd|=;#BG{sN36jw>W_g0aJ- zBGOB|9($E9gCyv&Ur{+o20aeI9ws410(U4G3U3>M9Es6(%qbsyLmf^gJiJEp;V-Cw z=GaaPVbZ-8DwPcv6<9(e@vaU0|h`I zf%FELK}Te8NA#5AYrtEg7QnrplM}S$v=jR7wYUxe`zO?5kb(MaDEA!dNJ{|w9d5lk zAQoy(Ja5MlrqE-P!45jg$)m zmG#I?_7yNhBI1)Vo{^AHJjS45pQxAMxtdSy8Q;46i>#@QD%T5_MGme") + + if author.first_name and author.last_name: + name = f"{author.first_name} {author.last_name}" + else: + name = f"{author.username}" + + if author.email: + prefix = format_html('', author.email) + suffix = format_html("") + else: + prefix = "" + suffix = "" + + return format_html('{}{}{}', prefix, name, suffix) \ No newline at end of file diff --git a/blog/views.py b/blog/views.py index 7851fbf836..fdee53bf8c 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,5 +1,7 @@ from django.shortcuts import render - +from django.utils import timezone +from blog.models import Post # Create your views here. def index(request): - return render(request, "blog/index.html") \ No newline at end of file + posts = Post.objects.filter(published_at__lte=timezone.now()) + return render(request, "blog/index.html", {"posts": posts}) \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 2eec7a4150f88ce694389293b86cac3128b432c8..8e77e357208bc3bda88e38f35f5e52e6c745fa69 100644 GIT binary patch delta 2052 zcmah~TWl0n7@q5Pr*!t`n$XbLv8_tb-JQ$cW+E}0r7pMD0_743DYLt?-DP)YmYpdr zATFy9N_^4m1Bnkvd@?bJO_9bJV+=lNgb+y#q^LnjB-Q|4AW;)NXLeg?sW8d>Cz&(< zcfSAp-}%nblZ%d?T=eEDQhlo-|g&pn`i}%fE%zEK7j-92AqIXa0NDl2HoQ| z7V6!>XGylcH@JfI)(-@Gmcb>0;oIm=QXg@0LnF3Pq3WlCYnFNlg7=}%siHMJRJLq~ znYa;LC3-2}c>?-<=f`WG`l_!J=y{pqiP~Di+s^YGr|{)eA(NGd?3^x#BRz6NL{HDU zo%t6N{gPf@XQYcsX}}hxeOm{6^k5=6U>I2|Hzr%7h5eyzWlKJo+HUW&M+diV=-;mI z7|>&VdFN1JZQ9D@Em;<2#V;y;SrH_~qbV^htknB0+b1cS64gRdAQq0P(fS1|?4@9u zfV(g~v84P1ENZ3O$p!{Bakt7Z_EP*A!gqx~GhTa-U;Roq#rD0rJudAxZR^mXLOxnb z%jML8P)t>`C3B=yEEMxbG*YMD`DnxD*np;tgw3JNsZF~ondBzF(J!yxnA)*!<9b8d zxMNE}Hlm5b^C4qw)APGR4bCCI7(twyELBleqte8c6KhDsbCQ5bm_j_?hbMaIKJrm4 zsEMi5t8Xp$!bRNbAK`EK6K=v)_!cfAkdNW`&C?{??qz9`^tQOsgCoPbk-^g|Q1)d4 z{y`h`8~h4CBb4vpGRpoOmN7I(dU0sM!GlA6`umm3z5H1MzJS-D7dYRCzCFG+{_J?| z1YaHWazq^Zo+deNPJ>WCG(`@miW-u`p}1)|Iin(AH3_46CnxC5FIan4W%uDOJ(Dpq zU7B$C$dNtX7g{iCVnI|<4JctzjEPF`Sh;Fc@+HG`^rC>}+E~D}1bIH<77s>DE`TU% zaySr)L_!fo9<&YH$(zH1D;ErznT3?*L+)fbq8f+xG|7>3YgbfFj0M7~8j~V&LwP7U zozuLX$M(nOVsCtId7)-YPL9(vs15z|BMDt^VFjNPS>NdZZSb%J3ttR2@GSi+|=*LoA8)M!F!RbF(p3 z)KRP4m#RHOyNnZwwNE{$NUWVuM3$QevuP$+tIZj-v-jCdRnbDCrbLj?{!eGdeN%oc zLCo9no0eaW_cugunTFt4LJCEsE+Z2k*7K&2wJJh(#H>k_%Qu;f2Iun?s|{%?QFMsz zqvf)4MXSW*IfRkNsEG1IW$ZLH?stWWIcH`$OTA-ysa!OghiN4~uBIhzvr2|g(anri z5=N~`#y&1~QkQ%zOcC%G{0`Iblj~t$Lde511hN~-!{CvoSQ?ES#ZnBxkrYFsfonxq z2Ls0lI0m=i12~T)dJu-O`^_}k-NOZ1&veoW@*!JJKTapfhZaa3zx5ooyp6#ZM8g5` zB{2n0Vt=F^%Ik0y{reS!TNo18$hsp3#S5CO z`-w`kDk405By`ciBM&bTRTWJr-Xj%7)B3rff;8a}+ekZB61DWPI2h&p2BG1G*3VFD z{1#(e04Bk7tZ`J#m^|&3cq0756Wd;6$R|}|PgU@z1=v-fMQAa+LZvk?2U*|cB0Oj! x?4@$Lw -
Column 1
-
Column 2
-
Column 3
- -{% endblock %} \ No newline at end of file +

Blog Posts

+ {% for post in posts %} +
+
+

{{ post.title }}

+ By {{ post.author|author_details:request.user }} on {{ post.published_at|date:"M, d Y" }} +

{{ post.summary }}

+

+ ({{ post.content|wordcount }} words) + Read More +

+
+
+ {% endfor %} +{% endblock %} From 16de9a6f8728311f12b9c22e4ca2afe46b1ba96f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Thu, 23 Mar 2023 17:37:59 +0000 Subject: [PATCH 05/14] Finish custom template tags --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2515 -> 2515 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 962 -> 1033 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 531 -> 531 bytes blango/urls.py | 1 + blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1792 bytes blog/__pycache__/views.cpython-36.pyc | Bin 475 -> 692 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 795 -> 1692 bytes blog/templatetags/blog_extras.py | 27 +++++++++++++++++- blog/views.py | 10 +++++-- templates/blog/index.html | 10 +++---- templates/blog/post-byline.html | 2 ++ templates/blog/post-detail.html | 21 ++++++++++++++ templates/blog/post-list.html | 6 ++++ 22 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 templates/blog/post-byline.html create mode 100644 templates/blog/post-detail.html create mode 100644 templates/blog/post-list.html diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index ffb1c7ca3927fd1198b4536d4514946fd825521e..8608036fbf9180e2e493f5cea5eb0b49ff4b7e24 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=x&(K?Z>1^^hB1H=FT delta 14 VcmZo-Y+__H=H=yL37yDR0{|2Q0?+^e diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index bc76d93b19fb03fa50cd4c59d438d7d577109217..bfc0cbe723121307f84b9b4e7a324ca65d676f66 100644 GIT binary patch delta 15 WcmcaCd|8;yn3tF9MC(Sjvz!1ZHU$I# delta 15 WcmcaCd|8;yn3tD}C3GX(Sxx{Vt^^PO diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 4527061215f6e424ede65438c4440e06e7016ebe..66d230915699eb1c4410eb478fae38d6f428ce99 100644 GIT binary patch delta 178 zcmX@a-pQeC%*)I5piL$viEYJlElm$O~zX+d5O8H zn!J;lnPZfrxIuF95V>32rA0Xfi6teeMR~<58H)ITmKO0%E@ieC-~lpO7V1!S@?@&F+R3lAdz2j>&f diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index 480d1fe4bc80650e4f6c1506692386ff68e7e53d..396e36f5c26c55f08cd9ddae70a6f9fde1f39d7e 100644 GIT binary patch delta 15 WcmbQtGMR/", blog.views.post_detail, name="blog-post-detail"), ] diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index b872a2468148e3e824fc538145168575aad8807d..fa63512f480dab10a2c03802a5801ab13d74a937 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=x&(K?Z>3IG^k1HJ$N delta 14 VcmZo*Y+z(F=H=yL37yDR1ppJx0?GgY diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 219bd4cc46543b73817846116485fcfcde9c22b9..1e9247c6a098fa0f5caf20c1ac4cc6c3a8f9241b 100644 GIT binary patch delta 14 VcmZo;X=7nC=H=x&(Ylb02>=-V184vM delta 14 VcmZo;X=7nC=H=yL30=s>1OOCi0(1ZX diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 6001930b18dbdd16adcd20bc9c47b9357b4e2832..77f97266f923d11fb82fc430d3431185f922e79a 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=x&(YleXoe=;YS_BFJ delta 15 WcmeBW?qy~(=H=yL3Ejxn&IkY)(gPL% diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index 09e9dab98e5fd5a31a9858ee872895a88c66697d..a2a2839130f9f0fd654bca0e234be515e44cb476 100644 GIT binary patch delta 15 WcmZqRYv5xu=H=x&(YlfC7aIT`_XK_b delta 15 WcmZqRYv5xu=H=yL3Ejx{iwyu7Zv%<| diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc index 83d5e9c24b276226aa825a8ecedbe3eaa92d6a97..76fba70d7be681e1e8fea8a62c27288c0b258694 100644 GIT binary patch literal 692 zcmYjPyKdVs6y-ybl~`_^0^KroQ-N9qnlUH}bPoz-(<0a+V@st>m!#^}aHbU9@*(+! zenn=ko%#!%dM{-JzQBEwyyqN2?1atiRx*k` zQ@o4HDAZiVT~a1cMQmQra;Mi4>gcn!t_DWIkVy>w3EaMh;7Chb=6D<31Fr{qM_s%JMuP8YL+?3YM%Otl z&o})-HFhOMHFs5|oZOu)lwKAM(D*)ExlZ|b15h?k3?lf^z{>jMwt?%$L^$PZy*0=J zG>nY=+Dq$90{tT~V@Utr6f51yqSm6(#a5dyb~CSKu~75%QbPjBZ;jmA+2)6j13136 zxSY_J)J!1P2!O`HpXFXapURt<~r=)g9kW(wVPeo{_Fi~44ErH!k5XT#!vgS{(`g-63pGQ4FZj1I;w#$Wlth6-0~RG>;>={0Np@gn zxXoow%vJsZvQWhxH03u{L4#xAb+5E1s$ysLv+Ff6zjYzD^yTZ@(=n&ySi1FAw=s;x zLuaD)p6yR?Ugh-m4!+)BT~Gf>qLJtN!8T_#Rj7mG diff --git a/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc b/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc index de1eb2d6c6c9504c9e262c95e7dd74bf22315297..9d94fdb598bae76f176afc96a6ca2887f28b8a05 100644 GIT binary patch delta 15 WcmaFM`j(Z=n3tF9MC(Sj=S%=8&jl|4 delta 15 WcmaFM`j(Z=n3tD}C3GX(b0z>JM+7?n diff --git a/blog/migrations/__pycache__/__init__.cpython-36.pyc b/blog/migrations/__pycache__/__init__.cpython-36.pyc index 3fbed4b8aa80b177d59ae5b1d3cdce1852ccce39..3fcc48eb81e4e455ce9119730a0a1a1771b2f5ee 100644 GIT binary patch delta 14 VcmeBX>}F&$=H=x&(K?Z>6#yBE1K$7u delta 14 VcmeBX>}F&$=H=yL37yE+3IG)L0_y+( diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index 17333aa2bd9825c419981e9169afc4d81853580e..ce6f40aed1999f810946d3bce5784f747287f90c 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=x&(K?Z>9RL}?1LXh! delta 14 VcmeBW>}6y#=H=zmj+n^S4geMV0~-JU diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index c0f09e8da20682551410f56c0dbef5d21f02a091..b443f69b36ddd5a355c32ea709c6980fd23eac95 100644 GIT binary patch literal 1692 zcmb_cOOGQp5VqZq^yIZWlgtajDhv`*kVp=DK`0X;aYZA<-g1dLZ70*2ene%5oy{hv zEGNV-82AC)5kG~4ublQT?1?JRWH!qUiEg$1Rk^y#RrT4=8;$B;KYuL$2pIdD?L9u? zZ}8K9;vkvi8O!;IbHXAMxi|70_A);YMuEeA7Uq>v#o++;(I|2_%ntJEsLGk*TQ;gG zZ(hf_p&Ik1tjOpM+w##9l%C2HS(UXn9OXkN*JZ=49--8d%`KNtv&2+ zZCXMeoAI^D=@0+=Qkz7OM|`kc?)w&JeT#!(Yi9UX=%(Z^5U=@-fM-TXv32s?gW;OZ zeK&e{OnM~UvERInC?dqc9oq<;Lzv)SKB2AHc!+~7-}pr&`NqS~M@_i))?)2%eN3`) zW!b7V&<4t4Hq6za{{Y|d&Z<3#JJ+D5mlt`QW~Ti5_2y!@@(2BRxC&oy=`i0qs)P~^KC*f3t2>k>xwWC@^(`-)rN8HEen zMS5#Py`19wJA*ble|OoxE_2mSN|~1ZmnGcjMVzSqB#Vn#iBmc2?;2&|nRc47x-}5% z-r|*Q-bWluWpE3+LCyFG2PUe*7ZHy{owr3KLSE;n;l6+qT!jdSgp(mYG<*2DR#p)h zWc!+J1r}FaVF_jWV<*AP_2mVWFFRDiE_cO2S~T2l#%^6{m(~4njGnBAKYWfrJKhL5 zL!99E_>kTOrY%umVhe>02YrmY3$*8#>ITkvs0xYxzd*&#|2g7S%hhdxbp0|*wdoOo zAG4)^kJ(^V35EO?MCz zXBUUM7viz@ILjPaw`Tq+3;rC=aL&lCm;JN77%fDdSR^j17ki0s zlv#TQi&0?o7zUl?=hfmKe+wk5!?UN$_ zX4MUCVz+vt(Z1I%w!sACk|ZB{q)DNVoKRA_&M(73SiLxRl)A5K=eV7u-T&0%*yxkT UnVCPtr^G1>nSAb9U2fF$18mzs?f?J) diff --git a/blog/templatetags/blog_extras.py b/blog/templatetags/blog_extras.py index f7f76f0f0c..c7ff171389 100644 --- a/blog/templatetags/blog_extras.py +++ b/blog/templatetags/blog_extras.py @@ -4,6 +4,7 @@ from django.utils.html import escape from django.utils.safestring import mark_safe from django.utils.html import format_html +from blog.models import Post user_model = get_user_model() register = template.Library() @@ -30,4 +31,28 @@ def author_details(author, current_user): prefix = "" suffix = "" - return format_html('{}{}{}', prefix, name, suffix) \ No newline at end of file + return format_html('{}{}{}', prefix, name, suffix) + + + +@register.simple_tag +def row(extra_classes=""): + return format_html('
', extra_classes) + +@register.simple_tag +def endrow(): + return format_html("
") + +@register.inclusion_tag("blog/post-list.html") +def recent_posts(post): + posts = Post.objects.exclude(pk=post.pk)[:5] + return {"title": "Recent Posts", "posts": posts} + +@register.simple_tag +def col(extra_classes=""): + return format_html('
', extra_classes) + + +@register.simple_tag +def endcol(): + return format_html("
") \ No newline at end of file diff --git a/blog/views.py b/blog/views.py index fdee53bf8c..3b71ee4e03 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,7 +1,13 @@ -from django.shortcuts import render +from django.shortcuts import render, get_object_or_404 from django.utils import timezone from blog.models import Post + # Create your views here. def index(request): posts = Post.objects.filter(published_at__lte=timezone.now()) - return render(request, "blog/index.html", {"posts": posts}) \ No newline at end of file + return render(request, "blog/index.html", {"posts": posts}) + + +def post_detail(request, slug): + post = get_object_or_404(Post, slug=slug) + return render(request, "blog/post-detail.html", {"post": post}) \ No newline at end of file diff --git a/templates/blog/index.html b/templates/blog/index.html index a2b286db54..ec9337524e 100644 --- a/templates/blog/index.html +++ b/templates/blog/index.html @@ -3,16 +3,16 @@ {% block content %}

Blog Posts

{% for post in posts %} -
+ {% row "border-bottom" %}

{{ post.title }}

- By {{ post.author|author_details:request.user }} on {{ post.published_at|date:"M, d Y" }} + {% include "blog/post-byline.html" %}

{{ post.summary }}

({{ post.content|wordcount }} words) - Read More + Read More

-
+ {% endrow %} {% endfor %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/blog/post-byline.html b/templates/blog/post-byline.html new file mode 100644 index 0000000000..0a4633b9b7 --- /dev/null +++ b/templates/blog/post-byline.html @@ -0,0 +1,2 @@ +{% load blog_extras %} +By {{ post.author|author_details:request.user }} on {{ post.published_at|date:"M, d Y" }} \ No newline at end of file diff --git a/templates/blog/post-detail.html b/templates/blog/post-detail.html new file mode 100644 index 0000000000..6953ebccee --- /dev/null +++ b/templates/blog/post-detail.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} +{% load blog_extras %} +{% block content %} +

{{ post.title }}

+{% row %} +
+ {% include "blog/post-byline.html" %} +
+{% endrow %} +{% row %} +
+ {{ post.content|safe }} +
+{% endrow %} + +{% row %} + {% col %} + {% recent_posts post %} + {% endcol %} +{% endrow %} +{% endblock %} diff --git a/templates/blog/post-list.html b/templates/blog/post-list.html new file mode 100644 index 0000000000..35e5572af5 --- /dev/null +++ b/templates/blog/post-list.html @@ -0,0 +1,6 @@ +

{{ title }}

+ \ No newline at end of file From ae5b54597cbee44c73ad7d604bee3a4fa82baaf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Thu, 23 Mar 2023 19:01:29 +0000 Subject: [PATCH 06/14] Finish crispy forms --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2515 -> 2633 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1033 -> 1033 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 531 -> 531 bytes blango/settings.py | 7 ++++- blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 0 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1792 bytes blog/__pycache__/views.cpython-36.pyc | Bin 692 -> 1016 bytes blog/forms.py | 15 ++++++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1692 -> 1692 bytes blog/views.py | 22 ++++++++++++-- db.sqlite3 | Bin 184320 -> 184320 bytes templates/blog/post-comments.html | 28 ++++++++++++++++++ templates/blog/post-detail.html | 2 +- 22 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 blog/__pycache__/forms.cpython-36.pyc create mode 100644 blog/forms.py create mode 100644 templates/blog/post-comments.html diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 8608036fbf9180e2e493f5cea5eb0b49ff4b7e24..a034802d4e0e40014ba938aa1962d8c8ccf974d1 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=yzm^_iK1^^bH17ZLG delta 14 VcmZo-Y+__H=H=x&(K?Z>1^^hB1H=FT diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index bfc0cbe723121307f84b9b4e7a324ca65d676f66..e8dbc0516bd6e1d338a2c7031018390b2bbfc1f5 100644 GIT binary patch delta 351 zcmY+A$x6du6ovC=u%@(5O~-Uf&*S?59rJ!E;4)>gUR`)aUp_zN}c=Y8x4{ufwzJ))d^8JwGXI{859&yLXMzYH&1(VWP#1ii<>jG9rqQ@wMDr&q_ z#p+ns#=7n?SEejBD2Gkbp-`SvKvtn5wy1<{Dr1KXP6d)J)ON#t=7pa#>i}n3tF9M5|1SG#>-QV+JI^0c1M>aWT(C<<|Oi_9)>L;S`Y+(G;;1@pRTG zkrat2(G#O3{guPGOCb0b*GomP_H)jgn8% zi&98o4rb8Q-|WB`&$Rgf^G#+ZO~uX2**7yz?&tIoN&>o;g^7oegIR!`g_(tkjdAi@ KPN~V3IG^k1HJ$N diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 1e9247c6a098fa0f5caf20c1ac4cc6c3a8f9241b..58cc80b874aa5557ed2bcab5b94f3679c35e13bc 100644 GIT binary patch delta 14 VcmZo;X=7nC=H=yzn7ojU2>=%b0|o#9 delta 14 VcmZo;X=7nC=H=x&(Ylb02>=-V184vM diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 77f97266f923d11fb82fc430d3431185f922e79a..84a89639307ad6bb8291238d503ce83d45d05744 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=yzn7om#oe=;W00XE1 delta 15 WcmeBW?qy~(=H=x&(YleXoe=;YS_BFJ diff --git a/blog/__pycache__/forms.cpython-36.pyc b/blog/__pycache__/forms.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef8ad9ad741610772ffee9d74d1c9d073ecf999d GIT binary patch literal 924 zcmZ8fv2NQi5G5swk{vrO(xP4Z1Il0*=vov73Zz})B^wt)5ot#bCAp-Gz=1ah$ku=8 z*e~e6aP8Dz=+ryPM%+^1>4~Sir*}{9#^Yi0{f+ub3He2i76bedw!46!h@ytnR8WdI zGEp6iIN;c@IuS|0%XUhEYX^W|t*`5< z12nvVqc7U5w1ubiQ(M=%=}Ig(tauOHIRH%rRYXKUMO6e;(Jm74BbiebEB25H_DC2J z3D73~WZw=s{%HxSdzG(_TIyIZMHf^gDuVL({`pb)#i?~J#*U3JuB?Od479`cd&LKWoZiMpg!n7g(mh4!U(oQ213thM(yzg9UV-DSsBB%B>z7&{{Acegj-YE;BX8F)_wZv)L2(scuX)Cwd$bRak w*tC0H|7Cjd{UlD%r%5o`^^OlN(Q*9i0?U)(Pttw%zW--Fpnnd8nu5GE<=$FiNDHr;{_-CUq{fo3d<0s%4=X@PXoP(c<(y?6f=tpskdaIR7irlE zsa>L_sI)AtJ6uSct9cD}u5^C#@?=6?Vyjl(sZN5;KPY2C4^LIw%FdoC-If&d!9vI( z>{Hn083;>iS~DBed0EVAWXm+?-&zs6DrN|4L=Z%$j`}0OE zW)!23_4$DsZ` zpDk4@XQdLAn%ydWWmZKgXY;1$777%Uys6}^nXbOL&=<$khJzsV5!L&kODup3OClKG zZV!efmi81HWgFI$n$>~61kDAzV)_%dUPoKH3HqRpw?qrji3kJ-VtCJbo)7R8=(Oi` zvL%$*A$UexdO@yh8*a%a=(qrB$3SBUX95xZV4lbrh;-aE>jezy{l&*Kc#TS!Qf2R+ z_|A~P7ed;iYCNSt5=WmKVHgZEzl3Q{_B6J;qnWP_+>b$J@}jiWjdW2f?NSLHW5^*0 zm%zuHqNxNFFCb#CRGr0Sy9v3t)UvQjYq;RV4OWF+=2Zuk{G38P!b}G!9-}zIsQ4a` zAKFgrp?`>Q^IZ!#Pjd`{&=E~&N>i4A6@d+!C5%%>^;7tMJ{e^PqQ((V%~EMwuC4Lq zJtp6-8{G%2ZPgfmo3bIYHf@!V;K4y>srMjDX2$^D2Vdg>QUsm!#^}aHbU9@*(+! zenn=ko%#!%dM{-JzQBEwyyqN2?1atiRx*k` zQ@o4HDAZiVT~a1cMQmQra;Mi4>gcn!t_DWIkVy>w3EaMh;7Chb=6D<31Fr{qM_s%JMuP8YL+?3YM%Otl z&o})-HFhOMHFs5|oZOu)lwKAM(D*)ExlZ|b15h?k3?lf^z{>jMwt?%$L^$PZy*0=J zG>nY=+Dq$90{tT~V@Utr6f51yqSm6(#a5dyb~CSKu~75%QbPjBZ;jmA+2)6j13136 zxSY_J)J!1P2!O`HpXFXapURt<~r=)g9kW(wVPeo{_Fi~44ErH!k5XT#!v}F&$=H=yzm^_iK6#y5K1APDh delta 14 VcmeBX>}F&$=H=x&(K?Z>6#yBE1K$7u diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index ce6f40aed1999f810946d3bce5784f747287f90c..dd39223b483a17f4d2d95dd7ce7986b659071cab 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=yzm^_iK9RL@|1A_nn delta 14 VcmeBW>}6y#=H=x&(K?Z>9RL}?1LXh! diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index b443f69b36ddd5a355c32ea709c6980fd23eac95..a1ddfc706e0318a075247fe0c35eb1100a755f28 100644 GIT binary patch delta 15 WcmbQkJBOFen3tC;V)90|X>0%<%LDEJ delta 15 WcmbQkJBOFen3tF9TK7h_X>0%?mjq-0 diff --git a/blog/views.py b/blog/views.py index 3b71ee4e03..0797b0da9c 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,6 +1,8 @@ -from django.shortcuts import render, get_object_or_404 +from django.shortcuts import render, redirect, get_object_or_404 from django.utils import timezone from blog.models import Post +from blog.forms import CommentForm + # Create your views here. def index(request): @@ -10,4 +12,20 @@ def index(request): def post_detail(request, slug): post = get_object_or_404(Post, slug=slug) - return render(request, "blog/post-detail.html", {"post": post}) \ No newline at end of file + if request.user.is_active: + if request.method == "POST": + comment_form = CommentForm(request.POST) + + if comment_form.is_valid(): + comment = comment_form.save(commit=False) + comment.content_object = post + comment.creator = request.user + comment.save() + return redirect(request.path_info) + else: + comment_form = CommentForm() + else: + comment_form = None + return render( + request, "blog/post-detail.html", {"post": post, "comment_form": comment_form} + ) \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 8e77e357208bc3bda88e38f35f5e52e6c745fa69..70c683ce2804c44cc2f8313afe745ab093ca1581 100644 GIT binary patch delta 465 zcmZozz}>KbdxA8h?L--8M%#@Euk{$2H~Z+9Iq+Fn8JJrcndq4r7@AlZZoZIjqQJ$> z)5pMfi+2l8-^RuU9*rhtW>(+kP{*9q+~hn{ldQsm!g9+@qtc?h%6!X=+$!@N^Wt>l z5~Im?=5F;2@Cmfa$}Gq%ERD#ltjhFEa!m5iweXAxGA?uTj4Dd3OpXt)ipuh^G;u06 z5B4=OFf!IPFwr$IQ!s=(#lqaw(sc8dxdBWZ%>0uW__y;<+Ag5L)W)x=!tBdP$QjHa zMU(f;RcOAwe*5k9jG7Ky%=}9j_#g2f=3lZ|uwWX$vK+G`BW|0SLDG{C%#+&w@IRw+ z0|yiT7Y6=c{9iT;HoV|xV`XM!QDIguPg0XeZ?>n;HTvrI2`Kn^oHGdDUkF)lbYI5{^ov(Rre zAP52tv;Yp;4YaX=s138UolpV>0uQ$U54X1vAOfuq1SA7Z0h7F)AcNblx7)7)DL@DU z55oWt;t#{K5pcH;m!$sz5R=TF4!7a|0V9A00T22B5BjqafbS0h0Jr*&0tyfY0T25C n5BswbfbS0x000C72>}8P0000153>Ldv$GL!sSmfazXDAV1)w}g diff --git a/templates/blog/post-comments.html b/templates/blog/post-comments.html new file mode 100644 index 0000000000..fd9948750e --- /dev/null +++ b/templates/blog/post-comments.html @@ -0,0 +1,28 @@ +{% load blog_extras crispy_forms_tags %} +

Comments

+{% for comment in post.comments.all %} +{% row "border-top pt-2" %} + {% col %} +
Posted by {{ comment.creator }} at {{ comment.created_at|date:"M, d Y h:i" }}
+ {% endcol %} +{% endrow %} +{% row "border-bottom" %} + {% col %} +

{{ comment.content }}

+ {% endcol %} +{% endrow %} +{% empty %} + {% row "border-top border-bottom" %} + {% col %} +

No comments.

+ {% endcol %} + {% endrow %} +{% endfor %} +{% if request.user.is_active %} +{% row "mt-4" %} + {% col %} +

Add Comment

+ {% crispy comment_form %} + {% endcol %} +{% endrow %} +{% endif %} \ No newline at end of file diff --git a/templates/blog/post-detail.html b/templates/blog/post-detail.html index 6953ebccee..6845030785 100644 --- a/templates/blog/post-detail.html +++ b/templates/blog/post-detail.html @@ -12,7 +12,7 @@

{{ post.title }}

{{ post.content|safe }} {% endrow %} - +{% include "blog/post-comments.html" %} {% row %} {% col %} {% recent_posts post %} From a4193a3ca59a24edf4768ba89345932e2a5e4053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Fri, 24 Mar 2023 19:49:49 +0000 Subject: [PATCH 07/14] Finish django configurations --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2633 -> 3091 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1033 -> 1033 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 531 -> 578 bytes blango/settings.py | 227 +++++++++--------- blango/urls.py | 2 + blango/wsgi.py | 8 +- blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 924 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1792 bytes blog/__pycache__/views.cpython-36.pyc | Bin 1016 -> 1016 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1692 -> 1692 bytes manage.py | 3 +- 20 files changed, 124 insertions(+), 116 deletions(-) diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index a034802d4e0e40014ba938aa1962d8c8ccf974d1..1ce7ca87e6a3755db990a9adc59a2c83b551dab5 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=yLzcrDq1^^Z&16Tk6 delta 14 VcmZo-Y+__H=H=yzm^_iK1^^bH17ZLG diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index e8dbc0516bd6e1d338a2c7031018390b2bbfc1f5..e4d4b66304ea80d26e5f9f07e877a596431b935f 100644 GIT binary patch delta 1104 zcmZuwO>f&q5Zxu0pOS3ZmLofkKN3ZXW!I7&r$!qjMUpy5fhtZ>yA8015|n1ckflVM zq=G~}=%C(%f|mkqeue)*4gvZDiUPd!&}(kJ7a3AO8Wi2dJkIXE9lo8N{jHKLjrU6> z^W{IQ@Ozn%zsLuTp??Q0>L38&1Sm*8G8#~SE3)`f;+9i(H@H0*6khHK18!ZV1yWfD8;2N1jk#L=`1(#+wCg zLaV5uN_ZIzJ_qK1=N-!DF~R~`1q#S0@I@#>31(mx$}k7>umIzVWAF>G2p6CVOR(%H zyb2fj608UfF0Bv;69lWU2J5f^mmTI(xbiE*(92Nc7g5{_Tou|c1nRFcd6%F8*O1eI z%^aIKZn@N9d=<9&8tzz!kC3^6vMz%(=2y_E!4AI)EnbHRA07F0Xis(Q%{r+pGf8(%nwy(c}Av))$YCPmWV5h!R8pW3GH?$9C6_#5Z4ea$@qQ{;{e| z-34Q;?qQs8FZtQHQ4JOJD`-&{L6^!ZlbKXb-WnTJNlNDGSe@5ZIqRm*BvWEpSDAt| zns4smzV|KDdIv39L-@BgJq8pnO%bxEP6$?KR`W8}cNoCQQBx0RkRHxvfNzdW4_dqz z1il#CgIsvHhzn`qSoA_MJ${(U4yR{%?_JNleT0{2QI;^Bnlztj8mVSk5cDi7T*8G^ zJH_YayWKp)e5Uu|Ba1>ADJbMNVwR&k#Q*&*)o)EN?y~~YA`^j0IxW(&QvTr`^-cwV delta 636 zcmZ9G&1(};6vf|r^D;A;G)=$LHfftQMw5<-{fN?vh!uksYNE6tyhTIWGfromCT%`Y zW?>iIx)26jND+6g#if6N=w6tu8}WY-`dYh^%RL+}zkBWtCcllvSK@Kw&4)Cc1R=kI zA9U&%L=aFgj~+0==($%sMJN`t_z86*C&X14e-Hl0A%=Bw}I&1Bhb~2@K(Q7$X?Pm>m_P7{>&Xn8cJF5o4GZ<49Q= z(kWt7L@zb5!bAT3NS{d+8Nltu^zFrS{=H-(NPDO4}h_ z2=19(hjBTJa4zy!1sDs@2-VN409m zYwM4zofsj+-v~Zxh2XFHhl=30b~~L5wMGN&y+$L{4&~>bv)f@33|YGyZ0f6tFuuOI zS$|f2(AcPNZEppi^q;}oXeIa_eXW`j?3h8_sANL@&OsY}&$@elrt3=KY=G*@kj53x f)Zo35p*;9%%*<(wGCF9e%6S<&XP2e&h(zfbAZDR< diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 18c97d8d50f2fa8f1f6960c856223498c69a88c8..6aff3c2d762339e89fd14b9f3f88ee26be8f2e0c 100644 GIT binary patch delta 17 YcmeC==;Yuu=H=zO^GP-(XCWsG04gp7>;M1& delta 17 YcmeC==;Yuu=H=yzm@Jc$wUCnq03&Av1^@s6 diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index af558eaf313e5ac7913862929a36ac061e5934ef..c756cb07f147bbca5d0bf88f38f1f281ad7b8123 100644 GIT binary patch delta 261 zcmbQta)>3(n3tDp_Z^v(J&X(tj~S2vGmz~7#Km?%B84G}A%!u8DTgtNF_kfkDT_IU zIfbQ}iID-yV@+WL@qlXBb69d&qga75tj!EjY$;5^44NDhBkoQ1W7Mp_CF0`c=;!Vq z@9gjA=II_9NZe0)lN za(w(Pru^bt?5TNWnML_|x44Q^OHxwP5=(PRqJ)$4^U^ZYON+o-iuFK-6tMtZev2E) XsLA^oJ@~kQqAZLYOni)dOgu~gE;B}= delta 185 zcmX@aGMOd9n3tC;VzNw1D zOEUBGCc7|ds%f&{Vvmnc$xn`tzr~bad`loDD={xUUoSboC{+)nqlgJ;@#GDRqLc44 RhVpO#IV?;ZOgv0{OaML^E7<@5 diff --git a/blango/settings.py b/blango/settings.py index 2452ed631a..e858627e83 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -10,131 +10,136 @@ https://docs.djangoproject.com/en/3.2/ref/settings/ """ -from pathlib import Path import os +from pathlib import Path +from configurations import Configuration, values + + + + +class Dev(Configuration): + # 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/3.2/howto/deployment/checklist/ + + # SECURITY WARNING: keep the secret key used in production secret! + SECRET_KEY = "django-insecure-ym=d)ft4%)xiukqr&tgstl6i2091+x_#&o%*%n6g^epgy(bpd6" + + # SECURITY WARNING: don't run with debug turned on in production! + DEBUG = True + + ALLOWED_HOSTS = values.ListValue(["localhost", "0.0.0.0", ".codio.io"]) + # 7 rows below belong are codio related and upper line was ALLOWED_HOSTS = [] by default + X_FRAME_OPTIONS = 'ALLOW-FROM ' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io' + CSRF_COOKIE_SAMESITE = None + CSRF_TRUSTED_ORIGINS = ['https://' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io'] + CSRF_COOKIE_SECURE = True + SESSION_COOKIE_SECURE = True + CSRF_COOKIE_SAMESITE = 'None' + SESSION_COOKIE_SAMESITE = 'None' + + # Application definition + + INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'blog', + "crispy_forms", + "crispy_bootstrap5", + + ] + + 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 = 'blango.urls' + + TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, + ] + + WSGI_APPLICATION = 'blango.wsgi.application' + + + # Database + # https://docs.djangoproject.com/en/3.2/ref/settings/#databases + + DATABASES = values.DatabaseURLValue(f"sqlite:///{BASE_DIR}/db.sqlite3") + -# 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/3.2/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-+sn%dpa!086+g+%44z9*^j^q-u4n!j(#wl)x9a%_1op@zz2+1-' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = ['*'] -# 7 rows below belong are codio related and upper line was ALLOWED_HOSTS = [] by default -X_FRAME_OPTIONS = 'ALLOW-FROM ' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io' -CSRF_COOKIE_SAMESITE = None -CSRF_TRUSTED_ORIGINS = ['https://' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io'] -CSRF_COOKIE_SECURE = True -SESSION_COOKIE_SECURE = True -CSRF_COOKIE_SAMESITE = 'None' -SESSION_COOKIE_SAMESITE = 'None' + # Password validation + # https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators -# Application definition + 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', + }, + ] -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'blog', - "crispy_forms", - "crispy_bootstrap5", -] -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', -] + # Internationalization + # https://docs.djangoproject.com/en/3.2/topics/i18n/ -ROOT_URLCONF = 'blango.urls' + LANGUAGE_CODE = 'en-us' -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [BASE_DIR / 'templates'], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] + TIME_ZONE = values.Value("UTC") -WSGI_APPLICATION = 'blango.wsgi.application' + USE_I18N = True + USE_L10N = True -# Database -# https://docs.djangoproject.com/en/3.2/ref/settings/#databases + USE_TZ = True -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} + # Static files (CSS, JavaScript, Images) + # https://docs.djangoproject.com/en/3.2/howto/static-files/ + + STATIC_URL = '/static/' -# Password validation -# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators + # Default primary key field type + # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field -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', - }, -] + DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + # Settings enabling usage of Crispy forms ( as well as adding "crispy_forms" and "crispy_bootstrap5" to INSTALLED_APPS ) + CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" + CRISPY_TEMPLATE_PACK = "bootstrap5" -# Internationalization -# https://docs.djangoproject.com/en/3.2/topics/i18n/ - -LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/3.2/howto/static-files/ - -STATIC_URL = '/static/' - -# Default primary key field type -# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' - -# Settings enabling usage of Crispy forms ( as well as adding "crispy_forms" and "crispy_bootstrap5" to INSTALLED_APPS ) -CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" -CRISPY_TEMPLATE_PACK = "bootstrap5" \ No newline at end of file +class Prod(Dev): + DEBUG = values.BooleanValue(True) + SECRET_KEY = values.SecretValue() \ No newline at end of file diff --git a/blango/urls.py b/blango/urls.py index 3a7bac7a7f..37cddfe1b7 100644 --- a/blango/urls.py +++ b/blango/urls.py @@ -23,3 +23,5 @@ path("", blog.views.index), path("post//", blog.views.post_detail, name="blog-post-detail"), ] + + diff --git a/blango/wsgi.py b/blango/wsgi.py index 83565cf12c..6a49229799 100644 --- a/blango/wsgi.py +++ b/blango/wsgi.py @@ -6,11 +6,11 @@ For more information on this file, see https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ """ - import os -from django.core.wsgi import get_wsgi_application +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blango.settings") +os.environ.setdefault("DJANGO_CONFIGURATION", "Prod") -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'blango.settings') +from configurations.wsgi import get_wsgi_application -application = get_wsgi_application() +application = get_wsgi_application() \ No newline at end of file diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 8e99eb99b961b00f1d940ec5921755e8188c1aa1..8c4f7199dce521d704f6316ecc1b527bcbcf299c 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=yLzcrDq3IG-G15yA0 delta 14 VcmZo*Y+z(F=H=yzm^_iK3IG;q16%+A diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 58cc80b874aa5557ed2bcab5b94f3679c35e13bc..53ef8d08aabbd65504c3a66cdf18b23797a18c87 100644 GIT binary patch delta 14 VcmZo;X=7nC=H=yLzqOE!2>=$10{j2~ delta 14 VcmZo;X=7nC=H=yzn7ojU2>=%b0|o#9 diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 84a89639307ad6bb8291238d503ce83d45d05744..54d2d5b3d4c3dcc43a37275123d540b0daee8599 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=yLzqOIAoe=;VeFL5V delta 15 WcmeBW?qy~(=H=yzn7om#oe=;W00XE1 diff --git a/blog/__pycache__/forms.cpython-36.pyc b/blog/__pycache__/forms.cpython-36.pyc index ef8ad9ad741610772ffee9d74d1c9d073ecf999d..cf725fca4532f6e7bc5124dc243a5847d1efc15a 100644 GIT binary patch delta 15 WcmbQkK8Kynn3tD}{nkddY0Ll}sRPvj delta 15 WcmbQkK8Kynn3tC;Z{bF^Y0Ll~_5=d} diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index 8dab08bf579fe4b60c763b34ad3a24a5f0dda98b..109aa9ab7f21a82b76a22a8022b4b304bfca5d34 100644 GIT binary patch delta 105 zcmZqRYv5xu=H=yLzqOIgmYMO^WEW-!##@_Pnf(}noGUErxD^-}7>X1@gwo_*R&fOl zAoCVya87BuTV`rb$}N^+ATx@+xHLC6v8b|0cJdKcUqj B9!mfK delta 105 zcmZqRYv5xu=H=yzn7onAmYFeXvJ0~VW7OtWWEO@%c$vsmUc#lOHnGG0IF%U`_^-N0?0j Don;Vt delta 49 zcmeyt{)3&(n3tDp)0B;Dr}F&$=H=yLzcrDq6#y3*19JcX delta 14 VcmeBX>}F&$=H=yzm^_iK6#y5K1APDh diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index dd39223b483a17f4d2d95dd7ce7986b659071cab..813d584f5d12eb36f22def010fd4ef7d681f7723 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=yLzcrDq9RL?k19<=d delta 14 VcmeBW>}6y#=H=yzm^_iK9RL@|1A_nn diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index a1ddfc706e0318a075247fe0c35eb1100a755f28..7a71a28d73db5576c45e1535b0b372d5252314cf 100644 GIT binary patch delta 15 WcmbQkJBOFen3tD}{nkddX>0%0%<%LDEJ diff --git a/manage.py b/manage.py index c66b327f71..0fee295e18 100644 --- a/manage.py +++ b/manage.py @@ -7,8 +7,9 @@ def main(): """Run administrative tasks.""" os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'blango.settings') + os.environ.setdefault("DJANGO_CONFIGURATION", "Dev") try: - from django.core.management import execute_from_command_line + from configurations.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " From 0a61f196243959a610a14ff21b6c25476ef9529b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Sat, 25 Mar 2023 16:00:47 +0000 Subject: [PATCH 08/14] Finish logging --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 3091 -> 3689 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1033 -> 1033 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 578 -> 578 bytes blango/settings.py | 39 +++++++++++++++++- blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 924 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1792 bytes blog/__pycache__/views.cpython-36.pyc | Bin 1016 -> 1202 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1692 -> 1692 bytes blog/views.py | 6 +++ db.sqlite3 | Bin 184320 -> 184320 bytes 19 files changed, 44 insertions(+), 1 deletion(-) diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 1ce7ca87e6a3755db990a9adc59a2c83b551dab5..3fd1e16545c840f8e051492be301dd8f0f440a6b 100644 GIT binary patch delta 15 WcmZo-Y+__L=H=!3#VkLOy&3=-as!kA delta 15 WcmZo-Y+__L=H=yLza=w~y&3=*=L2;B diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index e4d4b66304ea80d26e5f9f07e877a596431b935f..e805b2165f838062c2f4f655982c35c11640a3d8 100644 GIT binary patch delta 876 zcmZuvJ#Q015cQsYx%1gU5dmSoL}C!iH4Y>|AcTC{F-Q>+jzHk%wDxQ+hxYEm?m0>v zMQ$jlXxv)#lqi%``~ZHymUJm;X<+sorGaAS-ps!DW@mK$(#bVvc68Kvk-q_-E_`u* z5XZ@6GRt@*KmJKdiprd+bF zG39p4@Rmk?TqpQ`R06tr!JMhn(#(9?_5;O&n6$PJ$GLF?6^t z?TWa~q?`xD$&O&Ohch4!u}FP(^qU;Ih8o$9MMx86%H)8v?nUhC2a#XdN>C9#r4eu@ zx?^lVnV+7P2eKj)h&zd!Rc4!0DbNrf1C9<7A7-`VNXDG0f~I>^D`ofG>5B9U8Fs#cD)g{-h7XnElD5g??7P&b zXmwfVX0^8Zvi{mN#8pgFj%%f>ltCOdOAtuf;>=_FflP3EPj3OAAxcPZI%ku~RNu5t zuT@UOapJoDn|9L_*O7bt-u_O`D{Eu3UVrwy{y8Jobi=j&rn5*s^glZ6R?aYpfyd6_ zm)NF`BUv4bSjp*HuK&x~=uK$lqz+{rau`%`HO7_D=oRH1mUdKyE!Gw+8CGs<=CI`% zs%lij@D-2LHa2lcT5# zy||*-Z?U?#I)%D#UdeTck#i+Oks(lZk>TW89y`XQ$$NNGC%f}{)$@S_`9XvLh+qK{ zw|JcL^K()Y^THByN>htOK|Wegx2d`ftbJ0Gf;smjD0& delta 53 zcmX@aa)^c9n3tDp_Z^vy>@|#xQIlI3!=+dl7#MDGCl(asWF{w;Waj6sWGLbSiWPB9 I{>tbJ0HJ^ns{jB1 diff --git a/blango/settings.py b/blango/settings.py index e858627e83..78069ef39c 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -138,7 +138,44 @@ class Dev(Configuration): # Settings enabling usage of Crispy forms ( as well as adding "crispy_forms" and "crispy_bootstrap5" to INSTALLED_APPS ) CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" CRISPY_TEMPLATE_PACK = "bootstrap5" - + LOGGING = { + "version": 1, + "disable_existing_loggers": False, + "filters": { + "require_debug_false": { + "()": "django.utils.log.RequireDebugFalse", + }, + }, + "formatters": { + "verbose": { + "format": "{levelname} {asctime} {module} {process:d} {thread:d} {message}", + "style": "{", + }, + }, + "handlers": { + "console": { + "class": "logging.StreamHandler", + "stream": "ext://sys.stdout", + "formatter": "verbose", + }, + "mail_admins": { + "level": "ERROR", + "class": "django.utils.log.AdminEmailHandler", + "filters": ["require_debug_false"], + }, + }, + "loggers": { + "django.request": { + "handlers": ["mail_admins"], + "level": "ERROR", + "propagate": True, + }, + }, + "root": { + "handlers": ["console"], + "level": "DEBUG", + }, +} class Prod(Dev): DEBUG = values.BooleanValue(True) diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 8c4f7199dce521d704f6316ecc1b527bcbcf299c..d7a2f6fe5b811d17deff598fc2340601c7468dc2 100644 GIT binary patch delta 15 WcmZo*Y+z(J=H=!3#VkLOy%GQ#I0KFV delta 15 WcmZo*Y+z(J=H=yLza=w~y%GQztpjfW diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 53ef8d08aabbd65504c3a66cdf18b23797a18c87..e7da66ea3d83e385025ec2076e8e6e9e57c68a18 100644 GIT binary patch delta 16 XcmZo;X=7nG=H=!3#Vo&({XZiBAX@}S delta 16 XcmZo;X=7nG=H=yLza_Jg{XZiB9$nvd7#NBaL4?xeURH4h z4IuLtXK+qwx?5&yPRcEoVjwe$y|^?tH?gR)NOtlOR$oTt$wF+(K+=qDB9J`6W&r>r CJRWEO diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc index 1eb6ad43db6d1dab988de24da5753667d5a1338f..cd3bdf481afd22e4de73ee03815cd7cec2a80746 100644 GIT binary patch delta 710 zcmYjPOOMkq5cb%4wcB?q3gSSdvaEVpp5jyi(jJfy;-MapdLU|Rx0`I56vwSrC>4ir z1!pX8L4hbQC!BFBhY$)jCPTXf=pWUdr^-L%{yNQ6_OUsO)8*YT z;o|)GRIOrd@A+Y+ybpd)JNR}fq_(-3ZI+tFA}Qa(b!e3lJZ@Kw7zcqs2U;LI<#)L8 z=<8mcf*ep6-O-#xG-C1`t;OjXm1||A?-a0OIg8wa$Zh!tZjYiGw{sfRO+dl0fd+cb z0>F`qzwQ4WSg6%X8xwf+DR_Mk&O%#R)=`0d+rQNwnn@U+Tx2-T) zq?)eJBs0g#da6zX!$~uvp)H$eWY@qo1APQcaj8hQ47GhO53nNfcd&a!jO>6IcupD4mcM5|eR-eX=X~k>Vh0bxu*=Mt|D_0hN7n{{{bN|_ z+4kUg;BxOHnszzkKEyrV*?yReQv9E9xh|{|%fGYzIl8J4C!AI|!!@0t$T^Mhbg8eT}mrrXi>hE zRx%=nNpZdrN=qNkpOFk9{JD43e8u-8n^Fz{!Z)zohnU*0?67sLLVMw=>62Tx=M`Ey zoV+3OwRU0e)%cQDbjfNYd2>SUK7nLV;|V%nYPUw0v~W0}4xv}KA{FJ{C(?Gypj+dp zd~;@;7tbdzpTf~g%hf8=%@1;jd(DtWR|C*Dex~A!B+oeTlM6BJrDdT-q2pcWQ}F&)=H=!3#VkLOy#)XpcLT2g delta 15 WcmeBX>}F&)=H=yLza=w~y#)Xn>;sSh diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index 813d584f5d12eb36f22def010fd4ef7d681f7723..c4d2b2aff15af9da0950e0c77e1486730fa4da4e 100644 GIT binary patch delta 15 WcmeBW>}6y(=H=!3#VkLOy$t{xu>-XL delta 15 WcmeBW>}6y(=H=yLza=w~y$t{wCIglL diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index 7a71a28d73db5576c45e1535b0b372d5252314cf..e068d67c7101e5d7a262a4b20d51b65d57f96ce3 100644 GIT binary patch delta 16 XcmbQkJBOFun3tF97qk3E_NiAk69LDdstARrO(nS;Bf)U*g?|0lAOg&zYm#ffFjWan$hKj-$3ciHmO6U5XSSHNYhr5Gyb`*+f zav>nM6B;8XhP{%|bJB9StM-xN-|#0xJe5tLhLbNzthgDCG!pShHmu7i5K@Oxzt=}| z0bwght@p$FwwUtg8k`n)qh^ugUG8*Hs^z@&DA*jTO(7$oqAGeL6>qjA3w}NMAS)+@ z_<(AAk~+)KjFX~SiWdLLL&(MRuKB_19b%aT9fJi-L0?#Hh78=d6AJ!6apd0gXfZv) z+iMmQ_A&ShAK@+R&n7*%cZZPh%S*`%{NmM{8;cLWaL;&|fD;UUz!{v(SI1xA$`XO& zMsjiX)L^xq!&3}?!gn}5hsSW6BuqGY5yV9pRxk`Bz>dKjN?@N&u7S@(8nNpp+$2ef ge5Z?ye}*_I=I?c!qJ!gD#G%WGAS_Dn4KJ;~0pmouO#lD@ delta 189 zcmV;u07CzOpbLPY3y>QDJ&_zk0X?x`>n;HUvrI2@KoK(_F*rIfH##yjE;cYRG&nJ{ z&~G##3Ihy|01ny>v0uT@c0uS~8 rv2ckGk&tB;1Oo{H0|WyJ0RjyG0006HXaEnh4`{K0To1QszXF&L))P75 From 0a493f49fb1eacf1d34edfc75bd1245189446c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Sat, 25 Mar 2023 16:18:35 +0000 Subject: [PATCH 09/14] Finish security ad passwords --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/settings.py | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 3fd1e16545c840f8e051492be301dd8f0f440a6b..83e277e2c49120928b3c841e0bbf5f070afed7c5 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=yTl%B{|0{|6_0}}uM delta 14 VcmZo-Y+__H=H=!3#XOO%1^^d{19SiY diff --git a/blango/settings.py b/blango/settings.py index 78069ef39c..f672bcec7b 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -109,7 +109,12 @@ class Dev(Configuration): 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] - + PASSWORD_HASHERS = [ + 'django.contrib.auth.hashers.Argon2PasswordHasher', + 'django.contrib.auth.hashers.PBKDF2PasswordHasher', + 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', + 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', + ] # Internationalization # https://docs.djangoproject.com/en/3.2/topics/i18n/ From b2f136263379665a137df38b43ee8f44f4942917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Sat, 25 Mar 2023 17:34:23 +0000 Subject: [PATCH 10/14] Finish caching --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 3689 -> 3937 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1033 -> 1033 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 578 -> 578 bytes blango/settings.py | 2 +- blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 924 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1792 bytes blog/__pycache__/views.cpython-36.pyc | Bin 1202 -> 1202 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1692 -> 1827 bytes blog/templatetags/blog_extras.py | 4 ++++ blog/views.py | 4 +++- templates/blog/post-detail.html | 7 +++++-- 20 files changed, 13 insertions(+), 4 deletions(-) diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 83e277e2c49120928b3c841e0bbf5f070afed7c5..bcb0164bb0a7b3b041b749d011680747d114bcc6 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=zOpgxhU1^^dF18x8S delta 14 VcmZo-Y+__H=H=yTl%B{|0{|6_0}}uM diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index e805b2165f838062c2f4f655982c35c11640a3d8..0f9095911fd2802b90cd501c70ea985abc1e01f4 100644 GIT binary patch delta 519 zcmaDU^H7e(1r0{zJrM%{_M`@;T z1~X`SZw_XD#8PjNl9ia3p0AgjpI1_pnWUFkT9TockyxCOT2!p(Sd^ZhXB3cFTwI=C zl;Qyvt-`A#z{%Ui4PA!`ZaV^t^&nb;Jsb_uEHcBbtys^=xu~+B1gOi%)C@)6W@8R9 zCPuBzUR)Cx`2_+TgM-8UgIwZ09D_YvCtv4Yz~;ihz)<8ext7O{al+(1JRzJcOpGAN y#x_}ycc(f;8mtCHxPk~bAh8pOi&=mK2O}3_k=x{typEzE@gj5$lim3g8Px##Uz`R2 delta 273 zcmaDT_fm$-n3tC;kW)Top2$Y7>x_&!lOHj@uaA;T<;s#z(P?IkQb=KnQUqcpAXZM% zjZ#U`i&9O|k5U6-^%R2?!xW5PCdD?z zD4j9I4#>8j!<6EX;t1r~q%fs8&0z+rbO!QVQe1&DZgbe9G*UQ&nHeKs$7%T@OTtI{?kk|sm e#VkOAgOQ7|$aV5dK1WfIcoDjW$@ct;jEVpoKSS#P diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index a48374482f02a202c350fe6672750aaf98635655..5c063eb164a43926224e63f6dc40a4e44b9594b0 100644 GIT binary patch delta 15 WcmeC==;UBC=H=zOpuUlfnFRnF!2>k_ delta 15 WcmeC==;UBC=H=!3#k`S?nFRnG2?IL- diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index 946e545e15399a1927e965421351e67989b571c0..471a64134a0812dcf575ea8a4c344ee836898a01 100644 GIT binary patch delta 15 WcmX@aa)^b^n3tF9g8D`_8zulE1q0Rq delta 15 WcmX@aa)^b^n3tF97xP9o8zulEO#|Ej diff --git a/blango/settings.py b/blango/settings.py index f672bcec7b..7988870748 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -109,7 +109,7 @@ class Dev(Configuration): 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] - PASSWORD_HASHERS = [ + PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.Argon2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index d7a2f6fe5b811d17deff598fc2340601c7468dc2..ddc9505d8bdaa3bd51c386e447a3ead12e35a927 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=zOpgxhU3IG=o184vM delta 14 VcmZo*Y+z(F=H=!3#XOO%3IG>V18x8S diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index e7da66ea3d83e385025ec2076e8e6e9e57c68a18..6e31a3daab029a3c9c1e055b30715d1c80cadd33 100644 GIT binary patch delta 14 VcmZo;X=7nC=H=zOpuUie2>=(Z0}=oL delta 14 VcmZo;X=7nC=H=!3#k`P>2>=)G0~i1R diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 7006a50ca74366e53d2fe9abc9cd3509cf6aa5fd..c9c98bf36384f555bb50769321fb05eaba633732 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=zOpuUl}F&$=H=zOpgxhU6#y7I1Bn0t delta 14 VcmeBX>}F&$=H=!3#XOO%6#y7~1CIaz diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index c4d2b2aff15af9da0950e0c77e1486730fa4da4e..85384f55449598cf0716b5cee8b7c2533269b450 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=zOpgxhU9RL_`1CIaz delta 14 VcmeBW>}6y#=H=!3#XOO%9RL`z1C;;( diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index e068d67c7101e5d7a262a4b20d51b65d57f96ce3..ed02ad59da36833d1e0959a7c5a3b9d563bd4031 100644 GIT binary patch delta 559 zcmYjNy-piJ5Z<}HKl^@+jWHOCTrjqB2qi&Ci6W&yN*RPupmKAJnN?B9>DzWYqrw3`K%} delta 433 zcmYjMO-n*S6rDRWPsR7)_ZLK>4+LEV;l@oMwk+DXb0fulh_6kIMg&R=ZP`MG7J;?t zClvjQ)`GieWj~=!-S?nyhM9BEIhVt|&(6|zo3ihK zSkLr?ZxPy_?K>F7*qqIvmmrqJJjT(S1MyVIEwn>7O)P`X3^0MoP|1dV0aKU``*R`B zU^aB~nCr57aT82ZhqW{C#{J9D;-~Y{fhPc4fAD*#=_}EPhF*#N13`_4!JJk4#>@ww zPna(d?f@C`TV7&QKrsQ7OHR?o3B~e@^9?P`^i-BX>PNYw-(@4Q7vuzsGhPH$(Q(nz zZKGi~1D%Jus_HAFTWM`6F4YvOVuXKC&|k*5s7#X9(c|HnI#t)}nDPe0(b!Y^A<{G} f{{ post.title }} {% row %} @@ -15,7 +16,9 @@

{{ post.title }}

{% include "blog/post-comments.html" %} {% row %} {% col %} - {% recent_posts post %} + {% cache 3600 recent_posts %} + {% recent_posts post %} +{% endcache %} {% endcol %} {% endrow %} {% endblock %} From e0bdd57ca9c94c6acab4b889f964390049f3ff57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Sat, 25 Mar 2023 18:55:08 +0000 Subject: [PATCH 11/14] Finish database optimization --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 3937 -> 4047 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1033 -> 1200 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 578 -> 578 bytes blango/settings.py | 5 +- blango/urls.py | 11 +++- blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 518 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 924 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1792 -> 1822 bytes blog/__pycache__/views.cpython-36.pyc | Bin 1202 -> 1415 bytes .../0004_alter_post_published_at.py | 18 +++++++ blog/migrations/0005_auto_20230325_1842.py | 23 ++++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes ...004_alter_post_published_at.cpython-36.pyc | Bin 0 -> 599 bytes .../0005_auto_20230325_1842.cpython-36.pyc | Bin 0 -> 669 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes blog/models.py | 6 +-- .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1827 -> 1827 bytes blog/views.py | 9 +++- db.sqlite3 | Bin 184320 -> 192512 bytes requirements.txt | 50 ++++++++++++++++++ 26 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 blog/migrations/0004_alter_post_published_at.py create mode 100644 blog/migrations/0005_auto_20230325_1842.py create mode 100644 blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc create mode 100644 blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc create mode 100644 requirements.txt diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index bcb0164bb0a7b3b041b749d011680747d114bcc6..396dc7c76f9074a4a436e987b752181e80842c74 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=z;Fr3I%0{|8W126yp delta 14 VcmZo-Y+__H=H=zOpgxhU1^^dF18x8S diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 0f9095911fd2802b90cd501c70ea985abc1e01f4..7c33fca49e1091a9ebcb9a32fcaa9c78427efd13 100644 GIT binary patch delta 523 zcmZ9GO-tiY7=`nuF&(4Pg;+nTt@W#o)o675=&04Iwbs!xj4tGEih4q*C_+?(*$Da* z0&XVr58Oz$v-1bIbSKQ<#(&|P3IijTb2#VT=e@jt5|2r3O4l_tpTubFUV9?C_Wsh% z71|w5#1KOVI?;u0#2r<1pht9~*CEk`gdIgPE;$4leMq4n0~mCa8ezy+nCQl^h}+sx z57Kt@r-aO}$PI~J7#Ly3K(_9qbswvdqlg4djAH^8=c^j+ZTRUiW2`u)%GWmoNJf zCO5f##TLJ8`%y8XqH#wuDnT^@S{6F&gA1p6etLR*u@`p}$TTgG-dwKi7Qa^tTh;Qno#3!pA+;z; zl3Vmn^gP{qcY3x>CRLHCe&jGKvg*C)&*^utPKUN0T8Zs9>r7$$L>jpz@3p1S9^Shj K2fU@$6d7+FdWIhW delta 415 zcmZ9Gxk>|37=`DbnIvX(lEy5Wec#-dxW$<0ByOD+fm>OeFhsD4ja@)rK$z0;1q2J3 z%6AZ~M6eL_6?_5z#7-{f-}V!21ADq^T$2D6xBAIH2%@N^P`1s+R57HL+7mBpgSVM*k%EDEe5R9uHdB;}JKoeD7c9;F0EyF;IQ-hap+X^@LIUV4TUyf{#D8YLwm5x6Y zqw8EKXXNNEot(0}oAFv+%Da!u>J?~^* diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 5c063eb164a43926224e63f6dc40a4e44b9594b0..4bcda1d02db6f2bbcd96c23fef8afdbd0d45e5ee 100644 GIT binary patch delta 420 zcmYk2Jxjwt7{~7=FW020tz8@hCy^jnP{hSIL~(Nwms>*GyQT@3q+HU$A~>9vy_$F+-}%bPVRCyXPh;fs22C6D;#NOe%4+PU{`uskaZen@?<5}L`!(j z6hglVy9<(7yeDb4u3uyi{I+Bg!vh!+e1v#UkXsZ69}o9r=O)C4RkE(rBB_AwSmbFD z5@Su{dScwP7^#_%OPB7C=QN!T=3W#DIh-X?Gzj~~1yzos$OJ!TU6yJXYvYS7E|PL@ zR2E}RUY_6C<<-UA^&8Ut bRcC+sNzXPn04>aL8+Mm4+Em=N98B;xh2v;y delta 255 zcmdnM*~w9F%*)GlL0vv2hna!lF#{4{2eKW2xHtqzq%cG=q%fv17+U&6diR#hJwgX0wCY+$kI>oW0EH%uzfkEWr$# zT#5Ni8~2wn328FkVoglR&CCNbSPBwLGW;gTFdOM>^4?;Pk59=@j*pMxOUX*iOV8I! z&d)0;%1kO^0y^pzH&n2+D5toHdGZ%#8?js5Kn~D|lGLKS;*|_Vd_Z+Ye3L_2>;-s$ NOcq8SAmm^HkpMklJLLcX diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index 471a64134a0812dcf575ea8a4c344ee836898a01..8a3654f455018cac9ab919dfb5c08d371b7707a2 100644 GIT binary patch delta 15 WcmX@aa)^b^n3tEU!*C;;4HEz$hXa@Z delta 15 WcmX@aa)^b^n3tF9g8D`_8zulE1q0Rq diff --git a/blango/settings.py b/blango/settings.py index 7988870748..d3aab651ac 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -52,10 +52,11 @@ class Dev(Configuration): 'blog', "crispy_forms", "crispy_bootstrap5", - + "debug_toolbar", ] MIDDLEWARE = [ + "debug_toolbar.middleware.DebugToolbarMiddleware", 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -67,6 +68,8 @@ class Dev(Configuration): ROOT_URLCONF = 'blango.urls' + INTERNAL_IPS = ["192.168.11.179"] # for usage of DjDT + TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', diff --git a/blango/urls.py b/blango/urls.py index 37cddfe1b7..d9829f9651 100644 --- a/blango/urls.py +++ b/blango/urls.py @@ -13,15 +13,22 @@ 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ +import debug_toolbar +from django.conf import settings from django.contrib import admin -from django.urls import path -import blog.views +from django.urls import path, include +import blog.views urlpatterns = [ path('admin/', admin.site.urls), path("", blog.views.index), path("post//", blog.views.post_detail, name="blog-post-detail"), + path("ip/", blog.views.get_ip), ] +if settings.DEBUG: + urlpatterns += [ + path("__debug__/", include(debug_toolbar.urls)), + ] \ No newline at end of file diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index ddc9505d8bdaa3bd51c386e447a3ead12e35a927..f4d34af00c0cae9962ade96fc2ec4e6b50569e90 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=z;Fr3I%1ppP%11bOj delta 14 VcmZo*Y+z(F=H=zOpgxhU3IG=o184vM diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 6e31a3daab029a3c9c1e055b30715d1c80cadd33..8f68656794ad56fe0d1ce071baa162fcedf9b047 100644 GIT binary patch delta 14 VcmZo;X=7nC=H=z;FkHyS1OOIo0@MHi delta 14 VcmZo;X=7nC=H=zOpuUie2>=(Z0}=oL diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index c9c98bf36384f555bb50769321fb05eaba633732..dad8d4f27533a98c916e18e32e0795c70a33912c 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=z;Fx<%2&IkY-HUoA5 delta 15 WcmeBW?qy~(=H=zOpuUlNe~|xh?~RHxoHKJC40rB~Cqv&V6mqxy7I}ZshZvpm5#Bu^n1~6o47x-lBHv@H zNX5l6xR@vjwn~3Wg-)4hW5Lu@br5(S^&=Cddf?lHx-_B_P#T%qbDz*F{)y`q6Q_A6 zjsn{cE^UVpRuKe&f8oPss?Hd7qJXgySfBzwg7=sVidDHIHc*YLC><&c3`8T=XG ze`Uo!Abfy7bhs(4$(YEA$oD0?wE}^OSUo$$RGzwyf00Ul?7F`byh_iT4G5W-(JD}? zj*gEedxMFkz`*A)S38S38FhIg*V-FdOCP)O*>Fx>l1d?5Ej5fi&tccB$=~FI^&XUJ dfUpXrp%Ti&E&{Y47)Zmc$G4S7)Z-t@&NsAuU$+> z#J}J_v7SP#{2MwG#ewt9;oMuC`(iy<#$G<3d*5xs=QpD-f=el*MpFl z(kXDrh16)Q2!cSXgE;Y1{}vrbDH$PWg(K0?AF&<+y;1^ezffrp<_3892Kv1uv91t+HvDje@Rwva8eyKXNk zg{rit9E_eKr$9mv?W63q?@-7sv+l*a%#YdqW=G%XF88z0*ejLtzmB%pp9~>?$;z@Y ze}f^1i^j)No)x~6^9swH60f-UF}&DENs#~oOVPki2!m?~GR#Wg3n(YZGOFAd5=bl{ zDi;%GvrG(QNGNu2x*nWYXYavIX+ zP8Ey9Q-iv}20~{C(PYA>O01cyC7z_e>A}|~o(F(1%ls6Iaf~515e%3Wk_iqCB!-v- z7NZ*^0UXlq3iHeZU3{n1tjFanno6z*sjRg4KO73$eLacT VJmiPQsH`Ar*vV|y&QsTM>yOh%bPWIi delta 306 zcmZqY-o&YF%*)Fqqbr|cz{`F-owY zG$|*uI3qPBKCvV|KBpvgasZ<`Bj@A_M#af18C5tqfQGMRC=!@_mC=z+h*5yCNNBSR zlRG1$$mA4eT}GbClbBUC_<@Rwgh7NDh!6)7x7d^Ob8}PkN{R$PLSRC0@_lA2Hf11R zQ(*FOmNI7^kdzRJ00|<1F>|m105oDb AlmGw# diff --git a/blog/migrations/0004_alter_post_published_at.py b/blog/migrations/0004_alter_post_published_at.py new file mode 100644 index 0000000000..f84c3cab24 --- /dev/null +++ b/blog/migrations/0004_alter_post_published_at.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.18 on 2023-03-25 18:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0003_auto_20230323_1221'), + ] + + operations = [ + migrations.AlterField( + model_name='post', + name='published_at', + field=models.DateTimeField(blank=True, db_index=True, null=True), + ), + ] diff --git a/blog/migrations/0005_auto_20230325_1842.py b/blog/migrations/0005_auto_20230325_1842.py new file mode 100644 index 0000000000..011d14c60c --- /dev/null +++ b/blog/migrations/0005_auto_20230325_1842.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.18 on 2023-03-25 18:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0004_alter_post_published_at'), + ] + + operations = [ + migrations.AlterField( + model_name='comment', + name='created_at', + field=models.DateTimeField(auto_now_add=True, db_index=True), + ), + migrations.AlterField( + model_name='comment', + name='object_id', + field=models.PositiveIntegerField(db_index=True), + ), + ] diff --git a/blog/migrations/__pycache__/0001_initial.cpython-36.pyc b/blog/migrations/__pycache__/0001_initial.cpython-36.pyc index e08b696f10a46a6299a869040045de3b2e63f411..417879b766ac5c8512ada20657668070d380d7ee 100644 GIT binary patch delta 15 WcmX@ld7hKan3tEU!*CLs|1?> delta 15 WcmaFM`j(Z=n3tF9g8D|b=S%=7DFoR7 diff --git a/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc b/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1bb88c555d20b1f0b5e8355041449868ebe578aa GIT binary patch literal 599 zcmYjOF>lo{5Vqqa&5QaZCOWcJ%F?6>BZ49!SfEQgWwDZXN19hB4t647hPA(enLotf zm5IN=)N|UZwdF6DJKuNrovZCO{qyDp{NjxLWlvT}_8A>}OaKhHVgs-F5Yz!@9~cB6 zelifq_u_}B1%wwYi~iAFmIW>y`pz_SuSe_RK?5qg^Pz{8ka0%G76iy@4y+Df)A3qh zxQ~G7Fy0?PwC?yuz`>26XaWh9N!{kt1HTJfr8{?26h$SQW!ADR%BrZ!N}iVGsS77< zXLmR)t?KO+f^6o?Ot`33&3Nq+Xk|YFeskftC`EyE?N*M>faLQSeeO}gc@~(6nl&*& zwsDDE??~xVDJf@BNcN$WUzSGsJpTtcA+e9U9<2!|(WP(IjOM*(G{QT!@0uAe`vF&< zOZ9~JgZs_Qb6?QI|Bv~V9x&f&=ym>8n`=8YJIuX`PSZzs`QylQ8pcc6_)5~tmrvE7 zOy7-vTd%{W1c`{lkO#C^|9KX=4eUMd3AAh1Yo}}Qv7Q4V_FUWeC&%`a? C-k_!c literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc b/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db907c35618babfc84cec2fcdd69e75da1b2ead0 GIT binary patch literal 669 zcmYjP!EV$r5OtjFZW4B-3RQvw5;vq=nq{|@I3To06;%&ZNc5D8m1Kt0A&G;XrR5CQ zJ@XCxlCPZj1x}2!T@_n?p1g5p=8e5xEaIP==Wxjx`_29v0ofZ`<^=&T@EX>7nb-1+ zd+dS%2mc2HAHCZD?q@y(A6YW_LuXmSZQROA=Yv$8vC~!oHl}p0!j~|8N|3}h6ysk)*jNaPvTcy;xe#BrdE+9v zFTfrtQ&&nfnr?&H_^qq`oy(zpM=Z{%&}-S^$l2o$%E&=}#mjEM>i(pSRgd?*|HbqZ zSB8VX7wL^^F)bBHmEJ1-+4OmdY0>0erD#)C`fzJ0_3liJtynEr>*acNCSJZeU7hsb zw0jv&n0ZVP`qLorIL#xz-$(yd64(f87y1N>QO+n~bUqZdx1LfQ8@}E*=8aQooc<&K EAJT@iq5uE@ literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/__init__.cpython-36.pyc b/blog/migrations/__pycache__/__init__.cpython-36.pyc index 3071e9bf5e6412db860180900de389788fbb975f..f318de56ff610ced03a23b6c041e72bace1e756a 100644 GIT binary patch delta 14 VcmeBX>}F&$=H=z;Fr3KN3IG=R14{q^ delta 14 VcmeBX>}F&$=H=zOpgxhU6#y7I1Bn0t diff --git a/blog/models.py b/blog/models.py index 8d0a51de2c..f560bd0cef 100644 --- a/blog/models.py +++ b/blog/models.py @@ -15,16 +15,16 @@ class Comment(models.Model): creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) content = models.TextField() content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) - object_id = models.PositiveIntegerField() + object_id = models.PositiveIntegerField(db_index=True) content_object = GenericForeignKey("content_type", "object_id") - created_at = models.DateTimeField(auto_now_add=True) + created_at = models.DateTimeField(auto_now_add=True, db_index=True) modified_at = models.DateTimeField(auto_now=True) class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT) created_at = models.DateTimeField(auto_now_add=True) modified_at = models.DateTimeField(auto_now=True) - published_at = models.DateTimeField(blank=True, null=True) + published_at = models.DateTimeField(blank=True, null=True, db_index=True) title = models.TextField(max_length=100) slug = models.SlugField() summary = models.TextField(max_length=500) diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index 85384f55449598cf0716b5cee8b7c2533269b450..78ea76e0474538207f9eb7b81db3f0de5024592f 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=z;Fr3KN4geQ015p3~ delta 14 VcmeBW>}6y#=H=zOpgxhU9RL_`1CIaz diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index ed02ad59da36833d1e0959a7c5a3b9d563bd4031..dfd6da05f3c3264586cc01b2f070893f5ef172a7 100644 GIT binary patch delta 15 WcmZ3?x0sL3n3tEU!*C;;EIR-l?gLZ+ delta 15 WcmZ3?x0sL3n3tDJM{gsWEIR-jw*vJ5 diff --git a/blog/views.py b/blog/views.py index b440b3391b..5940964bbe 100644 --- a/blog/views.py +++ b/blog/views.py @@ -10,7 +10,7 @@ # Create your views here. def index(request): - posts = Post.objects.filter(published_at__lte=timezone.now()) + posts = Post.objects.filter(published_at__lte=timezone.now()).select_related("author") logger.debug("Got %d posts", len(posts)) return render(request, "blog/index.html", {"posts": posts})# @@ -36,4 +36,9 @@ def post_detail(request, slug): comment_form = None return render( request, "blog/post-detail.html", {"post": post, "comment_form": comment_form} - ) \ No newline at end of file + ) + + +def get_ip(request): + from django.http import HttpResponse + return HttpResponse(request.META['REMOTE_ADDR']) \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 37ceb3c540c6471aee6ae3385d8d51f1f78344a7..427641158dddc53bc752540bae70bc23dc14b98b 100644 GIT binary patch delta 1325 zcmZuxO>7%Q6yABe{!cP)n%JSi&en+)A{={v?RYC>+=vv&4*?1ngtkt+YEwD2Nn9xi zq-K#o3WzpV4ii#0r7CIyl$EzhgTT%e1*Zk;_vZi z_zI;cVcpNlXivAyi?XJOny7I9;}T_9Ll$F_}Y-F34qhyyrZ|8mxIZwdXvF8sB znXc!_Ac0_S?T6}_gqX-kY71G!B73-V!N?R_K^9rBTJupNcASdsYZ1GzVDzLaDVeyM zB;GQFlFhZWw-n-^nc_pWY^?YY|467AXGwm}lKc*OmTVE&K+|Mu9R^U0EUv>T;=K$G z@^%ho$y@KiI{7_|I>`NXkamI_@D)N&lV2`^NLI`65Ru9tqNhl<3=tICDV5-l7A4vruND2XXnQtn~MtPeN*3G2Tqoa=vx@2-E017!AgqQvcwJP2e zslIgj*s(;6LRW$m`dtuC9ByT;HGw&aJQNxZi>8I0zD;Eu@1ru_?1R^angSZ#QBQoA z!GGchc$c0HHKSefB}RUFHjv$qA>eHPscscB+Kw)j%!@$JIP)lSALX2kAGy+L7l~FO RWvfpYsxbEN^hOm%{{et#Y)k+E delta 624 zcmZXSPiT^H7{}k=qfULD`{~A9>yL_m7-O36>uX!RF~&P<9yY5(&>_aA`BDR&vKiF6 z_;!=1HH1BGxz!;m2qGuw$*4nz4(h4P3NnJ|lywQZ^;YXpJ@D{+`10k;_weM}rrbT# z?E_YcVHp4367`;2^9e*M&)=t-es-szw~UmP99!AhFYENXbcTx5T~>5dOCK@AYf@jY zrB~x6@nrhq+=X;1B`;>Rg_*!A=_$MoxJmzY?g2;I)#u+d4mm>3!rLq~9_1=p%h=(4bRhUV!P z`h+$s*34CkZyeyo#}05}-T^KP)p(8al~^j1l>M3Xa<6}+0hX&+b8U*BSHX7B zr1vmXF@NiBb;nH~O+oe{>o82~pXxojcv(5218u#mJR={MWg8)OPA2%F?2o+^R| zqw8S6l_JFO{RWI Date: Sat, 25 Mar 2023 20:23:47 +0000 Subject: [PATCH 12/14] Finish custom User model --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 4047 -> 4105 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1200 -> 1200 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 578 -> 578 bytes blango/settings.py | 4 +- blango_auth/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 135 bytes blango_auth/__pycache__/admin.cpython-36.pyc | Bin 0 -> 1106 bytes blango_auth/__pycache__/apps.cpython-36.pyc | Bin 0 -> 417 bytes blango_auth/__pycache__/models.cpython-36.pyc | Bin 0 -> 1805 bytes blango_auth/admin.py | 40 ++++++++++++++ blango_auth/apps.py | 6 +++ blango_auth/migrations/0001_initial.py | 44 +++++++++++++++ .../migrations/0002_auto_20230325_2021.py | 29 ++++++++++ blango_auth/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-36.pyc | Bin 0 -> 2316 bytes .../0002_auto_20230325_2021.cpython-36.pyc | Bin 0 -> 806 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 146 bytes blango_auth/models.py | 50 ++++++++++++++++++ blango_auth/tests.py | 3 ++ blango_auth/views.py | 3 ++ blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 518 -> 556 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 924 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1822 -> 2227 bytes blog/__pycache__/views.cpython-36.pyc | Bin 1415 -> 1415 bytes blog/admin.py | 5 +- blog/migrations/0006_authorprofile.py | 24 +++++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes ...004_alter_post_published_at.cpython-36.pyc | Bin 599 -> 599 bytes .../0005_auto_20230325_1842.cpython-36.pyc | Bin 669 -> 669 bytes .../0006_authorprofile.cpython-36.pyc | Bin 0 -> 907 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes blog/models.py | 12 ++++- .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1827 -> 1827 bytes data.json | 1 + db.sqlite3 | Bin 192512 -> 200704 bytes templates/blog/post-detail.html | 8 +++ 42 files changed, 225 insertions(+), 4 deletions(-) create mode 100644 blango_auth/__init__.py create mode 100644 blango_auth/__pycache__/__init__.cpython-36.pyc create mode 100644 blango_auth/__pycache__/admin.cpython-36.pyc create mode 100644 blango_auth/__pycache__/apps.cpython-36.pyc create mode 100644 blango_auth/__pycache__/models.cpython-36.pyc create mode 100644 blango_auth/admin.py create mode 100644 blango_auth/apps.py create mode 100644 blango_auth/migrations/0001_initial.py create mode 100644 blango_auth/migrations/0002_auto_20230325_2021.py create mode 100644 blango_auth/migrations/__init__.py create mode 100644 blango_auth/migrations/__pycache__/0001_initial.cpython-36.pyc create mode 100644 blango_auth/migrations/__pycache__/0002_auto_20230325_2021.cpython-36.pyc create mode 100644 blango_auth/migrations/__pycache__/__init__.cpython-36.pyc create mode 100644 blango_auth/models.py create mode 100644 blango_auth/tests.py create mode 100644 blango_auth/views.py create mode 100644 blog/migrations/0006_authorprofile.py create mode 100644 blog/migrations/__pycache__/0006_authorprofile.cpython-36.pyc create mode 100644 data.json diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 396dc7c76f9074a4a436e987b752181e80842c74..35a153c48a6747b155120e6a28bc11dbbeb8a928 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=yT^Pk980{|9v155w_ delta 14 VcmZo-Y+__H=H=z;Fr3I%0{|8W126yp diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 7c33fca49e1091a9ebcb9a32fcaa9c78427efd13..35de1464b019da3f72b322b19a3a13815c5909a3 100644 GIT binary patch delta 611 zcmZ8eO-~b16rDFS&b0H9O&0`V zozQvX{bczrB(6Dn%YckaP+aMhaTBT&X<4l(LZ>V#AeuF^zo@&64^YA&ApwIN z1|Ncn2rNVqLmUGbL;^!dx;jr{7$X=(3S&sS3LnNe?~WitA*0ATDsm~oWsop|JPMe^ zlq)wGrhS zQv4+PXCLM73Y+y_>pa%8HX4uXc4NP~XYcG*s@rEj z^xsUW(Wka+-ZyjAct>MMj4HAyi(WcX@YW)~mjAu?O#y8MR44jM=*UDNrm?L(q)7hqv?C9+PHPUCbky=*Usd#XwXsgj}dczOi?az9eKfT>3XV+7&|bdfX} zvgF7!LV;1nC`P^>XPgofOfp3|a&(DlJ;97zIGJR&<5DRbk;0@(jXCNxBD<@YPi(PF zv7pNmbDG7D`_W+O(;(;!A#F|M86dW*{1(N zWXjAtwiUn1HsZJ0-y8p@L(7162ec>jO>k@rrIfFRozS~*+ii|sx7+lHPD4)Ur1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFBAQY{M=Oi=#N<@{q@2XO^n554pIBOwp&uWgnU`4-AFo$Xd5gm)H$SB`C)EyQS}_na F007`jAQb=r literal 0 HcmV?d00001 diff --git a/blango_auth/__pycache__/admin.cpython-36.pyc b/blango_auth/__pycache__/admin.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6db7ca87f1db29454e641ea0b3d949e5d15119b GIT binary patch literal 1106 zcmY*Y&2rN)5Vrgm$8mmI`U?dzaLOf_!j)kP7ls2JW*A_`7okQ@mG(>BDfCnRFGL~mWfED*FHox-gtxL zH`Mk9#6^r3vINk4YlMDQ6W@hM+}3l&%4vo86)V|PXo$^3H36K! zV?KZpUQW1|`ZziPi0+EgV|eOXQ_mrkTMmX@p# zuBq4>wjipI#>lEPt|<*=V=F%kmjE=DO(rfww3rLMKz-t=t`>9SddMhv*U4Aim&Lr& zmX)^8nH9#R^(v~G%F?yaMQ4>P1$W_v^1e7t(R{LDMC)R*q7a zQd(4ep#|GNv@EAT zJpBNBMDyo(bY2x=G_JU;MsTDb&76(J=&T;l)r+!)Js;KcJe*(Z2IQe^rjNi+Nym?U znE%xshufhKJPSh-k~;cy(9S!2hBH4LSEbeRO#6_WAO7zg;zGlEAsyiN?PVWz14B?m zD5LQ&))5$Yu*zOosm#!7RvN`D44IBG<_HZo>p~+fOq&){&`0Ra_Lt}(#w1Ucia#a5 P430uZGSY)>^!k4RpSmew literal 0 HcmV?d00001 diff --git a/blango_auth/__pycache__/apps.cpython-36.pyc b/blango_auth/__pycache__/apps.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95cda4f1a0755baff7396b6e71c7c04206c18a32 GIT binary patch literal 417 zcmYLF!A`?440W1L8r>!##1+A{mllaDLfeqwHVJX-CCcV(E2K?nRw1~;Pw)wR1Ame$ zCw_qwPFui|9qZZ8&+*x05`Ekp;~M~clK)vq*_7O#P(VPYp7#@0kApnlWl% literal 0 HcmV?d00001 diff --git a/blango_auth/__pycache__/models.cpython-36.pyc b/blango_auth/__pycache__/models.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee014b218742687c365772be95e0ace3fa411780 GIT binary patch literal 1805 zcmb7EOOx9~5Y~(ymbKbfB|v~YObSx*#V+8&0jLDlOQlF$#XdrnE>p5+?3E)~n;8j+ zO1ZGPCRcs~e`&6q_zRrq9%*e;$sUlZdwOPidb+>v=`XjpgM**%aOzpsU)ILwfcyYR zJqE@tPEso)5g{nklxB8hXHMjpxt+S17j=mBgT)>0zOuM0oC`bhVeat`%saw{d6)ag zR=@iA zsq=U$h7*HNJFvJc&W25<2Inty$fi=ngd-1Aa|sw6@<61F7~C#Z(c`W`{aNu{;+Ny@G-Y03x$E7T{$QycTA1ps@<+0z^dC;o?VlT;JvYYA8en<4}e#9k1r!{%IgeDqIZeSHz%?b zgX-Q@I+sTqJ;3P(nAA4BIoSp2f1tP5;<3sDT578UAf!7`AwaacdnJ^sqkS@l=ioE8 zj5EQQ4j6+HEK`(2#-5jP+Uywr+hH4>&(ViqwLlTM%b-M}?#|LG;Ge)kn< zu6s#j3uoa952_Fn!=2YO>InbBf?noE!Q6_r+U^o^tV&-y*jL8Ywt2I?m~$zVI>ByN zE|ce_FeNx8a0z}mB7F~J+=IqpfgK2+7)=;V;jZH{mD*uY`I52E@f-zakt)QS2kl0G zTi%3Kc?;QXVA{v0fuKp$*MaFrhu9S~Va>xppmZmnEX1@>dgt_bbToeWWW)|1jUFH9 z-J{V@r;mP5|y|+?gzTd7ubgfeA0OI zQ9GaJ%R(lT0XCjN(|9EI2#G1uH(IT-NK!R`&bCx(TqOBYV)K@tBEvY$HSh9H`(HPu R^eqCfd|)BjBcZo<^Iy@At-SyM literal 0 HcmV?d00001 diff --git a/blango_auth/admin.py b/blango_auth/admin.py new file mode 100644 index 0000000000..61068aba5f --- /dev/null +++ b/blango_auth/admin.py @@ -0,0 +1,40 @@ +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin +from blango_auth.models import User, BlangoUserManager +from django.utils.translation import gettext_lazy as _ +# Register your models here. + + +class BlangoUserAdmin(UserAdmin): + fieldsets = ( + (None, {"fields": ("email", "password")}), + (_("Personal info"), {"fields": ("first_name", "last_name")}), + ( + _("Permissions"), + { + "fields": ( + "is_active", + "is_staff", + "is_superuser", + "groups", + "user_permissions", + ) + }, + ), + (_("Important dates"), {"fields": ("last_login", "date_joined")}), + ) + add_fieldsets = ( + ( + None, + { + "classes": ("wide",), + "fields": ("email", "password1", "password2"), + }, + ), + ) + list_display = ("email", "first_name", "last_name", "is_staff") + search_fields = ("email", "first_name", "last_name") + ordering = ("email",) + + +admin.site.register(User, BlangoUserAdmin) \ No newline at end of file diff --git a/blango_auth/apps.py b/blango_auth/apps.py new file mode 100644 index 0000000000..3619a45e56 --- /dev/null +++ b/blango_auth/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BlangoAuthConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'blango_auth' diff --git a/blango_auth/migrations/0001_initial.py b/blango_auth/migrations/0001_initial.py new file mode 100644 index 0000000000..d6a7ea2985 --- /dev/null +++ b/blango_auth/migrations/0001_initial.py @@ -0,0 +1,44 @@ +# Generated by Django 3.2.6 on 2023-03-25 19:57 + +import django.contrib.auth.models +import django.contrib.auth.validators +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + ] diff --git a/blango_auth/migrations/0002_auto_20230325_2021.py b/blango_auth/migrations/0002_auto_20230325_2021.py new file mode 100644 index 0000000000..a3e4e5d3cd --- /dev/null +++ b/blango_auth/migrations/0002_auto_20230325_2021.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.6 on 2023-03-25 20:21 + +import blango_auth.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blango_auth', '0001_initial'), + ] + + operations = [ + migrations.AlterModelManagers( + name='user', + managers=[ + ('objects', blango_auth.models.BlangoUserManager()), + ], + ), + migrations.RemoveField( + model_name='user', + name='username', + ), + migrations.AlterField( + model_name='user', + name='email', + field=models.EmailField(max_length=254, unique=True, verbose_name='email address'), + ), + ] diff --git a/blango_auth/migrations/__init__.py b/blango_auth/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/blango_auth/migrations/__pycache__/0001_initial.cpython-36.pyc b/blango_auth/migrations/__pycache__/0001_initial.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..204f59f0d64d3240dd8a7d2ebea452f245c576c5 GIT binary patch literal 2316 zcmZuzOLN;c5Ed!wX(@K>*m0A#L7S$H@}Qho+jQDYUQODWrjtqR9(3VAT!?}~kqQ9D zF;AUIufF!wKhVE~Yft_QJ#@MN=trlKh9Iz5>@L1<7vQaazkB<|1-QFZtNm3w@e8nj zA0K%S8>oSo)<&Lv`}Xap^?5J~=8aLqbMwuS_p}Ce2!5+Uz=B!pU47I7?`3V!I6xb< zp9j9~&UqrJ;&~=@bDjfBWo+gSe`m3CA0PR`tJRqGIP$?8)!}a9jRMw~H6efoYt7o= z;lBwjXzvFTA37-OKo>f&wD04%hvTl*>BFi0I!cyNvV<#E;54jS$(mhr2G+R;8*mmp z)|>Tbr)JBum3OtogEiRPZ{o@ite%G&=it0u`Qee|qe}8IN=~D{3qUH#Cnz!gK81^w zzt611gG=yvCHVp+UG%y-TbrGM%P_F9UqR_Q+PVtY;5vkG1%@_`txA5w%5TCgCr|pQ zbsIh1`J)bBR(oj8Hr~}HKJMbH{Q$8$3tuA>-{{V>Lk6~WKnpe1m$tTU+>B_dn1~9A z&4df7qKwX2G^cN)lw}F31v@yWeGX5w|KsC9pnJGFk7B{7VxX56g3qbgi(auk-9c4O zQ(iLNd&9&ym(1GJ?FE%`Hy3d5E3#}8;>d&OqeypCiq6wK;aO?>#P$bu-594dd!>V{ zNK>cV<1&)Pf(a9L`TQ}HJjpN`Nz{}oY`7$5icF~_G))Pr&bgE({m3p?)4WiGyxU)s#DHSwELL|urnXp|ZLh=(+Mske+ zPq@MjWkBu^!{OE8^EyKWnb6rD`UyC>+` zoiapN7?>SIG0hCmgl8&uyiu6*j7Y9nSoW-iiUZw2lL!uf!%FsEn}@7Rf@cy_CI@I7=S7C>=%!nwmk=`+&2pYGDD8l_!N3>m z1}KYBGZA^QkR{#5-MPNol1;@iOY zWi`|`=OW3J4vg`#YYIAiYWxqHjyprW?g^HfDs@G;dN{%)#e%gt>tiz5=vR!P=tQBE z7hf(|%qKklPx(wRF^>u?ESIh4=STHbT019K=!UV3CFK09ojez!MOp}&>NXuqWins4 z^6?DWk$BDouBaxQr66%);jWMNoMxEZLgKw58V3C)HiJ#wj@;Q5>24I^9aE$%igYiE zUKcbqws6$q8CQ5h=^n5J%YbDu$2##1SWAy=wmdVplc-zx9`fV?9(GSm2)gqKtJ8J+ zj}g^vK4)&&dzj}bqnR5uVMeng*R43ul;C3*;j9(7xQFp&LrQ{4W z3dK__A%zagJY%|^<-2#bJIGtC1VAL1`OTJkvez5{#g@G(V1=jel(osb2db$ zJRjl#{7Nop%!cMjP4em$84icXH}r4|Z-%HsDqQRd^G(pfM_$3E?FaQ{5O}_S##`}L z@qgL2rnl;Cc$?n2y6^d3vu@W7+WMRWB&_fVZOXWh0P!7K9DV#gh2yhIcdB_9Tc#{I mqxDK?!3qztvObUZ?|MI=6W#vS<-|Qht!$f}cx~K4yZ$e$ljM;A literal 0 HcmV?d00001 diff --git a/blango_auth/migrations/__pycache__/0002_auto_20230325_2021.cpython-36.pyc b/blango_auth/migrations/__pycache__/0002_auto_20230325_2021.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5eca69c182afe7b433b08218b26a4dab5ffeb821 GIT binary patch literal 806 zcmYjPy>8nu5T-;)mSww5J#_2Os>O0_WGjlaK-o~w9=n7UGpG) zj=lxaty5m1L(wCxAR)lx$NS@VcU(>;(XUU>;J3@zA9infgpX;f83|zE)GT%AbZfWa zDQ~>gbJ#lu9K0V4Jmi&s#Zw=g4=na?D2AQHu8x|rkom3@tU&*q#V7S-k=Vfyv+-g zN{7b5=xkZ0l+4`ZkeF*9o4l-V{t-U?KCzeQIezQRb$};L?S0mwZmR)ptZHSl~;1*lJc2lB~ zG*PCfuj(Djm7%-pE7_;z#`@^B?Z-!|thegXdu+rdzBL?lWTSih#+2A&vBiF@Kbd@D zXd3bNBsmuiCK~~zNWKX9S#9$TCi|}Uhi!gx_b(C}!@?*3$r zKwCW~5%R$E9M_$4l1|_n={nXY4$|qp(a!ci%@(SMP??#}U~M}hP2o1^j`totC4&xM P?0fstxGD2~=p69>-vHh1 literal 0 HcmV?d00001 diff --git a/blango_auth/migrations/__pycache__/__init__.cpython-36.pyc b/blango_auth/migrations/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51482df61f28a458904a401743fb7d8b8b9cc51c GIT binary patch literal 146 zcmXr!<>lHPD4)Ur1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFMIur{M=Oi=#N<@{q@2XO^n554pIBOwp`V+XUX)mpnV(mzA0MBYmst`YuUAlci^C>2 QKczG$)edBEF%UBV0ES8=i~s-t literal 0 HcmV?d00001 diff --git a/blango_auth/models.py b/blango_auth/models.py new file mode 100644 index 0000000000..cb48ee960c --- /dev/null +++ b/blango_auth/models.py @@ -0,0 +1,50 @@ +from django.db import models +from django.contrib.auth.models import AbstractUser, UserManager +from django.utils.translation import gettext_lazy as _ +# Create your models here. + + + + +class BlangoUserManager(UserManager): + def _create_user(self, email, password, **extra_fields): + if not email: + raise ValueError("Email must be set") + email = self.normalize_email(email) + user = self.model(email=email, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_user(self, email, password=None, **extra_fields): + extra_fields.setdefault("is_staff", False) + extra_fields.setdefault("is_superuser", False) + return self._create_user(email, password, **extra_fields) + + def create_superuser(self, email, password, **extra_fields): + extra_fields.setdefault("is_staff", True) + extra_fields.setdefault("is_superuser", True) + + if extra_fields.get("is_staff") is not True: + raise ValueError("Superuser must have is_staff=True.") + if extra_fields.get("is_superuser") is not True: + raise ValueError("Superuser must have is_superuser=True.") + + return self._create_user(email, password, **extra_fields) + + + +class User(AbstractUser): + username = None + email = models.EmailField( + _("email address"), + unique=True, + ) + + objects = BlangoUserManager() + + USERNAME_FIELD = "email" + REQUIRED_FIELDS = [] + + def __str__(self): + return self.email \ No newline at end of file diff --git a/blango_auth/tests.py b/blango_auth/tests.py new file mode 100644 index 0000000000..7ce503c2dd --- /dev/null +++ b/blango_auth/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/blango_auth/views.py b/blango_auth/views.py new file mode 100644 index 0000000000..91ea44a218 --- /dev/null +++ b/blango_auth/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index f4d34af00c0cae9962ade96fc2ec4e6b50569e90..7d0aa8c55d6bbc7812e3f628e336e9cff58361f8 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=yT^Pk981ppR514aM< delta 14 VcmZo*Y+z(F=H=z;Fr3I%1ppP%11bOj diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 8f68656794ad56fe0d1ce071baa162fcedf9b047..2af6a0d0b6064629e41f9adbae18e31885f2d5fa 100644 GIT binary patch delta 313 zcmZo;S;L}i%*)F)D?~oUi;;ohF#{4{0kR!{xHxB`vSNKMTNE23gF8bCa|%lfLkdeO zV-|Zea})=V=FH+sWo~9PT9T1p6i}4Ul9rj1I&p;$Bj?1gj%<8Dy+wSJ zZ5R#2*?~-uON*I+1P5agi0`M#J-M0DFtUgZ$hpPko1c=J;|Q__EPIQkII|@67DrKP wdS-D+YEcoyG@w!liyx$k!zMRBr8Fni4j3v7#XLZQhf#t_h=qrdkCBHF0Kw}+rvLx| delta 275 zcmZ3((#E1}%*)HwVJM#>&d9*6a2_j2CWSSaL6hwz$Yf2%TdavGxtV#I%(s|B64P(7 z1mqW&++ugm&&^HEE17uQhmm8l2%{q#FHmt2@8oDk193JW6XcX)CLqDVSOntxX>v_o z#Aq0Fi_14ZB{jzpWF%PP7E5tvN$M?*qSW-v;*!*&B8WjiEf5wTkadg0CO1E&G$+*# V=wpUrE+E0fD8eMf!o$eN2mqI+IIREx diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index dad8d4f27533a98c916e18e32e0795c70a33912c..56138ea8a22eb631aa3fe004ae31c7dbdfa1b10d 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=yT^WVtU&IkY-zyp#1 delta 15 WcmeBW?qy~(=H=z;Fx<%2&IkY-HUoA5 diff --git a/blog/__pycache__/forms.cpython-36.pyc b/blog/__pycache__/forms.cpython-36.pyc index 726c46ffc6f6cc40a220d69370850542d9fa1a8f..c75213e840a6f88e8376f99bf04c98f994233d47 100644 GIT binary patch delta 15 WcmbQkK8Kynn3tEU&3_}?G-d!D>;uUF delta 15 WcmbQkK8Kynn3tEU!*CdLCfC!0GI4h;@fs_r;NsodOHbL3I^e67-vA-K4(y;-?-6k+%wnq)-49tK9Z*{`-u0Qvu uNzxD|zzj;~5IJhm63a0#s|~LZ3;WhKQ-^x|X-^NB2oC*uSS4G@S4v-{TyKH^ delta 161 zcmdliIFC=+n3tEU)Zm|>tnNjS;rMbC@MU_QzlfSU~GAd7Y nVpC>U1}gQ_a>xqkreMH3YW+ delta 15 WcmaFM`j(Z=n3tEU!*CLs|1?> diff --git a/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc b/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc index 1bb88c555d20b1f0b5e8355041449868ebe578aa..e6866497a95cae11e63e4e5465d43ad915712fe4 100644 GIT binary patch delta 15 Wcmcc4a-D_En3tEU&3_|XAQJ#1hXeBf delta 15 Wcmcc4a-D_En3tF9n*Bz$Kqdes7X&i^ diff --git a/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc b/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc index db907c35618babfc84cec2fcdd69e75da1b2ead0..5536adc2d21a9f0cd63c52e8086605a8e0f66c2c 100644 GIT binary patch delta 15 WcmbQsI+vBrn3tEU&3_}?bS3~D)dR-> delta 15 WcmbQsI+vBrn3tDpy2D1c=}Z6}@B_&J diff --git a/blog/migrations/__pycache__/0006_authorprofile.cpython-36.pyc b/blog/migrations/__pycache__/0006_authorprofile.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e437ece48ac928b32262371a6730d001bf6a900 GIT binary patch literal 907 zcmYjPOK;Oa5VqHjUvc_Cl@KSy1>{Q-5{eK)sObxkXp3li@nz*?H?CdVYt{}WTnoqk z5dP9!Iq?@bF>Ck1T08sg%z$vQtY*5O8KUm2mzj8iSJ{@{Bp(7~yAT_;6c1q8f2iDgtL zqNu>i1>;$DJXe0V%R{h(yIP>&TBtKEBpBD^oz%M0*?LSu8}AM?n91GLV;%e~W;5s7 zToC4>u6v~+@(}sFm#(F5x}I*Zu8P3?YhyuTgY~XStcROy4Kv*U_vkh)FlU*F;o)#N z+@{g87IZWmjfdmWHhuo;#Rz(nWqmH>Cn*+5#(^YkdI;pheqe&%xX&ezYR;fr$|R5E zieB&)xD}U4lqKIe_+Po4iHg%A$~hRbM1Z+OGuUMtGcdpv1x0FjjqZ|XDqibOYJnu0 z%~NZU@QhW*0g)DRC2bVJ18`{LN-21hBE!p!Blao%vWznIkWz^)*I=urJ-L3gjI@kq5#s&N5-H;IuLai~%Pcgnxj zE$p2Xd@4}1SBs@l5epz}22N8UP6F6_lheJ){sDNR5Mfe_M%sqEc3Wx=+4E&rk=>o3}F&$=H=yT^PkAp3IG>q17`pL delta 14 VcmeBX>}F&$=H=z;Fr3KN3IG=R14{q^ diff --git a/blog/models.py b/blog/models.py index f560bd0cef..3ecce643a9 100644 --- a/blog/models.py +++ b/blog/models.py @@ -33,4 +33,14 @@ class Post(models.Model): comments = GenericRelation(Comment) def __str__(self): - return self.title \ No newline at end of file + return self.title + + +class AuthorProfile(models.Model): + user = models.OneToOneField( + settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="profile" + ) + bio = models.TextField() + + def __str__(self): + return f"{self.__class__.__name__} object for {self.user}" \ No newline at end of file diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index 78ea76e0474538207f9eb7b81db3f0de5024592f..797c159c82e0618930420e195c136463b45d6491 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=yT^PkAp4geRP18o2R delta 14 VcmeBW>}6y#=H=z;Fr3KN4geQ015p3~ diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index dfd6da05f3c3264586cc01b2f070893f5ef172a7..76be96b0de891ae86e9ac107005f5c5dc0339f09 100644 GIT binary patch delta 15 WcmZ3?x0sL3n3tEU&3_}CEIR-mcmr?% delta 15 WcmZ3?x0sL3n3tEU!*C;;EIR-l?gLZ+ diff --git a/data.json b/data.json new file mode 100644 index 0000000000..3beb2a9a04 --- /dev/null +++ b/data.json @@ -0,0 +1 @@ +[{"model": "blog.comment", "pk": 2, "fields": {"creator": 1, "content": "I like myself!", "content_type": 4, "object_id": 1, "created_at": "2023-03-23T12:22:47.979Z", "modified_at": "2023-03-23T12:22:47.995Z"}}, {"model": "blog.comment", "pk": 3, "fields": {"creator": 1, "content": "Crissssspyh!", "content_type": 8, "object_id": 1, "created_at": "2023-03-23T19:00:29.352Z", "modified_at": "2023-03-23T19:00:29.352Z"}}, {"model": "blog.comment", "pk": 4, "fields": {"creator": 1, "content": "Test1", "content_type": 8, "object_id": 1, "created_at": "2023-03-25T14:42:38.554Z", "modified_at": "2023-03-25T14:42:38.554Z"}}, {"model": "blog.tag", "pk": 1, "fields": {"value": "django"}}, {"model": "blog.tag", "pk": 2, "fields": {"value": "example"}}, {"model": "blog.post", "pk": 1, "fields": {"author": 1, "created_at": "2023-03-23T07:48:21.333Z", "modified_at": "2023-03-23T07:48:21.333Z", "published_at": "2023-03-23T07:46:45Z", "title": "Example post", "slug": "example-post", "summary": "short example post", "content": "

Example post

\r\n

This is an example post using html to render itself

", "tags": [1, 2]}}, {"model": "blog.post", "pk": 2, "fields": {"author": 1, "created_at": "2023-03-23T13:40:25.663Z", "modified_at": "2023-03-23T13:40:25.663Z", "published_at": "2023-03-23T13:39:40Z", "title": "Tsesting codio blod post no 1", "slug": "tsesting-codio-blod-post-no-1", "summary": "Example blog post no1", "content": "Some random words", "tags": [1]}}, {"model": "blog.post", "pk": 3, "fields": {"author": 1, "created_at": "2023-03-23T13:41:09.346Z", "modified_at": "2023-03-23T13:41:09.346Z", "published_at": "2023-03-23T13:40:36Z", "title": "Experimental blog post no 2", "slug": "experimental-blog-post-no-2", "summary": "ANother one to be tested", "content": "Again for fun", "tags": [2]}}, {"model": "blog.post", "pk": 4, "fields": {"author": 2, "created_at": "2023-03-23T13:41:32.936Z", "modified_at": "2023-03-23T13:41:32.936Z", "published_at": "2023-03-23T13:41:14Z", "title": "Another post with another author", "slug": "another-post-with-another-author", "summary": "CHeck check check", "content": "bla bla bla", "tags": [2]}}, {"model": "blango_auth.User", "pk": 1, "fields": {"password": "pbkdf2_sha256$260000$Ao3f7nZlRY0CYIgJsLFxNY$bINqlSyLyhcF4ObxiA4LBpg1vljZEYakB8mpUGkExkI=", "last_login": "2023-03-25T14:42:25.058Z", "is_superuser": true, "username": "codio", "first_name": "", "last_name": "", "email": "codio@example.com", "is_staff": true, "is_active": true, "date_joined": "2023-03-23T07:36:34.069Z", "groups": [], "user_permissions": []}}, {"model": "blango_auth.User", "pk": 2, "fields": {"password": "pbkdf2_sha256$260000$DWiZCN1apDeclG1Ps01jRT$a/CGPeefohx2owkq4Spo2ybUsjswTRINUaVPa8Mitzk=", "last_login": null, "is_superuser": false, "username": "codio2", "first_name": "", "last_name": "", "email": "", "is_staff": true, "is_active": true, "date_joined": "2023-03-23T13:38:53Z", "groups": [], "user_permissions": []}}] \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 427641158dddc53bc752540bae70bc23dc14b98b..93259f50906d4e99d51f9d0dadf34d23bcd9ed7e 100644 GIT binary patch delta 5919 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 delta 6224 zcmcIod2k!odB@vbTm*I>PeBqd@RFkg;NH7{tOKOLo8Tdeq-e`9E|MTlUJ}Vzh9Qem zBukDYG}(+BOHSHplQywU%VUivbzLXzIB}+mox>fwmPb7%X;bU4XDrXub=rAZ03J9TXQJQIT_Y2NTP$4G8N_463$9XPM&r$yqy(kS(drt%;%eGb2ukD zY1;1KSO+h+6=hm0q}900(K09REzF#+Xk3j;63uW-GtB&=f?b0%48zi`RAytPxEdFE zQR3(pGUKZhR^x&!It04YocV60a}CZq1PARhW$skct8rdL^g>fX#!vac?p- z6$?*KhZFI7(uCI-vf$WMVm1kXsUb)+UY($GGs&_g-)X(OAvEbK~){14B(B+)Uoi`ly3%2I&CRH#75}Vz?<-=$jVos7bfAO z@EQ2TQrZnO!+Y!{mE~YMl+|%M|6iARc25PRC5f`Kta_?;nK$-0HyGhV8h8V~1K)su z2QR_X@F+~chnCX&U}mU?Mv~SED%WP7>nW$q1feM_Q*F;l>T!0}lO7Gcg*5sn_yT+y zF2Wcbf~}B;HLwr@>K1j4`e*72b&*=6;?#pwE5%aPR1u{iZ;{u@x5!t??~_lHPmqU6 zAL&_2|IVE89C|BNOn?TUI~)!j@#YoTSW1AcKo<-}Lo=ae(2@fK<7nAdzzszNr~^7* zFt|)swt)aPpv{WQ`(Jf`=|%!DK${o2YM>;Q8_COEHBwwgfbBr5%3g&QK>}0*A}e3@ zOJP<6A}?4)U=GO(R1u0IKqVklN$M+ENPrrEXGM%nWh%Y@X+rCbQCBt4LtR};ze1IM z1p%5zF;bJ>r7>(GNu!Y?GuPsisdOVyL6^}&HX4mCGU<;5M_KRmxQ`XYdUU#>U%e~A zjY{#6X#YXF`C$84$8=ZAoabP@zuhw#-9O(oKOSh|d;D`@7vI&C9AgegCq~={eUT

a%-_`&6($F9T6 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 E2eOyap#T5? diff --git a/templates/blog/post-detail.html b/templates/blog/post-detail.html index 063b78f41c..2564e9930d 100644 --- a/templates/blog/post-detail.html +++ b/templates/blog/post-detail.html @@ -13,6 +13,14 @@

{{ post.title }}

{{ post.content|safe }} {% endrow %} +{% if post.author.profile %} + {% row %} + {% col %} +

About the author

+

{{ post.author.profile.bio }}

+ {% endcol %} + {% endrow %} +{% endif %} {% include "blog/post-comments.html" %} {% row %} {% col %} From a2df35a48e4b265604b4216dbf44f58767da118f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Sat, 25 Mar 2023 20:49:44 +0000 Subject: [PATCH 13/14] Finish django registration --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 4105 -> 4210 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1200 -> 1655 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 578 -> 578 bytes blango/settings.py | 2 ++ blango/urls.py | 12 ++++++- .../__pycache__/__init__.cpython-36.pyc | Bin 135 -> 135 bytes blango_auth/__pycache__/admin.cpython-36.pyc | Bin 1106 -> 1106 bytes blango_auth/__pycache__/apps.cpython-36.pyc | Bin 417 -> 417 bytes blango_auth/__pycache__/forms.cpython-36.pyc | Bin 0 -> 974 bytes blango_auth/__pycache__/models.cpython-36.pyc | Bin 1805 -> 1805 bytes blango_auth/__pycache__/views.cpython-36.pyc | Bin 0 -> 390 bytes blango_auth/forms.py | 15 +++++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 2316 -> 2316 bytes .../0002_auto_20230325_2021.cpython-36.pyc | Bin 806 -> 806 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 146 -> 146 bytes .../templates/blango_auth/profile.html | 11 +++++++ .../activation_complete.html | 12 +++++++ .../activation_email_body.txt | 10 ++++++ .../activation_email_subject.txt | 1 + .../activation_failed.html | 12 +++++++ .../registration_closed.html | 10 ++++++ .../registration_complete.html | 11 +++++++ .../registration_form.html | 11 +++++++ blango_auth/templates/registration/login.html | 30 ++++++++++++++++++ blango_auth/views.py | 9 ++++++ blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 556 -> 556 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 924 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 2227 -> 2227 bytes blog/__pycache__/views.cpython-36.pyc | Bin 1415 -> 1415 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes ...004_alter_post_published_at.cpython-36.pyc | Bin 599 -> 599 bytes .../0005_auto_20230325_1842.cpython-36.pyc | Bin 669 -> 669 bytes .../0006_authorprofile.cpython-36.pyc | Bin 907 -> 907 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1827 -> 1827 bytes templates/base.html | 16 +++++++++- 42 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 blango_auth/__pycache__/forms.cpython-36.pyc create mode 100644 blango_auth/__pycache__/views.cpython-36.pyc create mode 100644 blango_auth/forms.py create mode 100644 blango_auth/templates/blango_auth/profile.html create mode 100644 blango_auth/templates/django_registration/activation_complete.html create mode 100644 blango_auth/templates/django_registration/activation_email_body.txt create mode 100644 blango_auth/templates/django_registration/activation_email_subject.txt create mode 100644 blango_auth/templates/django_registration/activation_failed.html create mode 100644 blango_auth/templates/django_registration/registration_closed.html create mode 100644 blango_auth/templates/django_registration/registration_complete.html create mode 100644 blango_auth/templates/django_registration/registration_form.html create mode 100644 blango_auth/templates/registration/login.html diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 35a153c48a6747b155120e6a28bc11dbbeb8a928..1cf7d6575519eacdc9ea2cd1c308c8fc06b8dd4e 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=yj5;2jj1^^gu1G4}C delta 14 VcmZo-Y+__H=H=yT^Pk980{|9v155w_ diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 35de1464b019da3f72b322b19a3a13815c5909a3..9afb29af0cdc92c2f3afc518a48abb793fdb4979 100644 GIT binary patch delta 816 zcmZWkId2nT6x`2VXX87!oj7q~JJ%+$IfA(p@I~UBKn}qtBx{pdHg+6uv^EqeaFL1* zX-f<(EhvA08vX#_7(fVN3~F9Jh#^EUj1fdJs&(+@5XN`}F)A5GT$PZB2pWS6JS|w6PdXc_}Yxw)3^-@8$<%jm(}T4mD;XSeWn^w z+wyLy`-a+RJ5zSDUHg|6ZMH)2kzU=d>0};u?#OOSDwUw`mrBMQ4J_$cX&h9`dxk?W S-v{IU_S%1a=J#NXCI0~H5!HME delta 718 zcmZWj$#N1=6z$jDp@9ZMMnVV)kc6Z|;uPZ)jf!M&PMOlh+fZ%JvjZYcJ&0AhVUdk) z+;q87{0J*s%kQvy;llC<^b5RAs$A&eo;v5;bBEu#x4Fn_JRVga&7l4{@{O@K-Ve6W z6=ppK9RmnC+7aV%7$Q+0tS1pZVkrfYl){G)<-;)l^&Q4Xpz%?vF~lel*`<7jTg;;u5#0mT(zYu#T&^R%5ho1J`i_H+w4aGH#Ks^fYW@3+wdkHu0UF zirctDYLlM7+tVm{kJNoUpw7dd!ApqlDb}v9Rm98JWz_AaOex z9)0G@7j}no?S79N4cBo<`MPx7j%aF$--DL_TN5lH<@RpKk{v~umAu6 diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 101f5fcbec15ad81f967b7f82128338cc5c8f01d..506c7b221ce9772f17177b58ee84162c9f1a99c5 100644 GIT binary patch delta 705 zcma))zi-n(6vutG8#}g>I%%8MfW*)#qID`Ulm!)4{MbPS$pTqt->b24?CQ=bQkD#z zJD~gnFtWkU|G@5*m4S_w=W|pAi2+;oeeQkVyYG9JzjS{)`}cc2>-(F#?5LwCKa{o0 zMt+2k`1N7`WWfkib31Tw?c}{_Kj;$$*~mAiZr~CH3}(VcHpqroDsmT`Y%ANAY)Rf> zHgm2u)OvD1l3E{3ws}P)yI^6>E*q@!hS1OUz-3$4gdK0Mf=$6rQ;?W}2U>QE{{#;Y z9f1i1%^QUrD}l$<7s`0|>$i`pKPI*N9FkO2oK|UByiDOe#zv<(Es}Cwd0O)6^0oG0 z(WP-*&WcJ*=6ft_()_qADxO9@omFrB8PCOhaFcYw%kwmcNo}lXKD^PmbOt^_OY0mB z!Z@cw1b5nV!&YxQTW#PWpC9}~_9GgW#-wPS2iwR=9^b+*_XMCr1Z}Ix&fZw~MPJt=+Y6m8irb9o5x4NPhq; C($XLR delta 246 zcmey)vw>6Dn3tEU&0jvnl!bxeF#{4{2eKW2xOmD$W&5a9_7t{M)-3KUo@OQ>n?02) zi#Ll8%;o^I`BOMkxO$m^a@=6PKr>T1OO#+LbCyuigj7MGI8Q1^DkD%oBT$CXoFPgu zg(;XplXtTO;{vA1&zLQEx#HtfQj<#4gn&h9Y60V~d0*bFkUVNC25Ej2w(SKq$b(!3?Gu K1z6Y^nHT}m#W&3W diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index a113bf11e6e4ab7c79fe7091f7ba3982f352f1b9..7f1e16ba304b0418b37f1e3d15f0d402c98ae9bc 100644 GIT binary patch delta 15 WcmX@aa)^b^n3tF9NyJ7r8zulFas(Ry delta 15 WcmX@aa)^b^n3tEU&3_}C4HEz%5d*XU diff --git a/blango/settings.py b/blango/settings.py index e6f28d4f24..dbdb816694 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -28,6 +28,8 @@ class Dev(Configuration): SECRET_KEY = "django-insecure-ym=d)ft4%)xiukqr&tgstl6i2091+x_#&o%*%n6g^epgy(bpd6" AUTH_USER_MODEL = "blango_auth.User" + EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" + ACCOUNT_ACTIVATION_DAYS = 7 # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True diff --git a/blango/urls.py b/blango/urls.py index d9829f9651..06b1fac9c7 100644 --- a/blango/urls.py +++ b/blango/urls.py @@ -17,14 +17,24 @@ from django.conf import settings from django.contrib import admin from django.urls import path, include - +import blango_auth.views import blog.views +from django_registration.backends.activation.views import RegistrationView +from blango_auth.forms import BlangoRegistrationForm urlpatterns = [ path('admin/', admin.site.urls), path("", blog.views.index), path("post//", blog.views.post_detail, name="blog-post-detail"), path("ip/", blog.views.get_ip), + path("accounts/", include("django.contrib.auth.urls")), + path("accounts/profile/", blango_auth.views.profile, name="profile"), + path( + "accounts/register/", + RegistrationView.as_view(form_class=BlangoRegistrationForm), + name="django_registration_register", +), +path("accounts/", include("django_registration.backends.activation.urls")), ] diff --git a/blango_auth/__pycache__/__init__.cpython-36.pyc b/blango_auth/__pycache__/__init__.cpython-36.pyc index 0a60d3661079ac6640d1e3c451429801a2a4fb13..b894fc5cce678c48ade4503430818aadb9a8fcfd 100644 GIT binary patch delta 14 VcmZo?Y-eOM=H=yj5;2jj5dawW1Hu3R delta 14 VcmZo?Y-eOM=H=zu9XOG#5dats1Cjs$ diff --git a/blango_auth/__pycache__/admin.cpython-36.pyc b/blango_auth/__pycache__/admin.cpython-36.pyc index b6db7ca87f1db29454e641ea0b3d949e5d15119b..634163ff50e6b8b16dfea5128c8372d8585001a9 100644 GIT binary patch delta 15 Wcmcb_afyS?n3tF9NyJ7r9~J;5yaZJM delta 15 Wcmcb_afyS?n3tF9Q20hR9~J;4>jW|Y diff --git a/blango_auth/__pycache__/apps.cpython-36.pyc b/blango_auth/__pycache__/apps.cpython-36.pyc index 95cda4f1a0755baff7396b6e71c7c04206c18a32..cf2ca60196b6b1cab1187bc492f44aaac109c00e 100644 GIT binary patch delta 15 WcmZ3;ypWmAn3tF9NyJ9B*^B@nc?2~8 delta 15 WcmZ3;ypWmAn3tDpci=|0*^B@mU<3sK diff --git a/blango_auth/__pycache__/forms.cpython-36.pyc b/blango_auth/__pycache__/forms.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a421846d9961192b8ae0ff45157f4c4888c160a GIT binary patch literal 974 zcmZ`%O^?$s5Vd3HqoozABCUit>^YYf#1$cg5OARfR$L+>D;v9Qx=vHq>j$ zfAE)l zexQSjWz73b^D4|j?{ghhaTZhZj>u3(H$+A%+_5Z?@i|G8AAm$s>iTbMQ@vMutqkm< z^Y)@D8}Lp(s(EP}lQ(6(!aMMff3nIH`0y|=FdTLaMv;t4k_A9WWdMYMVoMH`{Fcn9 zWRl+`S$Io0$s!0Lbf>R%zM9v6Gu>kVDZ128ju;eRN(vak^^<>Nj6bL*p8`iB#44|p z5UwvoRm)bRKM>+eo9phxgaGYAI8^!@F%Mwp&F^QEMO~>$QOmNPT-D~%uJb}oE_~Gc zMdWR>n9M*RJ6>-bN8TPF*Z@pI%@CFXlfc1XqGS(Y+NWR|($Fp01~O+U1(baT(t1Tb-i3l zI9Ruh!7x(hxK(=Qcy8v_MVD8&LXmqy6gsyS-g_kmaM_^v=vZVRbVL(+efA&a5AFlvwV#f({)ZAka;DgIXU2T0)$G#z~?+#CT*BN)pxa39GR4=i{79$-{ I_<{lZ1AXo8CjbBd literal 0 HcmV?d00001 diff --git a/blango_auth/__pycache__/models.cpython-36.pyc b/blango_auth/__pycache__/models.cpython-36.pyc index ee014b218742687c365772be95e0ace3fa411780..2a77c78a8de032a646779e1586bb4f8c1e058fde 100644 GIT binary patch delta 15 WcmeC>>*ZrJ=H=yj60wnuogDxkMFW)p delta 15 WcmeC>>*ZrJ=H=yb3E#-Z&JF+?fCBUY diff --git a/blango_auth/__pycache__/views.cpython-36.pyc b/blango_auth/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18232e81096598ecadc8584b7582ee43aaf375ef GIT binary patch literal 390 zcmYjMu};G<5Vf78fvQD}Ot6wA5rPpRB=#Rb@Z6+uikXUlBpz_@xxgppokz;RkW-G`>EMAXRx@gvB zS#++-S~T}c%d~Q}PB{8!g6QreS9I937lcXR^gM~9_(aZD0QDiHFuI!v0!VMln YsDCseeZO~E8|bvW^53^1(TvaHUoNg*_y7O^ literal 0 HcmV?d00001 diff --git a/blango_auth/forms.py b/blango_auth/forms.py new file mode 100644 index 0000000000..bc7abbac83 --- /dev/null +++ b/blango_auth/forms.py @@ -0,0 +1,15 @@ +from crispy_forms.helper import FormHelper +from crispy_forms.layout import Submit +from django_registration.forms import RegistrationForm + +from blango_auth.models import User + + +class BlangoRegistrationForm(RegistrationForm): + class Meta(RegistrationForm.Meta): + model = User + + def __init__(self, *args, **kwargs): + super(BlangoRegistrationForm, self).__init__(*args, **kwargs) + self.helper = FormHelper() + self.helper.add_input(Submit("submit", "Register")) \ No newline at end of file diff --git a/blango_auth/migrations/__pycache__/0001_initial.cpython-36.pyc b/blango_auth/migrations/__pycache__/0001_initial.cpython-36.pyc index 204f59f0d64d3240dd8a7d2ebea452f245c576c5..6d638383cf074e951a1290fc5402e32f575a2a91 100644 GIT binary patch delta 15 WcmeAX>Jefy=H=yj60wnujS~PKkpr9n delta 15 WcmeAX>Jefy=H=xw3EIfU#t8r#Qv&7y diff --git a/blango_auth/migrations/__pycache__/0002_auto_20230325_2021.cpython-36.pyc b/blango_auth/migrations/__pycache__/0002_auto_20230325_2021.cpython-36.pyc index 5eca69c182afe7b433b08218b26a4dab5ffeb821..917a9a230c00ad7ce33e73ab09d3ab54bd796dc1 100644 GIT binary patch delta 15 WcmZ3+wv3I}9sn6O1G4}C diff --git a/blango_auth/templates/blango_auth/profile.html b/blango_auth/templates/blango_auth/profile.html new file mode 100644 index 0000000000..e86c690ee5 --- /dev/null +++ b/blango_auth/templates/blango_auth/profile.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% load blog_extras %} +{% block title %}Blango Profile{% endblock %} +{% block content %} +{% row %} + {% col %} +

Logged in as {{ request.user }}.

+

Log Out

+ {% endcol %} +{% endrow %} +{% endblock content %} \ No newline at end of file diff --git a/blango_auth/templates/django_registration/activation_complete.html b/blango_auth/templates/django_registration/activation_complete.html new file mode 100644 index 0000000000..1453e28091 --- /dev/null +++ b/blango_auth/templates/django_registration/activation_complete.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% load crispy_forms_tags blog_extras %} +{% block title %}Activation Complete{% endblock %} +{% block content %} +{% row "justify-content-center" %} + {% col "col-md-6" %} +

Activation Complete

+

Your account is now activated! You can now log in and use Blango.

+

Log In

+ {% endcol %} +{% endrow %} +{% endblock %} \ No newline at end of file diff --git a/blango_auth/templates/django_registration/activation_email_body.txt b/blango_auth/templates/django_registration/activation_email_body.txt new file mode 100644 index 0000000000..5faf606264 --- /dev/null +++ b/blango_auth/templates/django_registration/activation_email_body.txt @@ -0,0 +1,10 @@ +Hi, + +You registered for Blango, but you need to activate your account within {{ expiration_days }} days. + +To do that, please visit this page: + +{{ scheme }}://{{ request.get_host }}{% url "django_registration_activate" activation_key %} + +Thanks, +The Blango Team \ No newline at end of file diff --git a/blango_auth/templates/django_registration/activation_email_subject.txt b/blango_auth/templates/django_registration/activation_email_subject.txt new file mode 100644 index 0000000000..67646d771b --- /dev/null +++ b/blango_auth/templates/django_registration/activation_email_subject.txt @@ -0,0 +1 @@ +Activate your Blango account! You have {{ expiration_days }} days! \ No newline at end of file diff --git a/blango_auth/templates/django_registration/activation_failed.html b/blango_auth/templates/django_registration/activation_failed.html new file mode 100644 index 0000000000..5631e8a64b --- /dev/null +++ b/blango_auth/templates/django_registration/activation_failed.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% load crispy_forms_tags blog_extras %} +{% block title %}Activation Failed{% endblock %} +{% block content %} +{% row "justify-content-center" %} + {% col "col-md-6" %} +

Activation Failed

+

Sorry, we couldn't activate your account.

+

{{ activation_error.message }}

+ {% endcol %} +{% endrow %} +{% endblock %} \ No newline at end of file diff --git a/blango_auth/templates/django_registration/registration_closed.html b/blango_auth/templates/django_registration/registration_closed.html new file mode 100644 index 0000000000..b15b741712 --- /dev/null +++ b/blango_auth/templates/django_registration/registration_closed.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% load crispy_forms_tags blog_extras %} +{% block title %}Registration Closed{% endblock %} +{% block content %} +{% row "justify-content-center" %} + {% col "col-md-6" %} +

Registration is currently closed

+ {% endcol %} +{% endrow %} +{% endblock %} \ No newline at end of file diff --git a/blango_auth/templates/django_registration/registration_complete.html b/blango_auth/templates/django_registration/registration_complete.html new file mode 100644 index 0000000000..5a37d3ce5f --- /dev/null +++ b/blango_auth/templates/django_registration/registration_complete.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% load crispy_forms_tags blog_extras %} +{% block title %}Registration Successful{% endblock %} +{% block content %} +{% row "justify-content-center" %} + {% col "col-md-6" %} +

Your registration was successful

+

Check your email to validate your account.

+ {% endcol %} +{% endrow %} +{% endblock %} \ No newline at end of file diff --git a/blango_auth/templates/django_registration/registration_form.html b/blango_auth/templates/django_registration/registration_form.html new file mode 100644 index 0000000000..c7f501a423 --- /dev/null +++ b/blango_auth/templates/django_registration/registration_form.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% load crispy_forms_tags blog_extras %} +{% block title %}Register for Blango{% endblock %} +{% block content %} +{% row "justify-content-center" %} + {% col "col-md-6" %} +

Register for Blango

+ {% crispy form %} + {% endcol %} +{% endrow %} +{% endblock %} \ No newline at end of file diff --git a/blango_auth/templates/registration/login.html b/blango_auth/templates/registration/login.html new file mode 100644 index 0000000000..f74f188909 --- /dev/null +++ b/blango_auth/templates/registration/login.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% load crispy_forms_tags blog_extras %} +{% block title %}Log In to Blango{% endblock %} +{% block content %} +{% row "justify-content-center" %} + {% col "col-md-6" %} + {% if next %} + {% if user.is_authenticated %} +

Your account doesn't have access to this page. To proceed, + please login with an account that has access.

+ {% else %} +

Please login to see this page.

+ {% endif %} + {% endif %} + {% endcol %} +{% endrow %} + +{% row "justify-content-center" %} + {% col "col-md-6" %} +
+ {% csrf_token %} + {{ form|crispy }} + + +
+ +

Lost password?

+ {% endcol %} +{% endrow %} +{% endblock %} \ No newline at end of file diff --git a/blango_auth/views.py b/blango_auth/views.py index 91ea44a218..eaee49d0e7 100644 --- a/blango_auth/views.py +++ b/blango_auth/views.py @@ -1,3 +1,12 @@ +from django.contrib.auth.decorators import login_required from django.shortcuts import render + + # Create your views here. + + +@login_required +def profile(request): + return render(request, "blango_auth/profile.html") + diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 7d0aa8c55d6bbc7812e3f628e336e9cff58361f8..5b96003d33a89b552e5a49e0117cdd5d607e3022 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=yj5;2jj3IG^61FZl6 delta 14 VcmZo*Y+z(F=H=yT^Pk981ppR514aM< diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 2af6a0d0b6064629e41f9adbae18e31885f2d5fa..7cd61d209a2ba1c40e1da974b338303980ca7bec 100644 GIT binary patch delta 15 WcmZ3(vWA7tn3tF9NyJ7rH6{Qc-UHbH delta 15 WcmZ3(vWA7tn3tDpR>(#+H6{Qb4g-q- diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 56138ea8a22eb631aa3fe004ae31c7dbdfa1b10d..77bc0be0819c01ff9e40928858e6201fb40bc97d 100644 GIT binary patch delta 15 WcmeBW?qy~(=H=yj60wo3oe=;YAp`jU delta 15 WcmeBW?qy~(=H=yT^WVtU&IkY-zyp#1 diff --git a/blog/__pycache__/forms.cpython-36.pyc b/blog/__pycache__/forms.cpython-36.pyc index c75213e840a6f88e8376f99bf04c98f994233d47..4f09ac49e8762aadde73c0ffcf7d1af948e899dc 100644 GIT binary patch delta 15 WcmbQkK8Kynn3tF9NyJ9BY0Lm1O$0Ci delta 15 WcmbQkK8Kynn3tEU&3_}?G-d!D>;uUF diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index 165d8a05027568c12588b71d814f22d0480f8d9e..3f51863d67141e34aca735592f4169f56d99f678 100644 GIT binary patch delta 15 WcmdlixLJ_Rn3tF9NyJ9BwHyE>2n3D* delta 15 WcmdlixLJ_Rn3tEUA!H-lS`GjqoCGES diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc index b4bc227f69865333ee4ae56e31fcea8bc9cc75df..2fb9f9c453822842a2d1aaff51a0ecd02796b8d3 100644 GIT binary patch delta 21 dcmZqYZs%q*=H=yj60wo(APeKI$tPI$0{}tK2QvTw delta 21 ccmZqYZs%q*=H=yT^WVsJkcBa7@(Gsx06K&QOaK4? diff --git a/blog/migrations/__pycache__/0001_initial.cpython-36.pyc b/blog/migrations/__pycache__/0001_initial.cpython-36.pyc index b6527f448fcf82fdd4bbe421e1e2308be39d17a1..0a65d454cdc957e9681afc652083cd3020e5e91e 100644 GIT binary patch delta 15 WcmX@ld7hKan3tF9NyJ9BlPmxxd<4z_ delta 15 WcmX@ld7hKan3tEU&3_}?NfrPk8w6(n diff --git a/blog/migrations/__pycache__/0002_comment.cpython-36.pyc b/blog/migrations/__pycache__/0002_comment.cpython-36.pyc index cbaa8c95a5d18c18c408c917f6e7c4d5a8e860c7..ac1c08eef9e1efe160599af9ae22cfcf5f09d63a 100644 GIT binary patch delta 15 WcmeC?=;mNE=H=yj60wnul?4DDY6E}( delta 15 WcmeC?=;mNE=H=yT^WVtE$^rlz2?H4b diff --git a/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc b/blog/migrations/__pycache__/0003_auto_20230323_1221.cpython-36.pyc index f83958857e2dc98ff798a74d09909674e6c75e57..db7d43984fd4f03602936ffba814359de969dd20 100644 GIT binary patch delta 15 WcmaFM`j(Z=n3tF9NyJ9B=S%=8mIWRF delta 15 WcmaFM`j(Z=n3tEU&3_}?b0z>MH3YW+ diff --git a/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc b/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc index e6866497a95cae11e63e4e5465d43ad915712fe4..f4d2ec00e7065d6dba5efd9af755fae3397bc7e0 100644 GIT binary patch delta 15 Wcmcc4a-D_En3tF9NyJ9BKqdes=mc5- delta 15 Wcmcc4a-D_En3tEU&3_|XAQJ#1hXeBf diff --git a/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc b/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc index 5536adc2d21a9f0cd63c52e8086605a8e0f66c2c..30eb77584de7251410406a765fa9afe9978f7053 100644 GIT binary patch delta 15 WcmbQsI+vBrn3tF9NyJ9B=}Z71HUusJ delta 15 WcmbQsI+vBrn3tEU&3_}?bS3~D)dR-> diff --git a/blog/migrations/__pycache__/0006_authorprofile.cpython-36.pyc b/blog/migrations/__pycache__/0006_authorprofile.cpython-36.pyc index 2e437ece48ac928b32262371a6730d001bf6a900..38a4d4119b0e6f895f0bc9e623f4dbb144f4739c 100644 GIT binary patch delta 15 WcmeBX?`CH+=H=yj60wo3l^FmYPXqk` delta 15 WcmeBX?`CH+=H=yT4cW-n$_xM;0Rx%< diff --git a/blog/migrations/__pycache__/__init__.cpython-36.pyc b/blog/migrations/__pycache__/__init__.cpython-36.pyc index 7197ba308cdbb3c43f3f57905c0527a91514374f..f71258c132217a9ad9bc181eeb49a14e54695c98 100644 GIT binary patch delta 14 VcmeBX>}F&$=H=yj5;2jj6#yAx1I_>d delta 14 VcmeBX>}F&$=H=yT^PkAp3IG>q17`pL diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index 797c159c82e0618930420e195c136463b45d6491..37ecd350b4cf3b2af99ec355991b8f62557fc4fe 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=yj5;2jj9RL}a1JnQj delta 14 VcmeBW>}6y#=H=yT^PkAp4geRP18o2R diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index 76be96b0de891ae86e9ac107005f5c5dc0339f09..12e39a0773df50abd5f6bac32fd9b7af787c3312 100644 GIT binary patch delta 15 WcmZ3?x0sL3n3tF9NyJ7rS#|&**#p-A delta 15 WcmZ3?x0sL3n3tEU&3_}CEIR-mcmr?% diff --git a/templates/base.html b/templates/base.html index 00042757f3..b0bc88b71e 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,10 +4,24 @@ - Hello, world! + {% block title %}Welcome to Blango{% endblock %}
+ {% block content %} {% endblock %} From 2ef11373e031cda285c87bcd85480473e5400b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pilch?= Date: Sat, 25 Mar 2023 21:47:29 +0000 Subject: [PATCH 14/14] Finish django Allauth --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 4210 -> 4504 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 1655 -> 1683 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 578 -> 578 bytes blango/settings.py | 10 ++++++++++ blango/urls.py | 1 + .../__pycache__/__init__.cpython-36.pyc | Bin 135 -> 135 bytes blango_auth/__pycache__/admin.cpython-36.pyc | Bin 1106 -> 1106 bytes blango_auth/__pycache__/apps.cpython-36.pyc | Bin 417 -> 417 bytes blango_auth/__pycache__/forms.cpython-36.pyc | Bin 974 -> 974 bytes blango_auth/__pycache__/models.cpython-36.pyc | Bin 1805 -> 1805 bytes blango_auth/__pycache__/views.cpython-36.pyc | Bin 390 -> 390 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 2316 -> 2316 bytes .../0002_auto_20230325_2021.cpython-36.pyc | Bin 806 -> 806 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 146 -> 146 bytes blango_auth/templates/registration/login.html | 3 +++ blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 556 -> 556 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/forms.cpython-36.pyc | Bin 924 -> 924 bytes blog/__pycache__/models.cpython-36.pyc | Bin 2227 -> 2227 bytes blog/__pycache__/views.cpython-36.pyc | Bin 1415 -> 1415 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1035 -> 1035 bytes .../0003_auto_20230323_1221.cpython-36.pyc | Bin 749 -> 749 bytes ...004_alter_post_published_at.cpython-36.pyc | Bin 599 -> 599 bytes .../0005_auto_20230325_1842.cpython-36.pyc | Bin 669 -> 669 bytes .../0006_authorprofile.cpython-36.pyc | Bin 907 -> 907 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 141 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 1827 -> 1827 bytes db.sqlite3 | Bin 200704 -> 290816 bytes 32 files changed, 14 insertions(+) diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 1cf7d6575519eacdc9ea2cd1c308c8fc06b8dd4e..1cc8c93d9c26656373073ad837069f98d58cc14f 100644 GIT binary patch delta 14 VcmZo-Y+__H=H=zmkDtg^0{|5Q0|fv8 delta 14 VcmZo-Y+__H=H=yj5;2jj1^^gu1G4}C diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 9afb29af0cdc92c2f3afc518a48abb793fdb4979..bf1bae5a4e82efb44f403aa86d690c66da364e22 100644 GIT binary patch delta 1033 zcmZuuO>Yxd6rE>JJkB_A91r8e5RAJ22V7e zfXc=T7G0o9l}42+)%=A@EgOCV3#4u>RjN=oU6x#bMri-)zh>JVMEEEq9!HdqVVEa~j~i#26Oa+Zh#7vu_#{S+ zWOJ%HjrbEbEnsX~;4`$BLgHiHWPFw`%n{}>PL6TDfHRoDB$AlIG-i;(Eaote1)N11 zokc8}34RvKSivgJVGZZa2v1|3FCs(dmTvzm#hSy&>a)ZrOfREc$iv>BJ_USYid4MQ!8byq|^>81(&6te>d_ki>N_()jx^vP5w?a8cIaOkjMs~ z|02HW{}mVecpZPySq}UwL0JuoNToNj?>M%hx9;fnso|yrDONQauHn5?)&u9ehd!_y z0lP`%C7~Uhi87h>mCSHY(lj^?O>?(s(34Jd@7T8PyCK0(C6<%H+JEl(w-QV2%3Dh? B8hii% delta 765 zcmZWmOH30{6rI;jKTKQN@@t_`Xv=S)1rhMi$I2hX59;E@*o>TUXj406T8O%-k%bFl zV)8a7R`(`u42fIao0yomFkQNHsY_ShDTxbRoRf3T{k)sJ7pY%;%48s*tl#d%r;c~Z zXQuchNt!2=pNsEoys8HZ&2Ym5ui-pkJcuSeR0tPZpd7G>1Ybnrt?=_U1pdtp#@pfI z9fSy)siT=k5kv@Kw4fDjXh#Pkh@#W*@lJFhhHmsAj$XsfyU@pDNElVdyOGpANW~fT z6sAchaf+vCx*w-$YJkoiBn%OTai+>uoaG}p$43cioW}*sU>0+EM(gHr5m{WSIY=*H zk^EB4iDj%{hK^k&y;gHz9UJ79>G;bvCv|R;yMn7!xmNS=4E$S?dcE#k(Dxr@QP4_; znaP*R`u3isXT)3QLv}+<$s24_JeChd!gc59o9m10{=w*zmc$$7Df=xZe9u^$_~4tK zj!~*Q>)su$graVhttbWcrd`Y2)eNnoTV1wyEi7hlE~^f!o17IDs$U)KB*~R~rgdMd zP+z%G ns(W%dnA^FWm8L@7v#V8hiut>iLlSf0WV=1~-#)P)PO!`$1M0+G diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 506c7b221ce9772f17177b58ee84162c9f1a99c5..4daf36d92dbb0226de19707aeaf584a1dc19674e 100644 GIT binary patch delta 179 zcmey)GnrS}n3tDpdy0HY0viLvV+JI^17te@aq*vt%8TOpQaMrtni-p!QrS}kQ@OH) zv&2(`Qh0iqfqdaqzATAUffSKm#uQPg7)ZSsNPRkIlw>M%mQ>M?R7s#(@l=jf#w;PQ z45K+ilw=B1FoUMVW(h`ZW)_~roSe;;EPPCidXqia~%vn-JZ&D?JYQ<7HQW>*^z%q>H3{jFP zOu-DA;+s_%wV5}^vam22=m70uVdP-s0YU*F4Q4Szco33_k%^Iuk&Q`!g$>980I~8P AC;$Ke diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index 7f1e16ba304b0418b37f1e3d15f0d402c98ae9bc..4316f89c66eaf2966830fe7e91a82aa3ddb71f25 100644 GIT binary patch delta 15 WcmX@aa)^b^n3tDJKYk;d4HEz#R|9PT delta 15 WcmX@aa)^b^n3tF9NyJ7r8zulFas(Ry diff --git a/blango/settings.py b/blango/settings.py index dbdb816694..cf53e5f9c3 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -30,6 +30,11 @@ class Dev(Configuration): AUTH_USER_MODEL = "blango_auth.User" EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" ACCOUNT_ACTIVATION_DAYS = 7 + SITE_ID = 1 + ACCOUNT_USER_MODEL_USERNAME_FIELD = None + ACCOUNT_EMAIL_REQUIRED = True + ACCOUNT_USERNAME_REQUIRED = False + ACCOUNT_AUTHENTICATION_METHOD = "email" # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True @@ -51,12 +56,17 @@ class Dev(Configuration): 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', + 'django.contrib.sites', 'django.contrib.staticfiles', 'blango_auth', 'blog', "crispy_forms", "crispy_bootstrap5", "debug_toolbar", + "allauth", + "allauth.account", + "allauth.socialaccount", + "allauth.socialaccount.providers.google", ] MIDDLEWARE = [ diff --git a/blango/urls.py b/blango/urls.py index 06b1fac9c7..0c0c4b5702 100644 --- a/blango/urls.py +++ b/blango/urls.py @@ -28,6 +28,7 @@ path("post//", blog.views.post_detail, name="blog-post-detail"), path("ip/", blog.views.get_ip), path("accounts/", include("django.contrib.auth.urls")), + path("accounts/", include("allauth.urls")), path("accounts/profile/", blango_auth.views.profile, name="profile"), path( "accounts/register/", diff --git a/blango_auth/__pycache__/__init__.cpython-36.pyc b/blango_auth/__pycache__/__init__.cpython-36.pyc index b894fc5cce678c48ade4503430818aadb9a8fcfd..b5c3bdf1cc7f3e8138c53aa65dc589aed5abdfa9 100644 GIT binary patch delta 14 VcmZo?Y-eOM=H=zmkDtia2mlp{0~7!N delta 14 VcmZo?Y-eOM=H=yj5;2jj5dawW1Hu3R diff --git a/blango_auth/__pycache__/admin.cpython-36.pyc b/blango_auth/__pycache__/admin.cpython-36.pyc index 634163ff50e6b8b16dfea5128c8372d8585001a9..fd95710536534ed3507f56e6a9feb23ed6356394 100644 GIT binary patch delta 15 Wcmcb_afyS?n3tDJKYk;d4+{Vxp#!G? delta 15 Wcmcb_afyS?n3tF9NyJ7r9~J;5yaZJM diff --git a/blango_auth/__pycache__/apps.cpython-36.pyc b/blango_auth/__pycache__/apps.cpython-36.pyc index cf2ca60196b6b1cab1187bc492f44aaac109c00e..5a8a529de0dc8100a1cf5338f08994155deafaba 100644 GIT binary patch delta 15 WcmZ3;ypWmAn3tDJKYk>*ZrJ=H=zmkKf3~&JF+?Dgx&K delta 15 WcmeC>>*ZrJ=H=yj60wnuogDxkMFW)p diff --git a/blango_auth/__pycache__/views.cpython-36.pyc b/blango_auth/__pycache__/views.cpython-36.pyc index 18232e81096598ecadc8584b7582ee43aaf375ef..61a34e06c0d4711d5f714d1e8c60b4f697855949 100644 GIT binary patch delta 15 WcmZo;ZewOM=H=zmkKf4Fzz6^tGy^sO delta 15 WcmZo;ZewOM=H=xwiQdT8zz6^tJ_9!Z diff --git a/blango_auth/migrations/__pycache__/0001_initial.cpython-36.pyc b/blango_auth/migrations/__pycache__/0001_initial.cpython-36.pyc index 6d638383cf074e951a1290fc5402e32f575a2a91..e92f412bb5b54d84352ca876e16c5027b91d7e1b 100644 GIT binary patch delta 15 WcmeAX>Jefy=H=zmkKf3~#t8r#b^`7I delta 15 WcmeAX>Jefy=H=yj60wnujS~PKkpr9n diff --git a/blango_auth/migrations/__pycache__/0002_auto_20230325_2021.cpython-36.pyc b/blango_auth/migrations/__pycache__/0002_auto_20230325_2021.cpython-36.pyc index 917a9a230c00ad7ce33e73ab09d3ab54bd796dc1..f8f547eb0ea9402e164d00ea0fcd81fd226fb186 100644 GIT binary patch delta 15 WcmZ3+wv3I

Lost password?

+

+ Log in with Google +

{% endcol %} {% endrow %} {% endblock %} \ No newline at end of file diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 5b96003d33a89b552e5a49e0117cdd5d607e3022..b756c9995493e2dd146ae0b6abc68818f04cee3e 100644 GIT binary patch delta 14 VcmZo*Y+z(F=H=zmkDtg^1ppMx0{;L2 delta 14 VcmZo*Y+z(F=H=yj5;2jj3IG^61FZl6 diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 7cd61d209a2ba1c40e1da974b338303980ca7bec..771bb92db7254014da5719c776787c9560a6cc4e 100644 GIT binary patch delta 15 WcmZ3(vWA7tn3tDJKYk;d8WR8774EH0>wPs=aLE!N9PtjsSh PDPm?|V2GM*#GC~H3(pbk diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index 3f51863d67141e34aca735592f4169f56d99f678..6850f1c8049855f8c29953df0aa9842403004db6 100644 GIT binary patch delta 15 WcmdlixLJ_Rn3tDJKYk2n3D* diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc index 2fb9f9c453822842a2d1aaff51a0ecd02796b8d3..68abd1273f03044154046303f03022334d70f990 100644 GIT binary patch delta 15 WcmZqYZs%q*=H=zmkKf4F$O-@&CId|X delta 15 WcmZqYZs%q*=H=yj60wo3kreKdjxO* delta 15 WcmaFM`j(Z=n3tF9NyJ9B=S%=8mIWRF diff --git a/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc b/blog/migrations/__pycache__/0004_alter_post_published_at.cpython-36.pyc index f4d2ec00e7065d6dba5efd9af755fae3397bc7e0..7ea701e9680c0e4b62575a6ee98e87522f015489 100644 GIT binary patch delta 15 Wcmcc4a-D_En3tDJKYk-yAQJ!~%>%3e delta 15 Wcmcc4a-D_En3tF9NyJ9BKqdes=mc5- diff --git a/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc b/blog/migrations/__pycache__/0005_auto_20230325_1842.cpython-36.pyc index 30eb77584de7251410406a765fa9afe9978f7053..ecebd65bb4abe9a2cac4f51eb1d5bf9f7b6de3b9 100644 GIT binary patch delta 15 WcmbQsI+vBrn3tDJKYk}F&$=H=zmkDtia3IG-L10VnZ delta 14 VcmeBX>}F&$=H=yj5;2jj6#yAx1I_>d diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc index 37ecd350b4cf3b2af99ec355991b8f62557fc4fe..2b76aecf07e402c4d1201d3e9a743b61463300a9 100644 GIT binary patch delta 14 VcmeBW>}6y#=H=zmkDtia4geM_1110f delta 14 VcmeBW>}6y#=H=yj5;2jj9RL}a1JnQj diff --git a/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc b/blog/templatetags/__pycache__/blog_extras.cpython-36.pyc index 12e39a0773df50abd5f6bac32fd9b7af787c3312..1ab77dbdc46da26c8f0b69788f16327ec4cfd83e 100644 GIT binary patch delta 15 WcmZ3?x0sL3n3tDJKYk;dEIR-kz5^)$ delta 15 WcmZ3?x0sL3n3tF9NyJ7rS#|&**#p-A diff --git a/db.sqlite3 b/db.sqlite3 index 93259f50906d4e99d51f9d0dadf34d23bcd9ed7e..9f6271f78880dadfc58831aa6accd1f38de13e9c 100644 GIT binary patch literal 290816 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 delta 5835 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 I`5`F%Kf