From 409034a20d482a179941d9b47a05d6d362453cfd Mon Sep 17 00:00:00 2001 From: gothack329 Date: Sat, 24 Feb 2018 17:26:36 +0800 Subject: [PATCH] update user profile --- db.sqlite3 | Bin 237568 -> 249856 bytes edconline/__pycache__/settings.cpython-36.pyc | Bin 3671 -> 3681 bytes edconline/settings.py | 2 +- requirements.txt | 1 + userpage/.views.py.swp | Bin 0 -> 12288 bytes userpage/__pycache__/admin.cpython-36.pyc | Bin 174 -> 473 bytes userpage/__pycache__/models.cpython-36.pyc | Bin 171 -> 1799 bytes userpage/__pycache__/urls.cpython-36.pyc | Bin 320 -> 366 bytes userpage/__pycache__/views.cpython-36.pyc | Bin 582 -> 1332 bytes userpage/admin.py | 7 ++++ userpage/migrations/0001_initial.py | 26 +++++++++++++++ .../migrations/0002_auto_20180224_1712.py | 18 ++++++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 0 -> 935 bytes .../0002_auto_20180224_1712.cpython-36.pyc | Bin 0 -> 596 bytes userpage/models.py | 31 ++++++++++++++++++ userpage/templates/userpage/profile.html | 16 +++++++++ userpage/urls.py | 1 + userpage/views.py | 29 +++++++++++++++- 18 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 userpage/.views.py.swp create mode 100644 userpage/migrations/0001_initial.py create mode 100644 userpage/migrations/0002_auto_20180224_1712.py create mode 100644 userpage/migrations/__pycache__/0001_initial.cpython-36.pyc create mode 100644 userpage/migrations/__pycache__/0002_auto_20180224_1712.cpython-36.pyc create mode 100644 userpage/templates/userpage/profile.html diff --git a/db.sqlite3 b/db.sqlite3 index eefe23cbfd4227945d1bc308a973065d80071fbb..ee4153b2cca1f137726eef74d0518717e209533a 100644 GIT binary patch delta 2067 zcmah~e{2&~9DncLUEAxAdmYHE`{SY@!x&{T5@woEBN)LLVxkg8j3$tPhL|8hV2U~eQ(s%U*p9?p-Z%HY z_xXO`=Y7AQdvE_mZvQEKtT^v=06;w%b!1RvjEt_Z5ND2@a770wUM{inap*(t+K{qH(7bhLK44pHeP(kP?(nj@s>Kiy0XS>w^?lQ z>-rbu&#CY{gn!1%@%#8Q{2JbZd$9{Q;J5HR{B3-Z@jl1nSHOaTB2)o0bll-csMjCx zQUw(8disQ*FXR?H{r;dk5b`l%LsbVvqExl4Tbs|Ia!8o(bcel>et$IT4+R~`jkCGQ z3L&b>+S#*{6l2!ekVnJCP%C&m8CZSX(Rry_ zg`a zafRw*-e}B}tr)(x&Qx1zHQB7D8dByn;?}V<3JTu?_z!$9p4asQE@Y7orXmrGirA<> z;va}=;xPP=;f*kj9NZyMesx&EN!%!RggZp`GNaKm2tutRWgAnrA!Y01Z{PGCKo~KS zybBtX@FL8^J3tWhj*i+Te-|8A;&%8*Cse@$?UJ?!>ZF$is86^A_(=oD;M;)6^mqIi zKft#Mxk;=}rDc+qrlkjGVIe`?0r(026aR{T!FLGiJIvCEg-p_jQ@8SwLuQlY7vZo% z_Mz;cY`e@xez*x{U#WuuaA`$WpVtUMW3unYry_a2kzmS9IgL-E(o&ekHKcLbT1ev3 zo(#@dPjHLNlk(7I^pQl7c?OcWav9dL9K%fj{4pNH7H*oGAXPre?OV&R0Grry$U4m% z)BmF})ZORpi5Zuh%R2Xzk~CgVX`OM;-n~1t*^MVhg~?J`V>MaqHFlch(WUZOQk~8T zrL#lRnz37G-dt-*SZ={9r^<W}MO|T1Ti4AT2Y1J_#P8^wP{h>fJ=1 z03X4`#9^vqn!?kht@p7)1{t8yKy>aHdW@IS2(m~c`vNGL(*XB#zi}b;CACZGV!vUx zFsButCm+)4!%Xw53wq?biV8U5iwWHUZ{{S(bRc)WYR%>*XIqo8&AGa{$yl2GS;{+( ztcpOWCv{p$H~g?j`nng+lO7(W6teaW>o>JGNk8_&RV^!wrNW>P6C$O?K_Nnf5Ls^G z`7+~%_U7g?7Qw%DRx2DCekLWiI~4HbEIe@n&F6A_XOE&)*<@ttHO1rHf@kuom$3+3 zX{``1sq~@jYyq#^l5{YQM#k&|dB(K14vg%TP=Gg8T6N>nE=XA0j1cpBd& js=JBjt0@K)vzpajf1f|-OKA{l(7A`yG*+;XO3CnFq=#r$ delta 935 zcmYjPZ)j6j6uvJwI$%zlb1~c3%b+R)+4wV5~znx1pQ6DHY^$&bjx; z`Tfqh=iU=jaAH~-ci2uMgj$!4WAVMxCO-o=*W5O;69F|fv*)|J%L|fJ$wc?-~;G}0qBG_n1o5q78l{gRUB!+{f85o zR5q6ASL94AolTK)o2LhJW$IZMXGO?HoERz$#&XHLBCD#L&4ely!A|OgM7|*RrIWE( zHr;Q>#Pdu`kyH6Zfu*WWktKsPhu}BqA8Ahd8ScP5d$%ZpH6yR)%*5ds30Wo8bY^@SZK+oG-Wc4YgP4?oeMX zB-Mhi(d%n&@HRFy`rY1^R$s7nOK@|*7Yuk?MmAt;`M}3l%$Q9c9>K3{aQ9(_xJ2Uw zvRY8(ygZ~@HJp3uI+HVykaVHU&sJJ?O4@}VQzK*rwoyKgT_P97)7XYGXrNSTp>iBw z(!VWoe_-9%ho6Q-0*eU#gvYSRiu?q0@hY}6@F9XH@E1H}-~+H5h=57OafAp$<=I1~ z8Ol%Nt=j0tuZ<`=rV#A2Lm8ZDK)zG(! z+-llYm>NUxtK;pc@Z6FzDyR^bVaY`oS5AdFdI6nVTax{<8uA0oDy| delta 29 lcmaDTb6tkhn3tE!NPJ?{`;DAl9IR2yp&`zjlQ{mf0sw?52=4#@ diff --git a/edconline/settings.py b/edconline/settings.py index 1858807..b8488f0 100644 --- a/edconline/settings.py +++ b/edconline/settings.py @@ -119,7 +119,7 @@ LANGUAGE_CODE = 'zh-hans' -TIME_ZONE = 'UTC' +TIME_ZONE = 'Asia/Shanghai' USE_I18N = True diff --git a/requirements.txt b/requirements.txt index 815e40c..94c24b8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,5 +7,6 @@ django-import-export==1.0.0 django-reversion==2.0.13 django-six==1.0.4 django-tinymce4-lite==1.7.0 +Pillow==5.0.0 pyenchant==2.0.0 xadmin==2.0.1 diff --git a/userpage/.views.py.swp b/userpage/.views.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..baf9dea5b1bee6f2cee74391773e4f4153c9807d GIT binary patch literal 12288 zcmeI2&x;&I6vrzjIcSU#bMRW(W$78|)Fkn;3@k*0K@Y)UHVMRoV{P}For>LEZB_Ng zAQ}Y^A%_ql1|)}|pok&CfWd<|{{+v9UK~A}e;}`aPS2QCVJ`+=!FPLm>b+Or`c!qp zFtu^y>}#j^syM>1Jpe_iy5=ZsLbXa|J>Hq5aU8PC4-l>e*5rC%7{n@ zGFnLcpe)#1R}O3s!aygHN}!inFsa;x-j;$3R-_jf^5~Wb5P=;M$lUnw>VEd(v7^PK zzPxmZAAIi24vSJc5g-CYfCvx)B0vO)01+Spj}rlx?qZkF@Dr8kmFl`{;ac6&g$NJ< zB0vO)01+SpM1Tko0U|&IhyW3I3<=1PvAa()_U2P)9)JI@zyJSyfUz%71Jv`VU!Gy? z2h^9Sk5C_?#wb9&g4&DPgW8RHu%EGCQ9q(SM~zSiP(MA**nQNes3GboilP46$JlMu zTd1?BCDd=|=Nr@&6rgf{0~9qPKm>>Y5g-CYfCvzQ{}}4^Y@yn?VBtZ_#E4E4A$Z~S1Z66-SR)`c!LO} z1s-T)AaLAGfEPi010sDvc-@(iywrA;{=E*%)ARNSe+}MHGsqoP2A^{-h8N9xJ+UGmjJpZ9mIai!Y z9UFt2=#a0iaW6OE^;rlw(KM6}MwRQDa<|WpJ0lY-1E+K%q|>nq*zrhjs$`T`#AU|s zf5nnjYx$~k=@4wH6APWCb2{@3@CZ+J<2K;Z6-fDt6-#`j#H+$?VPT?U$PaPXgZoW) zpRr|r!T>tt7ju?}(1)}1fR zWrj^sYr=C8Rc#?NHxVJ=gN8UvQ*MDt+m)T5nILmbZ29^bIgJcUQa*Al9+|lz9mHvr z&$^n=uzX*gz*)k(&Ocps`}GHrmiSupaY1DkIebw%Fm|ru1Xri7)?O*UeKUNNmu)7& F9s(4lECK)k literal 0 HcmV?d00001 diff --git a/userpage/__pycache__/admin.cpython-36.pyc b/userpage/__pycache__/admin.cpython-36.pyc index 25f7d53d733fb15e04d3d035a5de49daaa645ad9..708c75f24f9858d7d5dc729bc412b5627be0cab2 100644 GIT binary patch literal 473 zcmYLFy-ve05VjL1v8uE}yhS=R0}BH}Wn!X20+uY6>6yxvlN38a>Reuc$KZ{SS6KQA zOq|mKCw-sKKi~PjI~$KjU(>hhgAnqG_zQ;F9O2H9fB-e5rWK_GB8W|NPp%0tNL~pf zimu~bTrpgeb*eJOb`icy??{pDQB4Z!6A86$_Vlo$(`7jSjTn^`i~fKE-~Naej0Y*1_8#@XX;yo?ErT#?WeZ awEy4PA)ACM{NiBiGK|)R0pyg&r_m4f+;@@y delta 132 zcmcb~ypA#5n3tF90RO}&djews{Cd?{IpdFlCj$@zIDMVU!OAOlu16fpy-BIe1Gj3&ajIBatB QQ%ZAE?HGZA#X!se0CKk)jsO4v diff --git a/userpage/__pycache__/models.cpython-36.pyc b/userpage/__pycache__/models.cpython-36.pyc index 9efa415f7a255fa8177d4d5bc2706909f013277f..289d0e04a3ecb8954d246af79ed45addb9392873 100644 GIT binary patch literal 1799 zcmbVMOK&7K5N`LoCo_{t2xwU(9ulwKU1pHDAp}_k79o^?lyK=w%NaY9p6$nA_k<p7Kv;5hmCNP+{8g1d>-9PZPkzh3@*U?-XJf#2_A&ME z5W*3xbSjoHM!H+Nm6v%|_e#GCvY-mH(As_(RdE(uJt&i^lXaN$ts_Day>vt**>vmL z%et~7W9f155_S^)gC9j`fM*M;U=_vI~GM|+V7kS&LE&_~S&&%>C?V32x zYhKAbH=R7kwdW=2-8}z!&dY^IxfId+p_V5N#Ir({LV2_n9Xvfgc>47>#-D>GlN_9L zW!)w&n=x;TrZ%1LDn3~RnQ#H<4@bR;a4Y`$bVL;EkuFp**Q4X2m3kz_xT(vcmLocN zh66^6lniITsu-~erVb%uHgNl{T>~$nmbE|v2ptWoKGMI()NepsxoWp{rflk7F;H*o z5ahZ?DN}p!r=C5^M9t|`j$3WQF*4oC)K_o8ZQ`QVEw9JYL<@&7;qza(n&{grsfV=l zwS_;Y3*@s!<_2(R!sNIgCXqsK)0#b4AGF*))WxLcrB?JjnC+Fj&@Hb)L<&O+V-7C95z6er8%i~ Lj6lI+AZ7pn+sYXy diff --git a/userpage/__pycache__/urls.cpython-36.pyc b/userpage/__pycache__/urls.cpython-36.pyc index b41651102f5a65e674204d0a7417bfe33f0f6463..1dcea9ed27465c5fa521690f87c2ecdedbe23231 100644 GIT binary patch delta 147 zcmX@W^o~i{n3tDpsrJOErwj}XkAWBt*nlhtATIWpsB9{c%ACTH%9_QV!kNO}%bd;> z#gW1l%%I6VG09D)ioLWTC9xz`{}vyF5noW0pO%@E>Zi#$aka5@5eLwiTim5ZIR%L& eC8?w0tAt3=mEAfz!I3T!j0P$b?iU{mq;6zoA2aThuu7|7YtLk#z8Vq_rO~1^4?0DXv z-km1|`CTCW6)@^i!aYH9LQwX(FM>P}VIDd?;2ja=k%;qHBzYpbc~|uEp7Vte*U$SR z%~Pj$_&{WN=H!TPiD5njIi?A}cZ#{Yd|T|~J7DY4{0>AG;28it1kx!m17ly2eP|mR_7ATPK9bEFijBCG zkE;4&RG3ktnHs&WCu5>86d=Y}9Qv~{`eqgV#Zx=r`gc105Da>%D^)dmdQustr;L`e z=2gw6`1TU;OfM_;L{FBV+GH*TLla`r4kb~0AeYz&K3FmWa)`eLVdX6V^CMr?hJfq? z1=RoCe@aYvt1mjv;;+aeT6^l_mEWFZ5wAVsf$mO|EV?U?25X;qrbk1Z0@(Us>!7VZ za5XSLY4ZmzH+kxt6yAzfWaZQNdw(6k{E|Z(9({0fileV;ZHl^N&C7uK@2`K}Jp1FH z->)~%zuA2E+vfSNn`dAA_1O=vSu(kL^@y`Vvr#D(?$5}~*@!76)#!|I`DAjn_y63M zO2VSB$=nDI_t16YKbK0_v~|r;8xL$Gn3+pz6TFc3z^3*AhYc~p_K$Azpxwr8BtX`) z%Ys+bhPt?9YKQ@`Zpsq2NcB*{oSoSov9-9<%BD zz`USGhGZKkfnQ3JAPZ8Gk%;(2JpljV_$51}i=w`e6Fry8l#S7@rtP=pIedj~85RDA z*sa!V+RseEKaHnwYgCLZLDogqL*`m}rHz5zG^#qA6pfirD1%EVj8t0TLfUTo5$aKSa2QW(X3pcIEe(l7~q F@*jMWYsdfq delta 171 zcmdnOb&N&Xn3tC;OkiSEEF%NMV+JI^1Y|n^adE&zWmf@4h7{Hmwibpco)q?A22GBM zyNX2_ZwVEp=B1<-#h2vA7o`>#d3F6kjI!wH6gX3`cqLtBQl7hg0=v`OXqh2#{{D_nEn zXYiMF<z+P0HcYe|FEOBu&370y~X?1kQh%xS;}mwhtveATq<75 zJk!Qaa{-AyomX-9D?nu*x4uCERz!pqQ9&XboVW!p<|j)Md1(293LApBBM5$oK)4%c zK}8#VUG#Xu-%zvzw0oi>x*LL453N3I#e+DAx8o;OM$xb0mX6rkP|W>Q3=sXc@lWod zo}2b(l`muhhDvc{=<&hOF>H_z6K?EB5%NSuR+an4J_j+ z7%$1^b@#W=u|4FYHA{GQg|zVREP-rUUK*EQ^OCEZcJmLBL4Q>wITx(VjkChsc+t-@ zhU`I!n93X-PF=uVNJxY}9qt&9)ioJ20b@w@Dgo5HjD214qzXo>Ei+jnQiVfcnH~L& z7X_bTpnw800oi=5XmzwTzBvELE~bZH*vZ+!;V095h>)O7XHwH}Qaz}u2FUnhWap>? zWBkb_SB)ARr+f*G-aE_SJV()(u84WI%ncPYHVPWFBrks1)kh zea9h`?vMfLllpY%nN9<5gozgoCH|d9%xdi7esNa&IcNKhbjG$16n=AcPqd3WYkUK}Ub2@!U8}<1UWa zYX&j!Zwxp_dw#<^4#^d((%*EKRk1I7wXb(`$tqF00t4B-UmG zRpE27+!4Z;LQu`Dk>V2}KFv~xy6^=!q5(8ph0exQ=*yRSLi;Low0udt=}G&N@Z~V# zzp4FX_AI;>;LqFo19^0{Q&!EczETsq8euyatqj)30n~RxuW1ymkn=Q%wpl-G+V+W9 zKV7%y;};u#Y%t+Uf}Ceb62-Ka{AHE+0`}7EhI7~~k{6i^d8g + {% for message in messages %} + {{ message }} + {% endfor %} + +{% endif %} + +
+ {% csrf_token %} + {{ user_form.as_p }} + {{ profile_form.as_p }} + +
diff --git a/userpage/urls.py b/userpage/urls.py index 37bfa4a..260a34a 100644 --- a/userpage/urls.py +++ b/userpage/urls.py @@ -4,4 +4,5 @@ urlpatterns = [ path('/', views.homepage, name='homepage'), + path('update/', views.update_profile, name='update_profile'), ] diff --git a/userpage/views.py b/userpage/views.py index e621997..317906b 100644 --- a/userpage/views.py +++ b/userpage/views.py @@ -1,10 +1,37 @@ from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect from django.template import RequestContext,Template,Context,loader,defaultfilters -from django.shortcuts import render_to_response +from django.shortcuts import render_to_response,redirect +from django.contrib.auth.decorators import login_required +from django.db import transaction +from .models import * +from django.contrib import messages # Create your views here. def homepage(request, user_id): return HttpResponse("You're looking at user %s." % user_id) + +@login_required +@transaction.atomic +def update_profile(request): + if request.method == 'POST': + user_form = UserForm(request.POST, instance=request.user) + profile_form = ProfileForm(request.POST, instance=request.user.profile) + if user_form.is_valid() and profile_form.is_valid(): + user_form.save() + profile_form.save() + messages.success(request, '用户资料更新成功!') + return redirect('.') + #return redirect('settings:profile') + else: + messages.error(request, 'Please correct the error below.') + #messages.error(request, _('Please correct the error below.')) + else: + user_form = UserForm(instance=request.user) + profile_form = ProfileForm(instance=request.user.profile) + return render(request, 'userpage/profile.html', { + 'user_form': user_form, + 'profile_form': profile_form + })