From 796302a954cf69cfabaff63120f5d72fc46d092c Mon Sep 17 00:00:00 2001 From: xqz_admin Date: Thu, 19 Jun 2025 17:11:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E5=8D=9A=E5=AE=A2=E5=8A=9F=E8=83=BD=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Echo_Z/__pycache__/settings.cpython-39.pyc | Bin 2286 -> 2460 bytes Echo_Z/__pycache__/urls.cpython-39.pyc | Bin 942 -> 430 bytes Echo_Z/settings.py | 15 +- Echo_Z/urls.py | 23 +- README.md | 3 + api/__init__.py | 0 api/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 149 bytes api/__pycache__/admin.cpython-39.pyc | Bin 0 -> 190 bytes api/__pycache__/apps.cpython-39.pyc | Bin 0 -> 420 bytes api/__pycache__/models.cpython-39.pyc | Bin 0 -> 187 bytes api/__pycache__/urls.cpython-39.pyc | Bin 0 -> 248 bytes api/admin.py | 3 + api/apps.py | 6 + api/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 160 bytes api/models.py | 3 + api/tests.py | 3 + api/urls.py | 6 + api/views.py | 3 + db.sqlite3 | Bin 0 -> 139264 bytes home/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 150 bytes home/__pycache__/admin.cpython-39.pyc | Bin 0 -> 605 bytes home/__pycache__/apps.cpython-39.pyc | Bin 0 -> 460 bytes home/__pycache__/models.cpython-39.pyc | Bin 0 -> 1082 bytes home/__pycache__/urls.cpython-39.pyc | Bin 0 -> 344 bytes home/__pycache__/views.cpython-39.pyc | Bin 0 -> 1020 bytes home/admin.py | 14 + home/apps.py | 1 + home/migrations/0001_initial.py | 25 + .../migrations/0002_alter_articles_created.py | 18 + ...03_alter_articles_options_articles_read.py | 22 + home/migrations/0004_articles_author.py | 18 + .../__pycache__/0001_initial.cpython-39.pyc | Bin 0 -> 937 bytes ...0002_alter_articles_created.cpython-39.pyc | Bin 0 -> 611 bytes ...icles_options_articles_read.cpython-39.pyc | Bin 0 -> 767 bytes .../0004_articles_author.cpython-39.pyc | Bin 0 -> 644 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 161 bytes home/models.py | 19 + home/static/archives.css | 453 ++++++++++++++++++ home/static/bottom.css | 198 ++++++++ home/static/index.css | 73 +++ home/templates/archives.html | 44 ++ home/templates/bottom.html | 131 +++++ home/templates/index.html | 37 ++ home/urls.py | 8 + home/views.py | 38 +- 46 files changed, 1143 insertions(+), 21 deletions(-) create mode 100644 api/__init__.py create mode 100644 api/__pycache__/__init__.cpython-39.pyc create mode 100644 api/__pycache__/admin.cpython-39.pyc create mode 100644 api/__pycache__/apps.cpython-39.pyc create mode 100644 api/__pycache__/models.cpython-39.pyc create mode 100644 api/__pycache__/urls.cpython-39.pyc create mode 100644 api/admin.py create mode 100644 api/apps.py create mode 100644 api/migrations/__init__.py create mode 100644 api/migrations/__pycache__/__init__.cpython-39.pyc create mode 100644 api/models.py create mode 100644 api/tests.py create mode 100644 api/urls.py create mode 100644 api/views.py create mode 100644 home/__pycache__/__init__.cpython-39.pyc create mode 100644 home/__pycache__/admin.cpython-39.pyc create mode 100644 home/__pycache__/apps.cpython-39.pyc create mode 100644 home/__pycache__/models.cpython-39.pyc create mode 100644 home/__pycache__/urls.cpython-39.pyc create mode 100644 home/__pycache__/views.cpython-39.pyc create mode 100644 home/migrations/0001_initial.py create mode 100644 home/migrations/0002_alter_articles_created.py create mode 100644 home/migrations/0003_alter_articles_options_articles_read.py create mode 100644 home/migrations/0004_articles_author.py create mode 100644 home/migrations/__pycache__/0001_initial.cpython-39.pyc create mode 100644 home/migrations/__pycache__/0002_alter_articles_created.cpython-39.pyc create mode 100644 home/migrations/__pycache__/0003_alter_articles_options_articles_read.cpython-39.pyc create mode 100644 home/migrations/__pycache__/0004_articles_author.cpython-39.pyc create mode 100644 home/migrations/__pycache__/__init__.cpython-39.pyc create mode 100644 home/static/archives.css create mode 100644 home/static/bottom.css create mode 100644 home/static/index.css create mode 100644 home/templates/archives.html create mode 100644 home/templates/bottom.html create mode 100644 home/templates/index.html create mode 100644 home/urls.py diff --git a/Echo_Z/__pycache__/settings.cpython-39.pyc b/Echo_Z/__pycache__/settings.cpython-39.pyc index 7b7982207a3c7499649495d6383cdc2f00aa215c..4faaecd1e3ca712ba606dff064bcdf4df4f81a77 100644 GIT binary patch delta 314 zcmaDSI7gT-k(ZZ?0R*-MXH4gv$S1?NYohitNtP6;6zLS16xlh<>5M6IbC{yUQ{;mg zG!-^pYhe`SjN&NH%q_@CEzP{el98XA8pWJgusMaPjhT^q^J`W?Mt1h94Bd>xyvdC0 zdiA9|K;xh8X?V74!qYh$p3ZHk;!aB}R!B?KP0mkAty0e@DJdwn($`PVEYYi~C``)9 zPuEM%)2}G3icd_*&CJtxP0q-VkJ4nm#gdl@w2LJ(IX~|fb7@hICQ}r5ab@X|bQC#4Yyt_>}zQ`1o7w1)J^IxfrFQ_=7!t1AJUVJ>#AI{oFj=S27f- z0NqujGC7bVP$&e*WZ~gq7GP&#W?^Ds<=~mTg+pIlgoP2vV`5=rVP#=vVq#(h!oO_) E08%boG5`Po delta 128 zcmbOu{7#TBk(ZZ?0SLYo2WKqfnaC%@xNM^KGFGWz22JUWuUZ(n*rPa#Gjj`aQcE{C zGqo`@a&6{f6J%s%P0iCSovg&J$LyymzWFe_7$fIOh9X6vNkxj2KXU{Mc>tL#JUq+- a>@3VIOf0M%T$95%^|^(CY!GB)VFdt5lp7`h diff --git a/Echo_Z/__pycache__/urls.cpython-39.pyc b/Echo_Z/__pycache__/urls.cpython-39.pyc index 60bff92a51a3ecaa939c14f19d1f5f29413b873d..3aa96a474f187a733b0737b26b79198d927bd085 100644 GIT binary patch literal 430 zcmYjOK}*9h6i(W#>)LGy{)!%4z?&fA#jBSgNG_!|Va;gTlC*~vJPka${RNL+#NU&v zjNxAp1Ye4RFXVgQ_mTJVLbBN`LJ+&hWpRoT`f%cZ1R$M;TYLN<2%N ztS#(VR(aWR(FZqqQJ=AH3daun=fm#(`1W$#KlQ;-KzouklJ+6sqSK|ZsGk(I5`(x+ zA~xsitXkEJysla;AG8OJZ2W7w3hjfViL;53t+0{9w3TfsY&`HnWL#)Vh6`dqn6VYQ zGOtLx!3Oxcpm#=SLs`*fRew(NnhV-&+M=$gk*X<0C#ic*%KnmTxM(&uyi_&sN^u20 Sfy^9Wich={hyE19`u+hPYKj2pX+tJscg2k1zwI1NYO zD%rB)3bTRlG?6MKB(N06c7EP}@BMFbb{2UszMHG^F7Uh`ZgV_Fuz3lOc?1*nGLQN+ zsC*G*f$!F%Y9zue^gR~RkOjN(Zt^wQ`q>E`UwO%dd;!qt`u$r}D7oR=Mia}GL>r~i zc~Po7L$y{rR@gL(K9mgIG`gyZwMDy*7*kc4ljfJu$(~d~mF&^l=0j&RFjeqZoz~upOfYaJot0j8H0cdl*h%gd4e{*m8*kYhjOIO@PT9>yXZ{$XSVA~Z7~=) zWQyHEhZ`qJ^b`8lOZ;|BsNfP7p>zCp(rxj(WZItOIrK-KXZL$bpu}pv*3i0MdwRrE zyW7x)hFjK#j(B@|RLpOlz6amC>Fz1MHcT6wl?{=%OI#?*aJ{#slGs4sRIK6na07;y c15E3EJAEb;Z7TM{2Q)KEAlbpQYW diff --git a/Echo_Z/settings.py b/Echo_Z/settings.py index 84c6ac7..b1abd50 100644 --- a/Echo_Z/settings.py +++ b/Echo_Z/settings.py @@ -32,6 +32,8 @@ ALLOWED_HOSTS = [] INSTALLED_APPS = [ 'simpleui', + 'home', + 'api', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -104,8 +106,8 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/4.2/topics/i18n/ -LANGUAGE_CODE = 'en-us' - +# LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'UTC' USE_I18N = True @@ -122,3 +124,12 @@ STATIC_URL = 'static/' # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +SIMPLEUI_CONFIG = { + 'system_keep': True, + 'menus': [{ + 'name': '开源地址', + 'icon': 'fas fa-code', + 'url': 'https://git.zxqblog.cn/xqz_admin/Echo_Z' + }], +} \ No newline at end of file diff --git a/Echo_Z/urls.py b/Echo_Z/urls.py index d4b8cb8..f07696f 100644 --- a/Echo_Z/urls.py +++ b/Echo_Z/urls.py @@ -1,22 +1,11 @@ -""" -URL configuration for Echo_Z project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/4.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" from django.contrib import admin -from django.urls import path +from django.urls import path,include + +admin.site.site_title = 'Echo-Z' +admin.site.site_header = '后台管理' urlpatterns = [ path('admin/', admin.site.urls), + path('api/', include('api.urls')), + path('', include('home.urls')), ] diff --git a/README.md b/README.md index 9e522da..9e6e8fe 100644 --- a/README.md +++ b/README.md @@ -32,3 +32,6 @@ python manage.py runserver 9999 2025年6月19 项目建立 +###### 1.2.0 + 2025年6月19日 + 完成文章的基础管理、文章的列表显示、文章的详细信息的功能编写,功能有待完善 diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/__pycache__/__init__.cpython-39.pyc b/api/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b55311640c104e9cc8b1913108ae753def642944 GIT binary patch literal 149 zcmYe~<>g`kf>~9;86f&Gh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vCKeRZts8~NL zqckzE%1A#sKP6Sapt2+*KTp3nGq)fowKP-TH8~?cK1x5aAX7g+J~J<~BtBlRpz;=n SO>TZlX-=vg$jr|`%m4uHvm(U+ literal 0 HcmV?d00001 diff --git a/api/__pycache__/admin.cpython-39.pyc b/api/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98c6b4a0d2bbfcba2c462cae6dd5ca5da07ebe7b GIT binary patch literal 190 zcmYe~<>g`kf>~9;8TLT>F^Gc(44TX@fuanW zjJH@5Q*tx&{4|+v@ug%X=B4NBCFkdr6lEqAfecv5P{abHz{D?e{m|mnqGJ81jMBus zDkJ^m{FGGvg36MN{5<{Q%-n*U)Y43S*W`@+_$d9vf=qp|$$ABqw>WHa^HWN5QtcRl JW_<=?1^^fVE|CBL literal 0 HcmV?d00001 diff --git a/api/__pycache__/apps.cpython-39.pyc b/api/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3188b0ee5305d9e9a22a682e9421ccfdc3654942 GIT binary patch literal 420 zcmYjNy-ve05Vqq~D*agyD-vs#SYlv8s09IAmx{%UWqNL7o~EaTnDG=#glTDsMOGRMX-n4rfq1j`f$hH9<^Bq{}gT~d;}y?lEPFQ!`6 zIXvfO4c5o})~%-Px_)rhLnlmdv#i(kwXRHQweAL5BeC^#A8GyC8h@yqf?b-{ueCwB zUhecM)xKCmTiC(xm3)e}iBc7I2sjb>c{ literal 0 HcmV?d00001 diff --git a/api/__pycache__/models.cpython-39.pyc b/api/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2043fba755fa5651840a06f715c027aef8bee20 GIT binary patch literal 187 zcmYe~<>g`kf>~9;8J0l$F^Gc(44TX@fuanW zjJMcw^HWlDiv2X1ZgHk$CFZ5)>!l3Z6ijwk6kR=o?KTE1tVC>V1reJx5;ws_@*~+TR`5U`!K-X*LIrMn zj2mS^WS&)WTlCrqzc71tv(nirs8i^Q+tDwqgN`BnCLrOZ62Znh3Vq1F^j?rd6d@8S xYi6%=QaUb(Zz}05iOP5_YDG4sbVo{g`kf>~9;86f&Gh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vNKeRZts8~NL zqckzE%1A#sKP6Sapt2+*KTp3nGq)fowKP-TH8~?cK1x5aAX7g#GrcIWBr`v+SU)~K dGcU6wK3=b&@)n0pZhlH>PO2Tq_|HJh006B6Cp-WE literal 0 HcmV?d00001 diff --git a/api/models.py b/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/api/tests.py b/api/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/urls.py b/api/urls.py new file mode 100644 index 0000000..2b844f6 --- /dev/null +++ b/api/urls.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + +] \ No newline at end of file diff --git a/api/views.py b/api/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/api/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/db.sqlite3 b/db.sqlite3 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8a0c581511538f55f8e6a4c85d94bcb1370ca6ea 100644 GIT binary patch literal 139264 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 Yy*;m%nK-F$#_!bwqr4geiw@!c0bm~*X8-^I literal 0 HcmV?d00001 diff --git a/home/__pycache__/__init__.cpython-39.pyc b/home/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f277e101975cbc87fef46665a07977e6d21f96f9 GIT binary patch literal 150 zcmYe~<>g`k0@ae>3=sVoL?8o3AjbiSi&=m~3PUi1CZpdpPQ;5AD@|*SrQ+wS5SG2 T!zMRBr8Fni4rJ(OAZ7pn(mo=( literal 0 HcmV?d00001 diff --git a/home/__pycache__/admin.cpython-39.pyc b/home/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21325e577e7c4fbbb1ac838f30ea10062aaeaabc GIT binary patch literal 605 zcmYjOv5wR*5VaF$6D_-U1$+Q)nvFzt1wtT!sJP~!abx*1!^S5k4z{;g+T#!S0j}f^ z_zQZsRQC&1jI$taERUbZVP93>V~p0k>@AlJkrU zTa2YFIYa(UV0p*iGAKcOVIYv-RJY|Vmn*2QSi8EX+pOiO(lDBdK%;#$y~WVylZQrC zoL+oN0GZ^#WC2{3P)Gr#tUzQ|S;LB$>vaAaXCfPMimw)Ok*a8-MS9~pM6dgp>fWP{ z2uXyfV_W##mS2%0+|ZH)CBS{w;{9dYq(-SpkEm2yD>XVe*o-$yeL86S_he&Dhzd-Y ztv;r0K<)cMeKcqxr1Q+@CVTuB*e=;KdNu1krZXzbxG5+%sp#hK%seSX&U4zQb#ad1-?%s5*-nC?wKI3>Hmjo2-s?&hNxbiJk-awAPCxG3^i;+JhL z&)`N+d$;S|6ur6j1*OSHnPW#yq7A;JNNPOpsWz;k*=XZA&olXmZ9exht1?*og*fbx4F1XnTkVxVbWtd@%E|K&k zc|ejVd{3As{Q(LaKfppEw%fg;IMew!nT%X!(=Y^GaI*`b5W^C|Ys`rBm@f%y)JnE> zr88A)%=hGt$R|3I!zj~Ir6xK}CcSE^FA|kX>&HN?0?_+@d0KwFE*Edh=f{4yWt*Jm zB2%2(7U%G^O5Hi&{I(M5`esL}v8d817a+*TwW7PT!JR6H+NhPrJ1W~yVFkZO^xCM> zP!?ArpC8Z>bVZBVG}bvaNmit)O6d70)|^q-92G@jqGDDOkZ^x$wg8&ghqcP}Lt@+O dDIK@;TrJ1`uUennn6`Ob4|C#v(>QKG{s6SycR~OF literal 0 HcmV?d00001 diff --git a/home/__pycache__/models.cpython-39.pyc b/home/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f040bf1e8de695f82fd0bd2c9983e850307902fa GIT binary patch literal 1082 zcmZuwJ8u**5VrSmuk1aNP*Brdla=U@5JCzMQRJG0W(zFm?BwpWyBEA(ltc&tc~wzJ z0ZD;Spg=-MfdUW_;y+Nkg?s%4D#pHCass@X(Trz2`+egvEfxz1*1aF|jf*xyKeaQy z9B{6KB$q%j#Bhir9AJ!YBW5vs6EU0PmbGCAHgo1t)g3?{s$!Li+Kh)uUAyD!tl%Tq z{w{Dr|BS1r;_0V5e1%3fZiOJQ*;6lX{@KFLrwGkGe-YgExm&OBEuz zN|NN@^{NrF}&(s+lZuLKW8*cp5Vtwp7NOA$x zsKpG!4OxN1Y#{Ee7e~Zr=D4J(20kP{2D5kky7z3mR&`a57|MjG0wHj*X~@C$2)Uoq zP&b1RLqScCcZjTnsi5IIB#KbpsNYxoy9pPGA2d=LuV41-FeU!VnryUVKWRoQAy1qB z&3dCv0>9CYxIY}DnUyu=XrvX*OV3aaJ6M##sB5~TrEM*!?IEMe9b;Rm!XgA7f9uu#PtRPu#p#7CKe!v<5{9XPSfhXnzxq*6H$ zV}`Jp(!V`x>Cn;?gbm6CNpwaIm#_z4$pXP8yX2U7t?H;eYteYQJ;N4<=-oN}R!#VS Rbye=_@XoL4)|%dU&L8b}B$faG literal 0 HcmV?d00001 diff --git a/home/__pycache__/urls.cpython-39.pyc b/home/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e664a129f0ac5d03d742c20f63976dd78627519 GIT binary patch literal 344 zcmYjNJ5B>J5ViM{ESoF^x7a3@XlSB{hL$Fxaf8g-iXHj0vUeAfHkW~Oa0|CoT!8{H zjzD5Yo_X^$dT(UbG&O>_df&=d=pSkL9|a7z@IopaajcQS6yt<5otd2GXPoQ8lyruX z$ax`V`}rvYR066_*)F3Oe6~gH{1a4Ai(|>SQ5Hbavq2_eQsOy8bZnUKq?$w^YsEMB zZ5=Q9p4pvSbNUvfVVHhEfTF+6eA-y@j+Y+5 z2Lyl+umTuKcIq!h$0S`NXX8$s!=Ak-cG3~a;j1{|P^-7;!c^NVuat>=#|r5@Ti8m$ z=N)5pnpqcQTBTM=CyY(46A;OxQ30(Ttmk%KK{G+t)K(qXXsWS?{>&nSGhNW^lq$2v z@wBR(*Xp9SI)F7A8`UdlPz*grGXdlLv~7VnjVeT*3$)r>C}Wf0s!;9YDq1+2ek1xm z1eed_4@PMdC;1|+kDkUEa2vOWHgD?K6!W%Hiz0rT<;`{y=gnNj`-S>q*4snp^?hK` z<`Eb|Cp5%|3Hs-`^urm|4`DXLny!Zc2kY?ci>I9VPm>{K)>=|KX8-o6z@#C-(6f4KjKwmvKNY;jX^;SCU5~S_0SA`LwDAGtnI9_+z^!0hHy|g z8REgjm>3UgCUHYM6)4Jhc_8t9y~^)21j!C2Osg%NVKCRNoycrlYA3KLZfBH(`F zrd#KSiC_j-vW_1JJ4~6#tt2>|Gp(?X27LVN(zAkgOK8JN*5dqJk zxqyZ8_?TCXI(*!8pSAcV#>~v=6YD8HO=8)tE(J)_Q=ML%{uM=B$qh7RYEZ*42&I#xK_+lENaK|LG5%(}CG3|9 kv{~pyQ?Q!J&Xi`GXZhvcEsUqi_wq{KPYaTyb!zDU01Gc07XSbN literal 0 HcmV?d00001 diff --git a/home/migrations/__pycache__/0002_alter_articles_created.cpython-39.pyc b/home/migrations/__pycache__/0002_alter_articles_created.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da978a67d65e50b0901128b7987281f58bd047b5 GIT binary patch literal 611 zcmYjO&1w`u5bmDt*_|DBAqRa0VL&o#&LR=~IhjlJ;9Q!{RJqg3{MkJt#G~;f1o4z- z@Gj!B^i?9{6$FXZlZ2$2F1miG@2ju%YLzmw^wVMWg){a$1b0nRuus=LAO{S1%^F_t zCMqJ%UNVS4d}bh!Z^ely1js{{#TV4evdE{6*;qZ8u62Iabbz%hL+P%~DA=d#9+E>= za9~9Qe8UTYavKK#oNebIAwK0WI~7z(U`{ZJU%a}RPhhg@8uZKcdi_Y5)(l41KGAkC zWsT0yON)9y7?%Wd{`K4WuaiG#KQGRHWZW-5pgrmws#Z6c38EdSPLY=(=i_$^mBxZSkJXBqqJJa+vjwXLzR-G#Huz!B5cuq>} zDIIXtjST8qh28$xhMx`MyB%_gh%RL;c|<4uCoiY!K_>kIwz}PPyKpouGLfH(wfgc5ZzsG62~|ahzp22QZ98=t_Zb4fIweKyw0X5f^WtfB$lF`ugkQ_$3wh01u)j ztF@J2=#W}gp%!1;rI^k^iW%$#l2t(5VUqOvAK@_nTqH&JFeZ3I|i4w%O&R+@In z%%yER^Nxjmc-E4;4RF`OYR6Xi_wyPP)NRUmMTuwo`pEPZDrn7*BzRPzu7YsfMER4= zAST41JgUb<9#rYH%&1jS5VqIey}i>#N&}C8w9V}aC=m(;p&|t#%{G>^Gr8T<{$cMTLWKl~DlHWS zEu!K9@($E)i2}R=5(?uzqRUt_^5<_f^UYZA?93S1{`bS;8)xi?2RBU;*dw=hC;$Uq zv6^SR4zhr=Ckz4*?-&T=Yw=cO0^}h}!rzq3lEBUCa%FU1wvBaB-2zrN_tZ_B5ZEKP z3kt|G4lE0RuXrXEB#>@=;rm^G$&1IcS{!B{yy1!k_W)X|-)cCKD$n7qLSOixxlsup_|0}OX_8^gN j3Txf0+65es+DFABxmCBh-KHuoez4iXLqC}H!|sZI8nm{F literal 0 HcmV?d00001 diff --git a/home/migrations/__pycache__/__init__.cpython-39.pyc b/home/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4072a3fa37c41578b993c31dfcc24a697ad098ea GIT binary patch literal 161 zcmYe~<>g`k0@ae>3=sVoL?8o3AjbiSi&=m~3PUi1CZpdpPQZ literal 0 HcmV?d00001 diff --git a/home/models.py b/home/models.py index 71a8362..f3be8f5 100644 --- a/home/models.py +++ b/home/models.py @@ -1,3 +1,22 @@ from django.db import models # Create your models here. + +class articles(models.Model): + title = models.CharField(max_length=100,verbose_name="文章标题") + content = models.TextField(verbose_name="文章内容") + abstract = models.TextField(verbose_name="文章摘要") + author = models.TextField(default="admin", verbose_name="文章作者") + # created = models.DateTimeField(auto_now_add=True,verbose_name="发布时间") + created = models.DateTimeField(verbose_name="发布时间") + stat = models.IntegerField(default=0,verbose_name="点赞数量") + read = models.IntegerField(default=0,verbose_name="阅读数量") + + + class Meta: + verbose_name = "文章" + verbose_name_plural = "文章管理" + + def __str__(self): + return self.title + diff --git a/home/static/archives.css b/home/static/archives.css new file mode 100644 index 0000000..9a7a4d1 --- /dev/null +++ b/home/static/archives.css @@ -0,0 +1,453 @@ +/* 文章详情页样式表 */ +.article-detail-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +.article-detail { + background-color: #fff; + border-radius: 8px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); + padding: 40px; + margin-bottom: 40px; +} + +/* 文章头部 */ +.article-header { + margin-bottom: 30px; + text-align: center; +} + +.article-title { + font-size: 32px; + font-weight: bold; + color: #333; + line-height: 1.4; + margin-bottom: 20px; +} + +.article-meta { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 15px; + color: #999; + font-size: 14px; +} + +.article-meta i { + margin-right: 5px; + color: #bbb; +} + +/* 文章封面图 */ +.article-cover { + margin: 30px 0; + border-radius: 6px; + overflow: hidden; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.article-cover img { + width: 100%; + height: auto; + display: block; +} + +/* 文章内容 */ +.article-content { + font-size: 16px; + line-height: 1.8; + color: #444; + margin-bottom: 40px; +} + +.article-content p { + margin-bottom: 20px; +} + +.article-content h2, +.article-content h3, +.article-content h4 { + margin: 30px 0 20px; + font-weight: bold; + color: #333; +} + +.article-content h2 { + font-size: 24px; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +.article-content h3 { + font-size: 20px; +} + +.article-content h4 { + font-size: 18px; +} + +.article-content img { + max-width: 100%; + height: auto; + margin: 20px 0; + border-radius: 6px; +} + +.article-content pre { + background-color: #f8f9fa; + padding: 15px; + border-radius: 6px; + overflow-x: auto; + margin: 20px 0; +} + +.article-content code { + font-family: 'Courier New', monospace; + background-color: #f8f9fa; + padding: 2px 5px; + border-radius: 3px; +} + +.article-content blockquote { + border-left: 4px solid #3498db; + padding-left: 20px; + margin: 20px 0; + color: #666; + font-style: italic; +} + +/* 文章标签 */ +.article-tags { + margin: 30px 0; + padding: 15px 0; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 10px; +} + +.article-tags i { + color: #999; +} + +.tag { + display: inline-block; + background-color: #f0f7ff; + color: #3498db; + padding: 4px 12px; + border-radius: 20px; + font-size: 14px; + transition: all 0.3s; +} + +.tag:hover { + background-color: #3498db; + color: #fff; +} + +/* 文章导航 */ +.article-nav { + display: flex; + justify-content: space-between; + margin: 40px 0; + padding: 20px 0; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +.article-nav a { + max-width: 48%; + color: #666; + font-size: 15px; + transition: all 0.3s; +} + +.article-nav a:hover { + color: #3498db; +} + +.article-nav i { + margin: 0 5px; +} + +.prev { + text-align: left; +} + +.next { + text-align: right; +} + +/* 相关文章 */ +.related-articles { + margin: 40px 0; +} + +.section-title { + font-size: 22px; + color: #333; + margin-bottom: 25px; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +.related-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 20px; +} + +.related-card { + background-color: #f9f9f9; + border-radius: 6px; + overflow: hidden; + transition: all 0.3s; +} + +.related-card:hover { + transform: translateY(-5px); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); +} + +.related-image { + height: 180px; + overflow: hidden; +} + +.related-image img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.5s; +} + +.related-card:hover .related-image img { + transform: scale(1.05); +} + +.related-info { + padding: 20px; +} + +.related-info h4 { + font-size: 18px; + margin-bottom: 10px; + color: #333; +} + +.related-info p { + font-size: 14px; + color: #777; + line-height: 1.6; + margin-bottom: 10px; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.related-date { + font-size: 13px; + color: #999; +} + +/* 评论区域 */ +.comment-section { + margin-top: 50px; +} + +.comment-form { + margin-bottom: 40px; +} + +.form-group { + margin-bottom: 20px; +} + +.comment-form textarea { + width: 100%; + padding: 15px; + border: 1px solid #eee; + border-radius: 6px; + resize: vertical; + min-height: 120px; + font-size: 15px; + transition: border 0.3s; +} + +.comment-form textarea:focus { + border-color: #3498db; + outline: none; +} + +.submit-btn { + background-color: #3498db; + color: #fff; + border: none; + padding: 12px 25px; + border-radius: 6px; + font-size: 15px; + cursor: pointer; + transition: all 0.3s; +} + +.submit-btn:hover { + background-color: #2980b9; +} + +/* 评论列表 */ +.comment-list { + margin-top: 30px; +} + +.comment-item { + display: flex; + padding: 20px 0; + border-bottom: 1px solid #f0f0f0; +} + +.comment-avatar { + width: 50px; + height: 50px; + margin-right: 15px; + flex-shrink: 0; +} + +.comment-avatar img { + width: 100%; + height: 100%; + border-radius: 50%; + object-fit: cover; +} + +.comment-content { + flex-grow: 1; +} + +.comment-header { + margin-bottom: 8px; + display: flex; + align-items: center; +} + +.comment-user { + font-weight: bold; + color: #333; + margin-right: 15px; +} + +.comment-time { + font-size: 13px; + color: #999; +} + +.comment-content p { + color: #444; + line-height: 1.7; + margin-bottom: 10px; +} + +/* 回复区域 */ +.comment-replies { + margin-left: 50px; + margin-top: 15px; + padding-left: 15px; + border-left: 2px solid #eee; +} + +.reply-item { + display: flex; + padding: 15px 0; + border-bottom: 1px dashed #f0f0f0; +} + +.reply-avatar { + width: 40px; + height: 40px; + margin-right: 12px; + flex-shrink: 0; +} + +.reply-avatar img { + width: 100%; + height: 100%; + border-radius: 50%; + object-fit: cover; +} + +.reply-content { + flex-grow: 1; +} + +.reply-header { + margin-bottom: 5px; + display: flex; + align-items: center; +} + +.reply-user { + font-weight: bold; + color: #333; + margin-right: 10px; + font-size: 14px; +} + +.reply-time { + font-size: 12px; + color: #999; +} + +.reply-content p { + color: #555; + line-height: 1.6; + font-size: 14px; +} + +.no-comments { + text-align: center; + padding: 30px 0; + color: #999; + font-size: 15px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .article-detail { + padding: 20px; + } + + .article-title { + font-size: 26px; + } + + .article-nav { + flex-direction: column; + gap: 15px; + } + + .article-nav a { + max-width: 100%; + } + + .related-list { + grid-template-columns: 1fr; + } + + .comment-item { + flex-direction: column; + } + + .comment-avatar { + margin-right: 0; + margin-bottom: 10px; + } + + .comment-replies { + margin-left: 20px; + } +} \ No newline at end of file diff --git a/home/static/bottom.css b/home/static/bottom.css new file mode 100644 index 0000000..3e1c96c --- /dev/null +++ b/home/static/bottom.css @@ -0,0 +1,198 @@ +/* 全局样式 */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: 'Arial', sans-serif; +} + +body { + background-color: #f5f5f5; + color: #333; + line-height: 1.6; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +a { + text-decoration: none; + color: #333; +} + +ul { + list-style: none; +} + +.container { + width: 100%; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +/* 头部样式 */ +header { + background-color: #fff; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + padding: 15px 0; + position: sticky; + top: 0; + z-index: 100; +} + +.header-content { + display: flex; + justify-content: space-between; + align-items: center; +} + +.logo { + font-size: 24px; + font-weight: bold; + color: #2c3e50; +} + +.nav-links { + display: flex; + gap: 30px; +} + +.nav-links a { + transition: color 0.3s; +} + +.nav-links a:hover { + color: #3498db; +} + +.search-box { + position: relative; + width: 300px; +} + +.search-box input { + width: 100%; + padding: 10px 15px; + border: 1px solid #ddd; + border-radius: 20px; + outline: none; + font-size: 14px; +} + +.search-box button { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + background: none; + border: none; + cursor: pointer; + color: #999; +} + +.profile { + display: flex; + align-items: center; + gap: 10px; +} + +.profile-img { + width: 40px; + height: 40px; + border-radius: 50%; + object-fit: cover; +} + +/* 主要内容区 */ +main { + padding: 30px 0; + flex: 1; +} + +/* 底部样式 */ +footer { + background-color: #2c3e50; + color: #fff; + padding: 30px 0; + margin-top: auto; +} + +.footer-content { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 30px; +} + +.footer-section { + margin-bottom: 20px; +} + +.footer-section h3 { + margin-bottom: 15px; + font-size: 18px; + color: #ecf0f1; +} + +.footer-links a { + display: block; + margin-bottom: 10px; + color: #bdc3c7; + transition: color 0.3s; +} + +.footer-links a:hover { + color: #ecf0f1; +} + +.copyright { + text-align: center; + margin-top: 30px; + padding-top: 20px; + border-top: 1px solid rgba(255, 255, 255, 0.1); + color: #bdc3c7; + font-size: 14px; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .header-content { + flex-direction: column; + gap: 15px; + } + + .nav-links { + order: 1; + width: 100%; + justify-content: center; + margin-bottom: 10px; + } + + .search-box { + width: 100%; + order: 2; + } + + .profile { + order: 3; + } + + .article-list { + grid-template-columns: 1fr; + } + + .article-content { + flex-direction: column; + } + + .article-image { + width: 100%; + height: 200px; + } + + .article-info { + padding-left: 0; + padding-top: 15px; + } +} + diff --git a/home/static/index.css b/home/static/index.css new file mode 100644 index 0000000..0a272a0 --- /dev/null +++ b/home/static/index.css @@ -0,0 +1,73 @@ +/*首页文章列表样式表*/ +.article-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(600px, 1fr)); + gap: 30px; +} + +.article-card { + background-color: #fff; + border-radius: 8px; + overflow: hidden; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + transition: transform 0.3s, box-shadow 0.3s; +} + +.article-card:hover { + transform: translateY(-5px); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); +} + +.article-content { + display: flex; + padding: 20px; +} + +.article-image { + width: 200px; + height: 150px; + border-radius: 4px; + overflow: hidden; + flex-shrink: 0; +} + +.article-image img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.article-info { + flex-grow: 1; + padding-left: 20px; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.article-title { + font-size: 20px; + font-weight: bold; + margin-bottom: 10px; + color: #2c3e50; +} + +.article-title:hover { + color: #3498db; +} + +.article-meta { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 15px; + color: #999; + font-size: 14px; +} + + + +.meta-data { + display: flex; + gap: 20px; +} \ No newline at end of file diff --git a/home/templates/archives.html b/home/templates/archives.html new file mode 100644 index 0000000..5fe23c3 --- /dev/null +++ b/home/templates/archives.html @@ -0,0 +1,44 @@ +{% extends "bottom.html" %} +{% load static %} + +{#文章详情#} +{% block stylesheethref %} + +{% endblock %} +{% block content %} +
+
+ +
+

{{ title }}

+ +
+
+ {{ title }}封面图 +
+ + +
+ {{ content|safe }} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/home/templates/bottom.html b/home/templates/bottom.html new file mode 100644 index 0000000..a57515f --- /dev/null +++ b/home/templates/bottom.html @@ -0,0 +1,131 @@ +{% load static %} + + + + + + 我的个人博客 + + {% block stylesheethref %} + {% endblock %} + + + + +
+
+ + + + + + +
+ 欢迎回来 + 个人头像 +
+
+
+ + +
+ {% block content %} + {% endblock %} +
+ + + + + + + + \ No newline at end of file diff --git a/home/templates/index.html b/home/templates/index.html new file mode 100644 index 0000000..e677d9e --- /dev/null +++ b/home/templates/index.html @@ -0,0 +1,37 @@ +{% extends "bottom.html" %} +{% load static %} + +{% block stylesheethref %} + +{% endblock %} + +{% block content %} +
+ +
+ {% for artcle in artchles %} +
+
+
+ 文章图片 +
+ +
+
+ {% endfor %} +
+
+{% endblock %} \ No newline at end of file diff --git a/home/urls.py b/home/urls.py new file mode 100644 index 0000000..acf768b --- /dev/null +++ b/home/urls.py @@ -0,0 +1,8 @@ +from django.contrib import admin +from django.urls import path +from home import views as v + +urlpatterns = [ + path('',v.index), + path('archives/', v.archives) +] \ No newline at end of file diff --git a/home/views.py b/home/views.py index 91ea44a..10a5d31 100644 --- a/home/views.py +++ b/home/views.py @@ -1,3 +1,37 @@ -from django.shortcuts import render - +from django.shortcuts import render, HttpResponse +from . import models # Create your views here. + +def index(request): + artchle = models.articles.objects.all() + artchles = {"artchles": []} + print(artchle) + for i in artchle: + a = { + "id":i.id, + "title": i.title, + "abstract": i.abstract, + "created": i.created, + "stat": i.stat, + "read": i.read + } + artchles["artchles"].append(a) + return render(request, 'index.html', context=artchles) + # return HttpResponse("Hello, world. You're at the polls index.") + + +def archives(request, id): + i = models.articles.objects.get(id=id) + i.read += 1 + i.save() + a = { + "id": i.id, + "title": i.title, + "abstract": i.abstract, + "created": i.created, + "stat": i.stat, + "read": i.read, + "content": i.content, + "author": i.author + } + return render(request, 'archives.html', a) \ No newline at end of file