From b2b8be8a288ec824d7939db8a3fd7340cf2f51a4 Mon Sep 17 00:00:00 2001 From: gothack329 Date: Fri, 2 Mar 2018 18:00:21 +0800 Subject: [PATCH] add notifications --- article/__pycache__/models.cpython-36.pyc | Bin 4679 -> 4743 bytes article/models.py | 4 +- article/templates/article/detail.html | 16 +++-- article/templates/article/publish.html | 2 +- db.sqlite3 | Bin 290816 -> 307200 bytes edconline/__pycache__/settings.cpython-36.pyc | Bin 3950 -> 3968 bytes edconline/settings.py | 1 + .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 137 bytes notification/__pycache__/admin.cpython-36.pyc | Bin 0 -> 485 bytes .../__pycache__/models.cpython-36.pyc | Bin 0 -> 1772 bytes notification/admin.py | 2 +- notification/migrations/0001_initial.py | 25 +++++++ notification/migrations/0002_msg_unread.py | 18 +++++ .../migrations/0003_msg_comment_time.py | 20 ++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 0 -> 861 bytes .../0002_msg_unread.cpython-36.pyc | Bin 0 -> 640 bytes .../0003_msg_comment_time.cpython-36.pyc | Bin 0 -> 693 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 148 bytes notification/models.py | 32 ++++++--- static/bootstrap/css/style.css | 4 ++ templates/base.html | 2 +- templates/index.html | 7 +- userpage/__pycache__/models.cpython-36.pyc | Bin 2366 -> 2398 bytes userpage/__pycache__/views.cpython-36.pyc | Bin 1364 -> 1629 bytes .../migrations/0005_auto_20180302_1610.py | 18 +++++ .../0005_auto_20180302_1610.cpython-36.pyc | Bin 0 -> 585 bytes userpage/models.py | 6 +- userpage/templates/userpage/profile.html | 30 ++++---- userpage/views.py | 68 +++++++++++++----- 29 files changed, 204 insertions(+), 51 deletions(-) create mode 100644 notification/__pycache__/__init__.cpython-36.pyc create mode 100644 notification/__pycache__/admin.cpython-36.pyc create mode 100644 notification/__pycache__/models.cpython-36.pyc create mode 100644 notification/migrations/0001_initial.py create mode 100644 notification/migrations/0002_msg_unread.py create mode 100644 notification/migrations/0003_msg_comment_time.py create mode 100644 notification/migrations/__pycache__/0001_initial.cpython-36.pyc create mode 100644 notification/migrations/__pycache__/0002_msg_unread.cpython-36.pyc create mode 100644 notification/migrations/__pycache__/0003_msg_comment_time.cpython-36.pyc create mode 100644 notification/migrations/__pycache__/__init__.cpython-36.pyc create mode 100644 userpage/migrations/0005_auto_20180302_1610.py create mode 100644 userpage/migrations/__pycache__/0005_auto_20180302_1610.cpython-36.pyc diff --git a/article/__pycache__/models.cpython-36.pyc b/article/__pycache__/models.cpython-36.pyc index 7ed3163366b18b1f8ede0950a4fb6416862174ae..433674b03500b6564b9fd6552df4eb992bb6cd9d 100644 GIT binary patch delta 1961 zcma)7O>7%Q6y8~{y+8K)H+GYd*p|`c%^z+|%yt@@tu=I8Zy2`Gh}&@@xsn^LCmN=0 z3OQC!Hd1y<$Z9>^$k-VoJtMiAt6!B|osx^$D-k;f8pDl)Cf?HwfhOUapfRZi7I~N_ z-4x7IJ&OWpCev;PR2gBihh}Js7ToN0+0D5_SEVb&9(MC9l2y2|RX(PK`q{vx^=iNx zp?;pe-CFW5wOgTH_3E@Ms+T=?owk}53Dsp5tib{wCf}1B|AX8lChy2ckLMtFwhcot z4VAOB(~F_nq^m72@R@;jy3=mG5wO=h zmyPq!V<$yif|8t`b+u z{5}1n&a)^k0c_~5({c{6pibK{nE(FuS9dqBL(+W=7 zb^>K_h6q6%DFVa@YF27z*+`LpU`&oMWDHXgbbv6nLhDc^X7Znn(fsy(4_qEM?F~g06;P&l=lKuVKRY}eF(^izajuzx4smV5Rd)Y9ZG@sZ&c|2q+X0Lx3}<=t4$ zX29RB*&W{IHi$9^F|}!SAU)!PyZsEh0RQ@EC$%w9;-; z#*Xt-$+2_epbb^ef6J)@!B3*iQwXO3Y-6?Vt-iS$wEdPHWps@)JL;@czx9wd!@o#= z*AZvEjDF7dJ-!0chB7-dv;RIu0lA#UwMCSPU}w#WcB9;7r={&ocNup-hj0b~TZEt{ z6dGzZP;Sxru+k2UCcYeOC5qf@r2mhbd@=q0s3>L)9E1_*{xafzXc?r OX5-oMbRnBd>;C`&K3=u} delta 1857 zcma)6O>7%Q6y8~{y+8h4J8p>^l8Q7<*QLhkj|gp32%!lGYElw@Vi0K6T~Zgv4r7Nv z5b~jwdMar-ZuM5jIP{9$dd*Fgv$fY+foOs{ZBqnkZw)UHE-n^N4@69)J zb>znb!^h%r>wadVtlEn5o6_~uh`&Hz!bv89uudzZ@zj$YOdHS*(sFNtUP=BTLLrk%vwFxR;=QqT`V!OVUe`B_%yF ze$2Q0w3o53sU9^~l*_E#=k?7gPWHxM1&swPFWzUru%sxex0osJt0%^j6gA(06mv;USUgQF&j9+w(a`Y8I4IRZkse*k$OW+$Hwn;d7z753v6yOvxcS|B zNM+0tH?>2N82kprJ#BUn)KU3UundETxEyU8L?N7yx4kjOXp#|k#Ft?+o4|~Jr@?J; zC;WM1*Ir4W@PSzpe5EWZ)wN#1Ddx5>UKHzzg7m z-8F)B1|{Ts0Z$MF)^wfwmBret{%5i_fj%`kH#Pav*+6gj7n+rNEzoCq{liMt4@`HZ zd9ltvsCc|zY(-Af@g3CNq5m#;PHgIjSx%VAQzC9W8p>nqA6k!2(MTDl?e5J|Nh$t*RN6T+aA*V@T;p^UvJ1%In+T8 z4wje#kMMDDxrYovZYcvq1SKcAyLyzz&(^3DnA22`S8B^E&A^=ZKW(i^x4?6| zYbs@*-wOxmo<9S~0g8ab09>*_TWR>5pAa7>2KxJ9&?~i1+$w4QIry9eoEDpj!JG}+ z^Q^?LiJw|>$+zJ%zdi9CVr$x1u{g4Y6QhtPG4>)jlcFp+;dU@RW;(|1tY$HL2JkWf z4+MV=kW{E7T~(EDA7XXsYv97*A<@*%Q~LiTC{|Nn&uQyUhz1 zIo{|Xd=75%agqlXn9@M+))L2s;Iaq{VA!WC>GpLK3+aKh!Q@-7r=#g7Q+v{xl=(MS CPDs-L diff --git a/article/models.py b/article/models.py index c001a75..ad3db8c 100644 --- a/article/models.py +++ b/article/models.py @@ -2,8 +2,8 @@ from django.db import models from tinymce.models import HTMLField,TinyMCE from django.contrib.auth.models import User -from django.forms import * -from userpage.models import * +from django.forms import ModelForm,TextInput,FileInput,widgets +from userpage.models import Profile from django.db.models.signals import post_save from django.dispatch import receiver #from django.conf import settings diff --git a/article/templates/article/detail.html b/article/templates/article/detail.html index 79166a4..0d0002a 100644 --- a/article/templates/article/detail.html +++ b/article/templates/article/detail.html @@ -12,7 +12,7 @@ 'selector': 'textarea', 'theme': 'modern', 'plugins': ' textcolor save link image media preview codesample contextmenu table code lists fullscreen insertdatetime nonbreaking contextmenu directionality searchreplace wordcount visualblocks visualchars code fullscreen autolink lists charmap print hr anchor pagebreak textpattern', - 'toolbar1': 'bold italic underline fontsizeselect forecolor alignleft alignright aligncenter alignjustify | indent outdent bullist numlist link image media hr codesample preview', + 'toolbar1': 'bold italic underline fontsizeselect forecolor | alignleft alignright aligncenter alignjustify indent outdent bullist numlist | link image media hr codesample preview', 'contextmenu': 'formats | link image', 'menubar': false, 'statusbar': false, @@ -20,6 +20,13 @@ ); + {% endblock %} @@ -41,11 +48,12 @@

{% if art %}{{art.title}}{% endif %}

          评论数:{{comments|length}}           - 发表于:{{art.publish_time|timetonow}} + {% ifequal request.user.id art.author_id.id %} {% endifequal %}

+ 发表于:{{art.publish_time|timetonow}}        标签:{% if arg.tag %}{{art.tag}}{% endif %}

广告位

@@ -62,13 +70,13 @@

{% if art %}{{art.title}}{% endif %}

-  {{i.comment_time|timetonow}}前    +  {{i.comment_time|timetonow}}    {% ifequal request.user.id i.user.id %} 作者 {% endifequal %} # {{forloop.counter}} - Reply + Reply

diff --git a/article/templates/article/publish.html b/article/templates/article/publish.html index b74ae3c..67fb5d9 100644 --- a/article/templates/article/publish.html +++ b/article/templates/article/publish.html @@ -11,7 +11,7 @@ 'selector': 'textarea', 'theme': 'modern', 'plugins': ' textcolor save link image media preview codesample contextmenu table code lists fullscreen insertdatetime nonbreaking contextmenu directionality searchreplace wordcount visualblocks visualchars code fullscreen autolink lists charmap print hr anchor pagebreak textpattern', - 'toolbar1': 'bold italic underline fontsizeselect forecolor alignleft alignright aligncenter alignjustify | indent outdent bullist numlist link image media hr codesample preview', + 'toolbar1': 'bold italic underline fontsizeselect forecolor | alignleft alignright aligncenter alignjustify indent outdent bullist numlist | link image media hr codesample preview', 'contextmenu': 'formats | link image', 'menubar': false, 'statusbar': false, diff --git a/db.sqlite3 b/db.sqlite3 index 13c328785eebb861a3784406054ee9df5b26c081..d6fba157792e1b4e2ce571ddd493e9c9e3c603f1 100644 GIT binary patch delta 11779 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 Jy$$R;=wBoK7F7TM diff --git a/edconline/__pycache__/settings.cpython-36.pyc b/edconline/__pycache__/settings.cpython-36.pyc index 649fe157e8b7689e6fde3ff7161ae0e3578b22ac..3001fda7fd6a823942ce0e1f774cc09e076e511a 100644 GIT binary patch delta 378 zcmYk1xlY4i5QP2z*qpIB66YkRbC7U`K)4~C1s$SWi2^aU^Y9tg23KzUX zo`DCTq^3vW1rR?e0xQj@(Q2gG{Y=~?jf$#{zP&z^>6fGr>EEcr*Mx3vAB~GP{I*Ie z0?-je2w_AJwTDPUjK(o-vbs{AFh>w~xy_&;fh1B$BLl-$9EPkX+l(fWqbcN3=;vo# zj-tmMMt+nqE0QJ5^*G<-g2QZ?0%$K{>0TloWmCtp%PfwHa4Wyg;uJ)gLRh6R6p9E% zg<`1E-(gjkQ@mfh=5mWs!j$V{SQkw8n8JqeX>1B+u;nOZU>iH)o!u<q|ktYo)*Ob1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFEjnn;?$yI{o>4` z%+g~0;LMWLV*S*Vg{hf9*_3vXSpYYe50NvLhk|9-XZ`2sz^giN(lrIs^FPC5r`oEAP@_> z4tHT0p^evxNJX>@@L#edd3r!L$*GGgXrw;S`?URM|qq@+N~0Fp9<*w=7u zZdZ? zXPm$Hl{#fIC2hw++KsBVU&Ks2-^0(Wc(KCR!b&51TP$TKY$2d-wUSyCy6xnftgBA8 zx)^qyZnh>yrdJyvFgm;!IV&fyuJo#%BD*v4)%dhaa3-Ow8_m5P_8kZ=ve?WqBUU(^ dFfPP%{7-iDE`0@dcU4znO4xI_`jEMPG@gF(8Ce#zhI5%LFl zr3HY$gsy)8!3n35)HJ6Qu_wLS&wYn|8PvVJSBH7%#(|9LIFB9f$)ry6)ZtL}>nzV4 zj^v;o=0k^LIjYC`7A0R3p78Vu;i;hW3oAc=O$v%ivps*l!&vU zxW8m_J)=A@waGO&=SC$Yw_e5V=oV{E4qB8>sX{c$FcB5FwuJ226w)TDS#wjIs0gQ{ zooo9$*LJ@Guhu!U$<8rT>s`ZT1G(jPu*-}%sA{oRXB*SPfa)nxAHhaWyturL9MRjl zQq@v#?^j0XZNba7kyRtMn-&sYl??B*z2?<)aiaRLK7+1P5HZbYO2_ayJ>(_SqTxc7 zm=SDfg%r67UH=Zk5JNj}MLAu0rvdl4|AchG+yfHycvw*$oq4-J?bDv|P0;mL)Zrc? z9^VVpvyQ4~CY(p}xbt|@d2=X}GygPv^i9{>C3ml%Mka;XeiuQh(9_stZWQwjMoE_h z1ZX$-f_S7Dbm4qBA9cwJ3b{+>;}xOg{`cPz&^yctkZ`#7xPNSFIbARX5i2RUferJD ze(pop7eLHNNA9Mlw4-zKlXpMZUq>3k5*VmGV4FAn#M0{DB&Z22dy!s|l{S#5#nm@( zFWfjJkKfy{L2$>1=@r?QOzNuu&dn`lwpU7~wH^M~8V>C-W0Y2SUB~5#uii)e0g4Yn zfK7}{L!RO#5kE(BAhvg?t*?#BCRHD!CR(q9+N&CESW^lc-h0T@Ok1k0S1+w!>zTR?wt0vq z#d7nz_+K2=r(kmty2c76-jKcx{2bGZz|o=mG8j9ny~*n~;d9o^+9^L=SLj=tF%*DN z)!`H#hU4j)_|Bg^+ZY_dYpNCgAtH5AOC?rte(B|z8{4Ud z0*9n3e6Q^2e7e#LX3Arg;3EG}UshO1>T@*exhLI4-}&-N6kKs5rEGj<{TN-vbUJdP M?_=njFSro@1Jd!-8~^|S literal 0 HcmV?d00001 diff --git a/notification/admin.py b/notification/admin.py index 4e61edb..95fd24f 100644 --- a/notification/admin.py +++ b/notification/admin.py @@ -3,5 +3,5 @@ class MsgAdmin(admin.ModelAdmin): - list_display=('id','user','mention_user','msg_time') + list_display=('id','comment_time','unread','comment',) admin.site.register(Msg,MsgAdmin) diff --git a/notification/migrations/0001_initial.py b/notification/migrations/0001_initial.py new file mode 100644 index 0000000..e7a7155 --- /dev/null +++ b/notification/migrations/0001_initial.py @@ -0,0 +1,25 @@ +# Generated by Django 2.0.2 on 2018-03-02 06:49 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('userpage', '0004_auto_20180228_1552'), + ('article', '0016_comment_invalid'), + ] + + operations = [ + migrations.CreateModel( + name='Msg', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('comment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='article.Comment')), + ('mention_user', models.ManyToManyField(to='userpage.Profile')), + ], + ), + ] diff --git a/notification/migrations/0002_msg_unread.py b/notification/migrations/0002_msg_unread.py new file mode 100644 index 0000000..49f4d4a --- /dev/null +++ b/notification/migrations/0002_msg_unread.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.2 on 2018-03-02 07:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('notification', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='msg', + name='unread', + field=models.CharField(choices=[('Y', '是'), ('N', '否')], default='Y', max_length=8), + ), + ] diff --git a/notification/migrations/0003_msg_comment_time.py b/notification/migrations/0003_msg_comment_time.py new file mode 100644 index 0000000..ec5768a --- /dev/null +++ b/notification/migrations/0003_msg_comment_time.py @@ -0,0 +1,20 @@ +# Generated by Django 2.0.2 on 2018-03-02 08:10 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('notification', '0002_msg_unread'), + ] + + operations = [ + migrations.AddField( + model_name='msg', + name='comment_time', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + ] diff --git a/notification/migrations/__pycache__/0001_initial.cpython-36.pyc b/notification/migrations/__pycache__/0001_initial.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9d1d4956823defbee8f37752caa8687ecfb7d6b GIT binary patch literal 861 zcmYjPJC74F5MFyX`^e)G;3Pm)(52Z;0*9_Z=%R2(fpS8+quBy$FXODd>?7D4q+AQ_ z_520?2fxBC5)w5X72{39VacQMjA#6PpXX_>*Z%qYYy6#B)(`8y<)D9pTZL%A0+L$= ziAh0YO3az&cI>>izy{}w1r8@!>$4rVfL>U`)-SBFhE%r;k;PlG6geLf*+-4A&MA|EYj-Jl z4(fbJWeeldZIaS6zEO2J&^}}4Dr36M7^=U{jo)SL<2uQA8Bdg=MzFdIe8o%PfjN5VhkZo1|IVJDibnX_k*8LPeE;3wxW+0Gn#3xY+2+vp%UDI7w1TO1UYwA%A+Pb(O06W|G)Xho=oY1yUDIlvj zuquFg%PWE5CIV`Q@n#11;IIuKf)ug~0S6a?ZX}Qs)saiz+;F&D52ISCW@2>tVzGE6 zl~$vwJ12VEx_GAz*5LTN-+~x_U4D0bIl-S_zFm7Yg>bWGJ*Wn)n*pxsT{n`A`doIX z+i^|#Y%(Hs-J=Vq7_Ag`uq*--Q416MK7mO+&i44gdyD`C%`RgK;0;`CZIx>ya0IVd5o9t($jTqrnAe2E&iYK6*Koel@EVkmv1c^TUuq* z&X#9tL|Y;>gYJ~Z^6s$8+YeRJ*d9xomfR2Pc>B@#pTN7a-cBOoFysL})B9x+x)e6G gZii!dKWUv5PRUy}d-Q~hJ)3Ylr;C~=CNfY>Ws_W^i> zeI<(amH z09nO>RRLsMUWFL7v8#?rJA)Y0cHU;~86*z@%piS;=uQrE>UL)5AC7Hou7*)=WaFFK zXRFofmFUe@OiE)7HYD5T&CvI#Mls4B?}%nzPvaoe@Kw|Rb_Teqr*6D1A{xMv7OL*i zMjqph#18EFPNPBn1;yd^x(IYkL+FH{SlCqfEFo+r1XY(nr=@i|Y!|35Os A=l}o! literal 0 HcmV?d00001 diff --git a/notification/migrations/__pycache__/__init__.cpython-36.pyc b/notification/migrations/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ba14a900c602a86bd288f5ad4e9695fac768e76 GIT binary patch literal 148 zcmXr!<>ktYo)*Ob1dl-k3@`#24nSPY0whuxf*CX!{Z=v*frJsnFGu~*;?$yI{o>4` z%+g~0;LMWLV*S*V 0 and created: + msg = Msg.objects.create(comment=instance,unread='Y',comment_time=instance.comment_time) + for user in mu: + inst_u = User.objects.get(username=user) + inst_p = Profile.objects.get(user=inst_u) + inst_p.unread += 1 + msg.mention_user.add(inst_p) + inst_p.save() + msg.save() + diff --git a/static/bootstrap/css/style.css b/static/bootstrap/css/style.css index 8408566..eb13f9f 100755 --- a/static/bootstrap/css/style.css +++ b/static/bootstrap/css/style.css @@ -204,7 +204,11 @@ span.floor { display:none; } +.member_comments { + padding:10px 20px 10px 20px; + border-bottom: 1px solid #e2e2e2 +} diff --git a/templates/base.html b/templates/base.html index 1ac51c7..cdfca29 100644 --- a/templates/base.html +++ b/templates/base.html @@ -84,7 +84,7 @@

{% if title %}{{title}}{% endif %}

    未读提醒 - 0{{user.msg}} + {{user.unread}}    

diff --git a/templates/index.html b/templates/index.html index a70a854..f37882e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -2,12 +2,17 @@ {% load timetonow %} {% block banner %} +
+

+
+{% endblock %} + -{% endblock %} + {% block content %} diff --git a/userpage/__pycache__/models.cpython-36.pyc b/userpage/__pycache__/models.cpython-36.pyc index 9aa0cc4a38f1f8308515dfa788e7d0f2b51fd787..f5503da77d3e2f0e7473c97fe305f1ad7e88c456 100644 GIT binary patch delta 801 zcmb7>&ubGw6vyYyZuUpANn^TfYKv$wNY_fW)*m&ZLcxpDAQcpIDQjjdM%%)h6+sH| zpm?#TIqAuNz(eoiAF`l#uigdUTeXcpF77g)nfbn%H{Un&vGutXF4gPR%ZJ|dU+#ss z0Pfg6Tu+p*f?eo0RH&*iM1MlnZi_UsdvLFbAcRPv@Rfd$J$anls$7A@uF9)0XrOPSGk%en*?9HA0n|i3kBSWkWV0fXHq-M@BAbH#x}LcO=HS7{XBQfC43VB?u+R zh|~MR8B&Rp)ZuX+J7wa+-@ZT8gWMF}0Ckq@)Wr^ki{Rmw$+NA2F8m(>Rd|n{X1HO- zOt$SeXKI2?8#W@O3pj5(?#eXhz&XZA#z9?e``k_HGb9>G5E2*cd#`IhxvwC$y7Fu} z<_%{VXBdlw9=R&zeWhHG26&j4OfzO|+dDBjIH(-)1s3kA&a+t>{k%aJT-gBr@e-+= zd@K#;VtLH-ekwdofn(H4?*Wwa0nLAX_Jj8pX6;@7%4mr+JV!_Y&r{cVZHA zETZDcQ(wf>zJdp@f)C&e4C0#zR`teYMGwv}-*o>~UHw=0kK{`duT`t#UuQmawm!vA z0iL-IJW5`RPA!je{YG>q^Z2<)$K7YxakFw0rd=lQL*fR~5X0c{>WmNqr~gEgrxS#j zK3gGZsLPtHg9hzh1y}k3X-_!FsizW?LiC^~Pa%i*03sK(tK3cj6N;ySFIGlJFM6h1 z*fQ**$qJJyyh`CxzdW=>cGxv#Gz{crxPP4Co*gm98HM zOPq3<(Q+H%LjPhTKk{bPmMOA1$~ikh1xnU{U)(q=K2nBju{`4Wyc8}|V3t1bU4x%@ zY5x0h-@}hE?~bE;{Z-QN7J&|bjedLy^E{15O_Sj71aI@`4xy|W#3S52FxF;!#$v>g zb;duM^HvurXf;6t_f`o=eK0(=|81;It5Yt+mqLxT9qPd~R&a^IjUy-hWx}n;bFoS) KQ)5%AKJg1&n|?F^ diff --git a/userpage/__pycache__/views.cpython-36.pyc b/userpage/__pycache__/views.cpython-36.pyc index 68f5bd5d5fe334094c01c77534200df9fadfcd0c..c9d7c82dd95e5ec8f95e0290379be502b4cd30a8 100644 GIT binary patch delta 730 zcmYjNO=}ZD7@l`#yF1xzHfh=>lGY*w!Jt;f7B5zXw%|oC6~usqG_$R{&1UQD2DD7* zVZ9bCdr}L6H?QJP@E_-j8RVnR&n2Kb-c>O2uC0Z@Ny2kY8l# zGcdk~h~J*Hk6MBVK3sT2JlCrQ4PlG&E0RJA-R8;X@6|HuG&Zz;6S8-(aRiD4R>1e^ zYmiqkE(vp=%1?=naas3-bxbE_;{3~lN>QWZLxE~P+5t-@Kmf_6R9M--MYv6A@!f*Hj`=@^0qVW%+RFItLklBe}aNf@fsYpBv+ z`{%zO6UBnY1mCC_*4f#yO+|#Gs4~=yGL@ycvPI?8N*P{dswdo2hBb=_vQ0YGY)rS- zJCHk}H%k0y)Emd1Jgi(DM4_(q55X=7 zj-tdLc)2+qNv|(DOtx^7T-3CL)H#=#?3OL-x-g5Bt+QtKgxy`t*@Jj5=aCei?Crdi z7qo&Rb;{X$cIo1O3wd65mXW$f81Kb7_=Wf*k*nEHwzhQ{TP`BLjzpLXE_Ia+$NIOVLy9B_?!u)zceVFEXnsMNb3;x+FZUwYj+{hVEY(AP6r2_xYRg!} delta 480 zcmYjMF-yZh82#>&Cf78Lv1+wiLFm#fEg~X_h$u=Ym*Ub*yl9P$kxRPBi9=i+G!71K zy7(U)6#NMyQgCwgPxvKN=pFBU_ult-aNp*KQClh&jaKEp)71ceVC1Oy-av%6H?_-> zYq_>J#SLD#f|$glQ@(lm8e_Q6Bev4qCnS$#>k>SjYbR7ZMNER1M;KhcrWaaN_}8A9 zIl9!mVhrL=>cgpdRtyACXEPe(EGBJ;Y;Rlwrb{s;a5|ecr>$hzYGjS%LXRe9B=EeX zQk6NWNu3)Hxmam~Q%HX4cIAAkAG+df|Hy5giQw?K=Qg^L-*a+_uPjn$GI>*0Dg(`T zqi(4nH#ka$fP_0kTruJM))s*IuoQde@mwR&(#Ifwmt7{_#O(iUw{*sEKmG*8G6?d+s_x R6;2|VSX)Jycv%XSl0PEWWHSH& diff --git a/userpage/migrations/0005_auto_20180302_1610.py b/userpage/migrations/0005_auto_20180302_1610.py new file mode 100644 index 0000000..404da5e --- /dev/null +++ b/userpage/migrations/0005_auto_20180302_1610.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.2 on 2018-03-02 08:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('userpage', '0004_auto_20180228_1552'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='unread', + field=models.IntegerField(default=0), + ), + ] diff --git a/userpage/migrations/__pycache__/0005_auto_20180302_1610.cpython-36.pyc b/userpage/migrations/__pycache__/0005_auto_20180302_1610.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f562d6821b8d3a2813b270b512eaca052108ea70 GIT binary patch literal 585 zcmYjO&2H2%5Vqqan~hqD1Bf?3iiDbM%Ay_+Di;tE^ipxj#R@yKkynlr?Bu|?T>Ah# z0+VZFI{Q3LF=clLn@APML!x{U-9<7+{OFHfa0Wjd2^}OMI)I^+p zU=V@$!9XBCh#S!eh_6|Z{H0u0L_Y6TXWK~)#`&}#0JYnN&~c??T+(qb36M1$SQEjz z(9sDKARodvF*@5ud3>mZ0Bi^b+x&u>iR-% zw%gjTMmy}4MxV~cVhfgZvV!{+;J%&pR0tv)2ujoT=;H;Gy+RFFMPw7owt;Q2_L*FA zr1ZIzR5NQN`$WobbE`vLxB-r60L@OJvk?{g{GFcAz7HL(2#%AFX2R~?vS?d95aNCBkknS{W>l%FBmImo$UzqZyo6wcNbkRA=LN8-6p$ xa5+IH(m3W3?Ztmp#C{Ej)^x)ed|gN{M3>+LqdV&v)%)zto&2{!j|(cFi2tFsm(2hG literal 0 HcmV?d00001 diff --git a/userpage/models.py b/userpage/models.py index 277a7da..3404a42 100644 --- a/userpage/models.py +++ b/userpage/models.py @@ -3,6 +3,7 @@ from django.forms import ModelForm,Textarea,TextInput,ClearableFileInput,FileInput from django.db.models.signals import post_save from django.dispatch import receiver +#from notification.models import Msg # Create your models here. @@ -13,7 +14,7 @@ class Profile(models.Model): #birth_date = models.DateField(null=True, blank=True) avatar = models.ImageField(upload_to='static/avatar/', blank=True, null=True) point = models.IntegerField() - unread = models.IntegerField() + unread = models.IntegerField(default=0) def __str__(self): return self.user.username @@ -21,12 +22,13 @@ def __str__(self): @receiver(post_save, sender=User) def create_user_profile(sender, instance, created, **kwargs): if created: - Profile.objects.create(user=instance) + Profile.objects.create(user=instance,point=10) @receiver(post_save, sender=User) def save_user_profile(sender, instance, **kwargs): instance.profile.save() + class UserForm(ModelForm): class Meta: model = User diff --git a/userpage/templates/userpage/profile.html b/userpage/templates/userpage/profile.html index fe4d162..64ef98a 100644 --- a/userpage/templates/userpage/profile.html +++ b/userpage/templates/userpage/profile.html @@ -4,13 +4,13 @@ 物志 > {{request.user}} {% if user_form.errors %} @@ -75,14 +75,14 @@