From 098206717182be09dc1a8372e9fe226fb7aac7e0 Mon Sep 17 00:00:00 2001 From: xiaji Date: Wed, 7 Jan 2026 22:11:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=8A=E5=A4=A9=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=A8=A1=E5=9D=97=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- core/__pycache__/forms.cpython-313.pyc | Bin 4983 -> 4977 bytes core/__pycache__/urls.cpython-313.pyc | Bin 2414 -> 3136 bytes core/__pycache__/views.cpython-313.pyc | Bin 22721 -> 27324 bytes core/forms.py | 2 +- core/templates/core/index.html | 25 +++--- core/templates/core/today_records.html | 107 ++++++++++++++++++++++++ core/urls.py | 9 ++ core/views.py | 110 +++++++++++++++++++++++++ 9 files changed, 241 insertions(+), 14 deletions(-) create mode 100644 core/templates/core/today_records.html diff --git a/.gitignore b/.gitignore index 0518c51..9bcb4ac 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ venv/ env/ .venv/ -.pyc +*.pyc # 数据库文件 db.sqlite3 diff --git a/core/__pycache__/forms.cpython-313.pyc b/core/__pycache__/forms.cpython-313.pyc index 61454b346894350878d4c322a70a4ca2f6a11112..bf01b5a152077c2be680a3850b2e2775cc72c9e8 100644 GIT binary patch delta 52 zcmeya_EC-ZGcPX}0}wn(kIOu_k=KQthabp$v3~oDeUqQIPEKZD#$I?)r|6=1@n!*z GbZ!9i9TRW> delta 58 zcmeyU_FawlGcPX}0}#a9#${gF$m_x`BnsrcSik+nzR6Epmp<9u^=$g&SoUS?%3=*t!eyaXxGWW2T6fjNxPk*y>@C9zWf7B85N zFG@|$FG?w{5`qX9r6#6i=B4W=rljcK5(JX*FlAuzDw&e}$s3rZ#f4H+GE30pryC^1NyW`9z-aB2t^P9N(4p9AVOubDtiI97LdsZ#Kpl(lNYeBtCyHydR(D delta 111 zcmX>g@lHtnGcPX}0}#wu6rH(*oq^#ohyw%CP{wDTjq04t9QtBKQt5`8Mw``G;utsY xWMgMyl%9N$qib>=XD+ugP%R@67awPw{ETzmW(95$Mjm%Y6@I2h?jl8?1ON`S7SaF! diff --git a/core/__pycache__/views.cpython-313.pyc b/core/__pycache__/views.cpython-313.pyc index 5be0e973db2090d9364e9ed9e8de6624b4195ce3..af19e40ad5c80677c4a8aa36d4b7edecdebd89c1 100644 GIT binary patch delta 3664 zcma);2~eBI6~|c#2@paONJv85r?_u?fX!iu!6%0dPD*1!kPLD-;*}_N9SV(0$FUt_ z<|U3hO?}l)gVQ+B&yHhk*LHe0aYocMc3e8s!%&#%;X27o$J4ZZ?-RrlF?GIypZ42* zyKndH|LuO)M%ks`GS$aHK?)yy#@e>n_tgxkjO=Tp<_#>IliwVF_P_ zReUYtzP_c4+p=s{yR(VgnyvQE*333%NBeLPmywN$P(g@>*m!MPB^A|#96}Yrmmoz9 z%Xk5mHxkyucyJo47d{IfV{8Mwqcx|C4vnHitF7JUw0XM>@N@}*x&+m*uh)QoOfyqCLS29?+Pn{fT{0dt-CR-w%FA}f91 zmOOINl~+K#ocS+w_5_G-JfqSC6qU6R8ukn{Mtp;*AZEE4N@X<=YA%#CYT)Y12*@*s z=Sb^Wy`)}hk!DIeeH*ptUVQ3(EWY)=1+;zmB>1Grx|LYCb8#;eDoo}0JN?S3nKL6( zmtUSees1=AC%74#Q=~i{e|RCG2=R4;xEIbYYx7RrReZ5J+`FNG%L)^`yi^Bw6|#^y zg?My^rg&pmkXJ|Efg_&Be@8DQElUdfMDAlqxT#MY*Qedo=Z@=h-;ufWxh{P%91PTD z%$57A@5+5b47b8l@$a90zG``Yh34#_%$17MJKw!*YC`*Q}UiPl`$APgc2vWWr)O$Jb!1 zgHkXCA8x?H?O;lY`G|@+&AYJvJ+gcY&w;vSdn)&@zopa;u76?u{*9B$kim6(*SSpj zBb#m(tR62|eYI!2pxTvR<1*GxDC;J*;fJelXwzNFbit~Ao%K;1{&MNi%#Vj25{Cy8 zr_2&#v6!t_ENao3*AXm)O$Y}aLA0#7b%lt>l+!RLGWW{1qs=54ABIj{B($1xTm}hNJWu&%Dm_m43Qfv;V{~)J-h;hS;epE? zX!%#NZpI~Ko3cj?=OafWN7OD|>4bmTq}p&;eM6n>@=t~fx&ro+sNN%@dfU9zTdY?H zk^scV;tS74$F|7oSvKpGHipgDW5Ubpr5*|I*S%2J)89He{ru4{=-NZGbfu&Od7OZn zg_@<4Du-`Dy9F`u5a;~i*o{{IBFk4voQV$=r!jXzndhNIu&T?2CC10Ts79~Zd#lmC zf~V0HZy{I-HuC&%rHMkDpJfl)1u(Q7z(T*z9aZ$nppm$7*rn5;>hj?4Ret`T=gDbP zkb7pHqFH2SqIl>k;B5puVH;vW;Jn2%KdYT+7)G;dz`}!BsS5flp-&g3(Pd8fXDyJB z@KHn%W4oX!Mh~Aws^q=cHIWIyQGa8s7ycWalu&^+JeDBdk*le+@al&(F)J0ju_cGx zzld9>6}}%Mmn`>=dAANt+$X@)nYX9L-n=umZ}#{FOqxDy*vR{l{F{Vc_*2~SFXy@> zK2$D#Wengg8wow}A@XnI5T#5QjK4~s8#RgX8jq1__yO3Rm>DXr>ZI#Z? z{n;{r_i37Z4;s`kAtdSFjP1o5y^?29AHr9ekdyo=Q+iGxa#K_D#G&KJZ1JE`t1p2r zT>d-^rp7AvW3ioLxL=In^;DT8&?AQM`}9a}XY!1d?l3*V8GIh517ettW&|q+(b+C? z_9_%*N5Xrl0m2_L4pGQ@vOGg3F82VO&dPXX$PS2~AW_*`*$@uCPgs(DLW1Lcl)HlU zgFeq5dWhD#Kt6r&QeLim4-dfmc~!C_X!ME@mj9uYor1ed(`Cb0@tP33EJqr8j0QMP zI6*i`cnw;MD&;?*;_Gm>sEB$MrO3`;#k)e(igPk{2qwy665b#SI{kPe!Av+t@E8w_ ztESiw;XkX=L)`;XdjLV)ramYs-)ef3-qQ#fgiL}MrBiUFe4Fe8e4i9DD~?E6HC(Uk z(ui`1Co8ucU^G|@O;zSV7u69|5@D!HAJxcs!|f3E@|S zUlZut#Xax@mTvoX*c^`LRvZ72-cvT4?+a1o^GFwNpy`8^LZOrD-1L-an3dd1hBc4x_#fX5`L_T7 delta 2061 zcmb7_Uu;u#6vzAP)=Sr|1-6cD-8%kk&~(7Y2wNwNEyYckP#0O}0G(aec5QL%;ManY zhiw`W-)CbB&@^b>vjSXSGcKks>W~!F(372FH$WluZo=Xr>0x0Dz<2y7a)ClEfKx{z_J@9GZw@9qO~h_X^Q6WWcTD# z#z$+Lm!~#*j0T(683s7Xseae|bB5SWCtH@7US>xf=KO_UQ5_8!Th*>dPwDfAQ0;l( z1>i;CC9-+eDtln=rLboeN_d=xSJ>fIuX{c>h@G^jZC?3)WE24l0S7Pyq}8LVZMVb$ z8uc#8PZdNw3&4xzt@o$5M;xSkGYYwjY~O15gxxXq*Y_?Cw^M!8}ew-A^dPFclgoEtr!u#uKt95$y}fQg}y!rzk5BnMMTR$*Vny zq#WRV;1pm5a)A$kY~VB_srVBKe;^`1q-%j{B4oN`@EA|CT*>v180^4C#K$w!P`PkzMvf zW|^#Gk8>s2Bge#hbRp6+*uoCk3Ty=Mhax)w9Jmtastf=)tR#+=)VYDrSKPV225JxODIUw?2%Z>T| - diff --git a/core/templates/core/today_records.html b/core/templates/core/today_records.html new file mode 100644 index 0000000..6eeaa5c --- /dev/null +++ b/core/templates/core/today_records.html @@ -0,0 +1,107 @@ +{% extends 'core/base.html' %} + +{% block content %} +

今日记录 ({{ today }})

+ + + + +
+ +
+
+
+
阅读记录
+
+
+ {% if reading_records %} + + + + + + + + + + + + + {% for reading in reading_records %} + + + + + + + + + {% endfor %} + +
类型标题来源进度笔记操作
{{ reading.get_type_display }}{{ reading.title }}{{ reading.source|default:"-" }}{{ reading.progress|default:"-" }}{{ reading.note|truncatechars:50|default:"-" }} + {% if reading.file %} + + + + {% endif %} + + + + + + +
+ {% else %} +

今日没有阅读记录,点击上方按钮添加

+ {% endif %} +
+
+
+ + +
+
+
+
感悟记录
+
+
+ {% if insight_records %} + + + + + + + + + {% for insight in insight_records %} + + + + + {% endfor %} + +
内容操作
{{ insight.content }} + {% if insight.file %} + + + + {% endif %} + + + + + + +
+ {% else %} +

今日没有感悟记录,点击上方按钮添加

+ {% endif %} +
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index a5939a4..73874dc 100644 --- a/core/urls.py +++ b/core/urls.py @@ -14,6 +14,15 @@ urlpatterns = [ path('yesterday/insight//edit/', views.edit_insight, name='edit_insight'), path('yesterday/insight//delete/', views.delete_insight, name='delete_insight'), + # 今日记录 + path('today/', views.today_records, name='today_records'), + path('today/reading/add/', views.add_today_reading, name='add_today_reading'), + path('today/reading//edit/', views.edit_today_reading, name='edit_today_reading'), + path('today/reading//delete/', views.delete_today_reading, name='delete_today_reading'), + path('today/insight/add/', views.add_today_insight, name='add_today_insight'), + path('today/insight//edit/', views.edit_today_insight, name='edit_today_insight'), + path('today/insight//delete/', views.delete_today_insight, name='delete_today_insight'), + # 家庭事项 path('family-tasks/', views.family_tasks, name='family_tasks'), path('family-tasks/add/', views.add_family_task, name='add_family_task'), diff --git a/core/views.py b/core/views.py index 85c8fb5..7b99fbf 100644 --- a/core/views.py +++ b/core/views.py @@ -179,6 +179,116 @@ def delete_insight(request, pk): context = {'insight': insight} return render(request, 'core/delete_insight.html', context) +# 今日记录视图 +def today_records(request): + """今日记录""" + logger.info("用户访问今日记录页面") + today = timezone.now().date() + + # 获取今日阅读记录 + reading_records = ReadingRecord.objects.filter(date=today) + + # 获取今日感悟记录 + insight_records = InsightRecord.objects.filter(date=today) + + context = { + 'today': today, + 'reading_records': reading_records, + 'insight_records': insight_records, + } + + return render(request, 'core/today_records.html', context) + +# 添加今日阅读记录 +def add_today_reading(request): + """添加今日阅读记录""" + if request.method == 'POST': + form = ReadingRecordForm(request.POST, request.FILES) + if form.is_valid(): + reading = form.save(commit=False) + reading.date = timezone.now().date() + reading.save() + logger.info(f"添加今日阅读记录: {form.cleaned_data['title']}") + return redirect('today_records') + else: + form = ReadingRecordForm() + + context = {'form': form} + return render(request, 'core/add_reading.html', context) + +# 编辑今日阅读记录 +def edit_today_reading(request, pk): + """编辑今日阅读记录""" + reading = get_object_or_404(ReadingRecord, pk=pk) + if request.method == 'POST': + form = ReadingRecordForm(request.POST, request.FILES, instance=reading) + if form.is_valid(): + form.save() + logger.info(f"编辑今日阅读记录: {form.cleaned_data['title']}") + return redirect('today_records') + else: + form = ReadingRecordForm(instance=reading) + + context = {'form': form, 'reading': reading} + return render(request, 'core/edit_reading.html', context) + +# 删除今日阅读记录 +def delete_today_reading(request, pk): + """删除今日阅读记录""" + reading = get_object_or_404(ReadingRecord, pk=pk) + if request.method == 'POST': + reading.delete() + logger.info(f"删除今日阅读记录: {reading.title}") + return redirect('today_records') + + context = {'reading': reading} + return render(request, 'core/delete_reading.html', context) + +# 添加今日感悟记录 +def add_today_insight(request): + """添加今日感悟记录""" + if request.method == 'POST': + form = InsightRecordForm(request.POST, request.FILES) + if form.is_valid(): + insight = form.save(commit=False) + insight.date = timezone.now().date() + insight.save() + logger.info("添加今日感悟记录") + return redirect('today_records') + else: + form = InsightRecordForm() + + context = {'form': form} + return render(request, 'core/add_insight.html', context) + +# 编辑今日感悟记录 +def edit_today_insight(request, pk): + """编辑今日感悟记录""" + insight = get_object_or_404(InsightRecord, pk=pk) + if request.method == 'POST': + form = InsightRecordForm(request.POST, request.FILES, instance=insight) + if form.is_valid(): + form.save() + logger.info("编辑今日感悟记录") + return redirect('today_records') + else: + form = InsightRecordForm(instance=insight) + + context = {'form': form, 'insight': insight} + return render(request, 'core/edit_insight.html', context) + +# 删除今日感悟记录 +def delete_today_insight(request, pk): + """删除今日感悟记录""" + insight = get_object_or_404(InsightRecord, pk=pk) + if request.method == 'POST': + insight.delete() + logger.info("删除今日感悟记录") + return redirect('today_records') + + context = {'insight': insight} + return render(request, 'core/delete_insight.html', context) + # 家庭事项视图 def family_tasks(request): """家庭事项"""