`05mZb$yB76binX^7gVNEOxin5aaE2PevwhhJDs$2ZoO@f5shrdO
zhpMJ-P&sIxiFjv3_0E_t0)%qZ4;tnWMX~9mXt
znx_DUYZ;H_U#4?UnR4Fp;SGz{g{P
z$7dxd8*QwL&65mXEH4J%OB%H-wxFn#6%k9QoJm=J
zo`)-)=PiE+E>1~YSKSa>E5P&iWn;@#tSQn8{Qc+EU42uLpLd*Y@bPPC72BFT{NCojBux<5I)7oR&w
zrVb+M4}|w>tmpP8LxljA6h1q4LLH?@ENtkIP#r_C)v{TDgiQ7LCc
z%h14DhY$+Q&bq$etNWS>Mthhij6U*>?FU{zPn5bphQ`QR*8i~(dPb!o5>`U3=sbg5
z75gi)G59c1Ba@^X{KIIUr+G;-J_Qk~dZx7$hPl#bzY+!m6&R1f(r$n!wUqHvuH`sF
zBlwDBjqO#UT$$}S7t;s?TvhUoqsr?Cf%n@yz`$C#31Jxz?1f_#U$koUv0ExCqvH*8
zR6#F;)}l2U!IK${7MnFoXim#)Ea8iwMSG39bigCs%Dpz&@8|+t=rY)ihp*;(Cit+Z
zj{5lx%^z59Mu4!GUtW921Sxa+Sau-N{2z4}wzGz1S?Bhq<@~vYtlK})o%1GgH$LC|
X;(xn$dSmO<@y{Ceb^BvmwgLVZp%^JF
literal 0
HcmV?d00001
diff --git a/SSCM/SSCM/__pycache__/wsgi.cpython-312.pyc b/SSCM/SSCM/__pycache__/wsgi.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d66f656d1ad87e87e5d0d6d94bad90925b6edb3c
GIT binary patch
literal 623
zcmYjP&ubGw6rS0QP1%?zVtXFMOF(x~Z>5MoQbWY1!d8S3*lc&+ZYIpmEIZTG^wyJS
zPyP+ki+_h+6br(h6!G9q$*m`6vkC1xy!X9%^WOKpVLmsT4l?F{dJ@0G2>mLPmDQGD
zeqg|RM9~0IOf8NF*hHIKsXeeU0z6q?wOqtW;{vY`t?$EFrPXiSIw%C0Q;f5NX$OdYZtSOe#=BkAYOTL(ank4kT10B&no_9PVcjXN!^uQ=nut3bTx}DAY`f(a6kuW++mb17X6jrHcZQ!VG7M#Eiooq5zz+)|uM!
zJSrpQ(n%;1xzZHL)C1u?aPNC#d8DOBA>(qEg3#WPN|@*TDR=C*ad9&N9h7ImB^kwL
z=lSD)cQ5dF_V;`Jt{?2~bzZ&LIc}D#y9%^sB2n#nQ4a#c9|VOZRdKyi;YLQhTh7dF
z!&1~iOj#~P;h07Wad^me(YQqS0nJM}=k3nc@a0U8r5I+5u-s=@vR1B~>SnX^_3i3S
zALcF7X+8;3o^gL|jPXCKj%)K92s^*gy&uSW>zp{>(Z*M_@nzHfcp00
XTvZHm^ao}}M#dYwR*gJGEI=**%f2=_
literal 0
HcmV?d00001
diff --git a/SSCM/constants.py b/SSCM/constants.py
new file mode 100644
index 0000000..d53129b
--- /dev/null
+++ b/SSCM/constants.py
@@ -0,0 +1 @@
+INVALID_KIND="Invalid kind.Kind should be one or teacher."
\ No newline at end of file
diff --git a/SSCM/course/__init__.py b/SSCM/course/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/SSCM/course/__pycache__/__init__.cpython-312.pyc b/SSCM/course/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e533e5a7b6b5072480b2beb541b8a57de3d5f3f0
GIT binary patch
literal 144
zcmX@j%ge<81Z!?PrGe$oo0&y{j
O@sXL4k+Fyw$N~WVwjzrF
literal 0
HcmV?d00001
diff --git a/SSCM/course/__pycache__/admin.cpython-312.pyc b/SSCM/course/__pycache__/admin.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..68cb1c2fdc3c551ff0d667564e3bd8141cda5922
GIT binary patch
literal 188
zcmX@j%ge<81Z!?Pr8xoV#~=<2FhLog1%Qm{3@HpLj5!Rsj8Tk?43$ip%r8OGnvAzt
z6H{_C^ZYcKZtm}#sl@w(r6)^)9tYr8MQuj;8#VRJCvLquvFQx!Y6%^%X
zr6!le1P43w6#L78R$)fKAdXsQkrYlbfGXnv-f*!~xXI2*kx8#s_9bM#gPo%{
F4glOuFIxZr
literal 0
HcmV?d00001
diff --git a/SSCM/course/__pycache__/apps.cpython-312.pyc b/SSCM/course/__pycache__/apps.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c137ed322fd4814a95e038014836366947e08180
GIT binary patch
literal 450
zcmXv~yGjE=6uq;%k(h^w2EoF@Mp%TcRYb@GtqelCWnow|voT?_Gw!2UJ0TxnWxhf5
zPi!p1ij|d}5N%R9k9CTB&zW=Xojdon*{p#$FYle;QRGia{!gU@%L4)CK!BhSrpQGI
z47dPd%z&5_J)7F+8o6axz9g|xvEJsq%c5XB8fsZbRFY*&fH_cb5dqgA$Tf-KTDfUk
zMWf5IIH9`wZjVg-Xv7?H?MxY=Vd8Ygqjr|E^Dzxcu{KoZzFjG*7)Sn;VqDZP7TzqB
zxPkF)=7*)SMQGq>VTygx0SBsuCABA5%F$Mby%X;$Pj6V{ag}(?CUls3gF*Mw(~o&R
z=ZVAfSZ+uKOMs*)!VDI>M{m~7qP~6Ki{*{d`?gus%a6$7Snf=hHzZQV4S`nGQ$6`v
dyeX($S0Y#SZ6bs|VE<>$K&^-4Ul2)E{Q;%2a)1B;
literal 0
HcmV?d00001
diff --git a/SSCM/course/__pycache__/models.cpython-312.pyc b/SSCM/course/__pycache__/models.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..2d5ec5f6fa734901674fb90f94e7babf67547783
GIT binary patch
literal 185
zcmX@j%ge<81Z!?PrP%=K#~=<2FhLog1%Qm{3@HpLj5!Rsj8Tk?43$ip%r8OGnvA#D
za`RJCbBg^mnQn2WWF_XM=j){;6)^)PS2BDCsrjYrViglmS(1^T7gGSH3X1ZxQj<$!
zf`grXW0Lbri;7cYAg1UQRQ}?y0kTVTQtgU3fVvrhxERFvz|6?Vc#lD*hz-aA048`Y
A82|tP
literal 0
HcmV?d00001
diff --git a/SSCM/course/admin.py b/SSCM/course/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/SSCM/course/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/SSCM/course/apps.py b/SSCM/course/apps.py
new file mode 100644
index 0000000..25f0187
--- /dev/null
+++ b/SSCM/course/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class CourseConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'course'
diff --git a/SSCM/course/migrations/__init__.py b/SSCM/course/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/SSCM/course/migrations/__pycache__/__init__.cpython-312.pyc b/SSCM/course/migrations/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..73e58ae334f7cf71228c29faae25410415e6da2e
GIT binary patch
literal 155
zcmX@j%ge<81Z!?PrGe;$jfvBQql-V-Yiu1pxF$Cocd1
literal 0
HcmV?d00001
diff --git a/SSCM/course/models.py b/SSCM/course/models.py
new file mode 100644
index 0000000..71a8362
--- /dev/null
+++ b/SSCM/course/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/SSCM/course/tests.py b/SSCM/course/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/SSCM/course/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/SSCM/course/views.py b/SSCM/course/views.py
new file mode 100644
index 0000000..91ea44a
--- /dev/null
+++ b/SSCM/course/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.
diff --git a/SSCM/db.sqlite3 b/SSCM/db.sqlite3
new file mode 100644
index 0000000000000000000000000000000000000000..18351023cb1a24bbb1e42732a09232187802d21c
GIT binary patch
literal 151552
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
J1RjXM{{b+Cb0+`*
literal 0
HcmV?d00001
diff --git a/SSCM/manage.py b/SSCM/manage.py
new file mode 100644
index 0000000..5c15485
--- /dev/null
+++ b/SSCM/manage.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+ """Run administrative tasks."""
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SSCM.settings')
+ try:
+ from django.core.management import execute_from_command_line
+ except ImportError as exc:
+ raise ImportError(
+ "Couldn't import Django. Are you sure it's installed and "
+ "available on your PYTHONPATH environment variable? Did you "
+ "forget to activate a virtual environment?"
+ ) from exc
+ execute_from_command_line(sys.argv)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/SSCM/templates/user/background.html b/SSCM/templates/user/background.html
new file mode 100644
index 0000000..bd34976
--- /dev/null
+++ b/SSCM/templates/user/background.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+ 学生选课管理系统
+
+
+
+
+
+
学生选课管理系统
+
Student Course Management System
+ {% block welcome_message %}
+ {% endblock %}
+
+
+ {% block login_container %}
+ {% endblock %}
+
+
+
+
\ No newline at end of file
diff --git a/SSCM/templates/user/login_detail.html b/SSCM/templates/user/login_detail.html
new file mode 100644
index 0000000..3ae1c9d
--- /dev/null
+++ b/SSCM/templates/user/login_detail.html
@@ -0,0 +1,30 @@
+{% extends "user/background.html" %}
+{% block welcome_message %}
+ {% if from_url == 'register' %}
+ 注册成功,你的
+ {% if kind == "student" %}学号{% else %}账号{% endif %}是{{ uid }}
+ {% else %}
+ 欢迎
+ {% endif %}
+ 欢迎
+{% endblock %}
+{% block login_container %}
+ {% if kind == "student" %}
+ 我是学生
+ {% else %}
+ 我是教师
+ {% endif %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/SSCM/templates/user/login_home.html b/SSCM/templates/user/login_home.html
new file mode 100644
index 0000000..10c3e25
--- /dev/null
+++ b/SSCM/templates/user/login_home.html
@@ -0,0 +1,9 @@
+{% extends "user/background.html" %}
+{% block login_container %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/SSCM/templates/user/register.html b/SSCM/templates/user/register.html
new file mode 100644
index 0000000..277d6ea
--- /dev/null
+++ b/SSCM/templates/user/register.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+ 注册
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SSCM/user/__init__.py b/SSCM/user/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/SSCM/user/__pycache__/__init__.cpython-312.pyc b/SSCM/user/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8f89d03393437864c76ae45a647e85abdb7324ac
GIT binary patch
literal 142
zcmX@j%ge<81jkM}rGem}#sl@w(r6)^)9tYr8MQuj;C#VRJCvLquvFQx!Y6%^%X
zr6!le1P43*`MP7R7+g(JQF@#bJ}1pHiBWYFESo)XE6N#URE9W=2NFdkhLiY(NeG
DbLTFQ
literal 0
HcmV?d00001
diff --git a/SSCM/user/__pycache__/apps.cpython-312.pyc b/SSCM/user/__pycache__/apps.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..834edac00d7ce1b386eeaf565f81fd66b4147ee9
GIT binary patch
literal 444
zcmXv~Jxc>Y5S_WZNX&<55Fv$yjd0D?A|m7itqel2IS!UHyB8BKck6u=XD8$bh)sTj
z_&+SPu?z=RR(3+PN#*YCImOI-JMZnz&Rert0}(H;UGGuUPf7lxQi9c?01Kc%(T5q@
zh@inaP;CxWXZWluovmetS^1L0#C)^Ec`ppS$#|sNDq~4jy85?Uwq_w^er$Co<4&4{XA|br+(?CVU{>-fA%Qz%gyc0sgfjId
zZV+;tx_;SdQRca+pAc90iKi}*y(d`7vDRk)*tyJ-n=o*AQFs(i*(h;_!`_7>pK@Hz
zV~b~z+)a@T0pg}eb6B>I-i^IwedoR($&;c#F!j7%enOffxh-XHNK^>71X@>5)ZC}h
bwxDuRv0T!(j))&{@Ux*|>!JM%q7<$_L@RIO
literal 0
HcmV?d00001
diff --git a/SSCM/user/__pycache__/cbvs.cpython-312.pyc b/SSCM/user/__pycache__/cbvs.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..59f08abe719bca3c02513568d75eb38762405074
GIT binary patch
literal 3452
zcmb_eO>7&-6`m#ck6co+Y)YbjBH4-4n6f1+c4DWl?YNC&*-GMARaz9RiUq|P$)vfY
zGP{%^l|*##fdP!vI!T68K-a)NX{`%)I$|-#34bM#BWk`;VsQzR(Hz9vgm98p@6X${L}BN;zUlNy!Q%0}{3axu7K{
zWmga86iZF2mX_4qww%+gP%>nNlVP{5dAQObDw+Pjkd_U;TpNzP@I`oFxdZSB9
zBK!nh5&@xcw#c~6gw7ewaF%uwk_f-YS;}F*&aj){(mCxEf63-Ew!`?P0=GoxCoI+M
z-~|h(0Uyfpj?loCzRvj7v=@UXrAA}tRZ!LlBT0#pWPk;eGEjsQ|t9dw`v-C5cWrxVN^*o;c0uNr0q4r->Zc8fSY`-wAr;1F`N4@1sXBw
z)F_9XSNvfmk{$N-R_)J1BQ%J?@4rDDRfWzquhRO(Dfhl
zY+*@+F)DL0mCMlO!52_rtYz(jHEe)LvO?+|`?orVs~y7|TD9XyMcIxGtbM%t@m6f4
z8XNh#dowmti=EzzU8u$`{Hd=N`=Dafjh-!Iuxbp}jG^^U9~lSheTO%u?haKx-0toF
z^5lAHYxqQU_(W~smE8lfZf~B+f
zuKw+TZ+^3R=u$O)sn$8MsZZ>{d627#u+U92pR$-~im+)~1zOCZ9x=^Ni>aJv@!p;S
zMwa95JNJ$~4OefAsKcy<958}A4?K>x7jzmH`HJv&pyH=c;8nW<6?+iGEm9A6t-N3F
z99o&I@BhilNA-QZD6$aX*uDxf+oSnx%I+J$?>
zx|GB5*TInn`9TziP`rxbH57+YypG}siUf)g6vzPlC<+(#!~7WPqbM$d5Jn@CHq7^9
z8+Yx9^nTAt9QGE9w?Wu=y)Ah6fB=!fN9<3$O=4QMA@*?``Y#YGWV>f@Ex(%InA)&w
zJx43ide6{WVYRSf)q38lME?W7AHL$^_rzB0S~YfUb1GSj{k9Fj*QXvCLob2e_1@vN
z&sIO%Sg!S+_O1l6ED9wKg=fKaP_!$cKlFy=s
zpHO}d#d#F(qQJA|7f`f-_ZQeifmi-tfj8a+Ue~=t?4w!uK@`U9>jmzli;nF*7JMfn
z*03$Y-PvRFEYEl*%@GGh7>U}wPunF8H&kJ`y)Kp5F0XidnSc=z@Q`cgBAM
Dec=N1
literal 0
HcmV?d00001
diff --git a/SSCM/user/__pycache__/forms.cpython-312.pyc b/SSCM/user/__pycache__/forms.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..26058696792695e7ea7fd68165993ce3a16e1027
GIT binary patch
literal 2816
zcmd5;U2GIp6u$GfJKJ_C3bjbu(ijw1u_P#nl~hRyB9Th$kGN?%4m)>$n%S9pXEsm+
z2_!_9L<4;wD~ZOMs9{q?-r$i3A545{(}=^$g1#8;!#DTd
zIrrRi&;7nL^GiJ5K%h;3wLATjM#!Hy2pfz=tNaX)60wLS*(5I|B?<-LT=qy2utqK?m_1Jq1qDNCV6*lJl|FjFFwBqfU^WtmWAR1b}o
zo|a_E7nCVEm`Q36wNot(JTxt>40{(MwUb51qY0fiL45DHnVho+0xm?rZsCXT7fxTk
ziHR=DT(iwX)aDI&^N3+nC*x;t3!@)DxjuQ~W(OK63~gB>0FNBbSsCj0m36KghGXWb
zVekgS$h%g-#(tAwd{i*);0?o@ZLvv~Y~>3N4;X1(o<6@0FbRflC#
z0dsQih27o52gd!Z>kN;H#~5=*Y04k&@9*6|T<|Cx7TNC_8)s2iAOLsrx&Tg+dA+r$
zoo+tW{6+TC);WFq@!t7(TXFETamtw7aYeqm?ON~9Oz+TK{QVPq+0&te$L-#LPD}TO
zH~rVyb2m%Uo
z%N*w#&6_!!t2rm_rX*MuHcTN>w}J)YtW+X?_=fml;N&Rz9K<(OeRE7YDvjbr)-_9-
zs(L;qKg2?|YQ^Q4a#ZRkWwlQnf;|h)K5h+#*=f1d>vUYdGjIB-Y(nLlR~Vy=VLjkl
z%BH5n6{rJcjjJBD)4V~<8J6jrOAdL=Fj6+C+b}$=gq_fiGr`E0aKH5{<+w|DLKatE
z1Gsyf{My>~rEz{>rgg_`Yj<(qe9MN?$i&FxzS)*7#l7?Go4y`7H!{7sXZnqUv+W;D
zH?{q-rhU4pUC=+FvnRj_dlF#{0w$bmP_CfpMbcQ5JchyWcs14(wQa*FOKdC5dYI8S
zMaW!52C!#f0@dc>-QR^`v#O=2%{PBojNFm6SjQ~_5GZd47(kt@4*+kQtwneW0Ta*A
zv|h8AYLRbLOa;wgvzCo#21~|-alWUf&z8Yyb?qHh*E;?t0Kwk4c$oH1dcwYC0J=_(N#Kk9wC7r6&~1Fkr4?p$|UsZ8(nYN7;%=
zp$@Uf@=x78eP{41(!+Mc5|pp^F2F5ClBD0ry5C7+QI@5H(wS|g?uqV2g8fBZmWJ+|
c8Il$wjZ()MT5>1cMFQQ$^|kSB9E-F30}Br}asU7T
literal 0
HcmV?d00001
diff --git a/SSCM/user/__pycache__/models.cpython-312.pyc b/SSCM/user/__pycache__/models.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f2236af685821fcc0fe1efc0907895716d21dea5
GIT binary patch
literal 3494
zcmeHKYfKbZ6rS1l&hE0f_~0Qeiq)>PYAslNl(zDahJtNr8?%y3hP?wU*$3X)ZG|+=
zYJ6a<(WJK28X_@KSV6(qREj3`XOsR}noS^+G%+d5vcF1;#)LoZIWxPs7)bq5+dsX@
zesk`fZ|*(k+(Ti-mA^qXw=b%=#T{?wn0H*P8nEFnW)11W5oUCl{1&HXCoEn++g>bIK
z`P<8GYnqrie`&hsN`!qpl014NapPw4Phf7kjE*W$Nt{&x5CsnIht-yNU%;pFzRZSm_p5v{VgGO=uK6TKaLP&^z=
zqK_dZsPDf`jP)mRSCxgJ6F+f0e*J3v?Cs=pFsg<=d?L|zWYOtNogHRw7m%Lrbhg4Z
z8`7n7-pac4oqDHX-kQqvmU=NL$c9$YPedvk{2^a6JUL0-2i`*<^@bLY=p~Y@!*n-9
z46=z=GSBle$MbN#LS7MUE6*Pa30@@eJjI(PXMgDT914k*0lyTag2x|}E$#(diZF9P
zV&+S#b~U}*8Egyqn>v(72Mx4~?qE}6V`Y6)ND^t2dWW}kbjmt(m=?l!Iq;K;0FE*D
zt;O9n6V~E!Yw3oQW>eHp-=x>jH^3|?CFa&8Ae5A!M0
z4$mjsMHa?W*E{pwMYdPd$VAu%kP>|>6(D=h!}|y;>mp0Q$>cDkvLzkxL#d+2l(a=}nGg^%B3P7gwMxKYQJTL9lK>^kUaLWs6`jU)c({=+eIC(Oy^
zBQbxR%kL9l9j*eXi`MxpW~o`cgkv-}X4@OCeWcUsx!)OpKTNEC+nj;bm#JZ4L~i&k
zwExSPk_y*pqdv@L%I&uY@izepS+$Z)N~(!6Mjnw{Ql9}Xi4>t
zdt%lD&s^Z?R`f$dYtbhZnI{EOQJJo+bm*$IV+2x48}kY$@=AWrD;cO7uDezjwUc){-(rS(a@bpN0nSgwJHA5p;n3AXrWfqJqWKOR3N;8@Fv3J
zjJ<_jWmAuNA_W2K`oE^g?wFZ`tL{72pW8U$SU>JqKOl@Aj5*#8*Jmp7p%H(~
zQvEcFyfZ_QF_;FYK{k_i!QUF#LYkGzM=^7
A9{>OV
literal 0
HcmV?d00001
diff --git a/SSCM/user/__pycache__/urls.cpython-312.pyc b/SSCM/user/__pycache__/urls.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..52fc5d85e20cb121e6d6a2111183da5679b5dfff
GIT binary patch
literal 502
zcmX@j%ge<81ap?UquP2QAFPfIs19r+LJf$8p^hD>jt5l@SRDt#ymaO$_DW7o
zu9qMQO~zZSWtpkv#Xts2L1IZp6*ZCdcIz1QBH9Y3rK_|BR@B_
zh!w~z0tMMEZlDy<2|xq$idQm#f|cQyri)cfKxIireqKxgm?|jB&q_@$i3tvN_Kg9V
z9s@E^ub}c5hfQvNN@-52T@gP}CnFFSy8($0%#4hTcNxU)GRS;nV_@a%keFaP-D;xM
z0{1H{IyYH3E^x}s2%R52GkQh(6&5qFfcyg1<$MeIHh5iOvH!r%!q3#mUBnAC3II;#
Bd%XYv
literal 0
HcmV?d00001
diff --git a/SSCM/user/__pycache__/views.cpython-312.pyc b/SSCM/user/__pycache__/views.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..28f15f15b0dd92e7acacf215c6b387605da2d67d
GIT binary patch
literal 2391
zcmbVO-ER{|5a08ieP^G|IV1)`ARh%nj7lhkZ<3-m=9{{xL20ofBG-4s4tKV@cMeT@
zrm0k^wpuAhJcI{SnWq$`54`qos8rc866O>HRZ~@cL*$L8&aQp78&&-pY4>JlXLe`C
z^PBaLKA#5xJzWajIL;&V3t8CYs59#kU>1>#WJX0A6JZ#_J5-0pMp(+TDyKOkPRett
zOXDNFCPW0fcB*d86Y*$bM1-~LOBC_SJj^~>fO*rbJLvhHT=bB!Tv$oU3Jx-s_q<`G
zKTz~^Dyb`EeIY#l&gBcC$x9c)p`gR^jv1NDsi{QrYzk|Z_o@uyKqv(cC4(NToFLZL^%B&GjB`4DKlg6oOC1y;Fjg7uHK@OUj0ax_F
z^sL2^!|*1s6JY3mnC8){*jCtE>N;2v50$t>>mWma^4kdl3C8+Q;Nv1P9axkZ(=o&7
zyy=jcPS}!Rg{5XhhW)dm<$9E3U{}-4vL>1)x!6E5dvgFG95q>)quf>lils(iK^)#d
z-#hKovs`kEA==yjtZj1BK3lu_U9PkEH`pgh+CZ|4#F}-=yy={C0q1H)Y`Sb;Akx2%
zPoPo#0J&omOqK^NlK%}f-M&EpOSy42e)s=aWu2ze
z*ik@6`&%;FD&O9)6q}ZI?!eB|v};OD4m=R42md~9uk8)){tt0Ctl&m3xzPyNIR&Ko
zKIfMSkbnSdo5B`%Gm(@5(7aK@t;Op#Ok3QQ_s6c{&7cXW`QkPZVbXT${uzpvp2Ui7@v&6WP(C#xA;3yBq}
zXEo4Q++7Lmy~C|FxR(O*ci6jkuhXr&*9%;A+m0L$fl946o_s9!S9|v^i4Vjj>4Egf
zQ|Ubgmt8D-d)8{LcIeTE6>+4*jbPGOV~u7B3sRc&k@yxE@*ZX#CL=Snbp)F2X1dh|
zGzm4p=16vejf2{B7^JW${k;veb-@8m+H7grO?VrP_G?2Dz{7?y=~gv_I5DXni;qH;
z!gGVkliw`rAWO@V79xNmlZ@#kN~pD3nF&~#O6Z1yF}wljI1K#~O!KJf_RWW?yqKF^
z;kT{&x}W&^%f9}KZy?XXR>8gE?rfFjxSx6PDg2V>zRs3}9c#^sq^S-ECCe{QN0U>j
zK|P+rMl56K6gO5!T^xr$1%m($`mcZnV7UP#x)Du+Dg~&AfOwD~Tc^;ZNVVKl8vA%g
zrlxbrD|+KOI`|x&
Wc*QZy&?{kpd3*gM#>4ERr~CnZv;6r0
literal 0
HcmV?d00001
diff --git a/SSCM/user/admin.py b/SSCM/user/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/SSCM/user/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/SSCM/user/apps.py b/SSCM/user/apps.py
new file mode 100644
index 0000000..36cce4c
--- /dev/null
+++ b/SSCM/user/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class UserConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'user'
diff --git a/SSCM/user/cbvs.py b/SSCM/user/cbvs.py
new file mode 100644
index 0000000..bbfaf6f
--- /dev/null
+++ b/SSCM/user/cbvs.py
@@ -0,0 +1,71 @@
+from django.shortcuts import reverse,redirect
+from django.views.generic import CreateView
+
+from user.forms import StuRegisterForm,TeaRegisterFrom
+
+from user.models import Student,Teacher
+import random
+
+
+
+class CreateStudentView(CreateView):
+ model=Student
+ form_class=StuRegisterForm
+ template_name="user/register.html"
+ success_url="login"
+
+ def form_valid(self,form):
+ grade=form.cleaned_data['grade']
+ student_set=Student.objects.filter(grade=grade).order_by("-number")
+ if student_set.count()>0:
+ last_student=student_set[0]
+ new_number=str(int(last_student.number)+1)
+ for i in range(6-len(new_number)):
+ new_number='0'+new_number
+ else:
+ new_number='000001'
+ new_student=form.save(commit=False)
+ new_student.number=new_number
+ new_student.save()
+
+ form.save_m2m()
+
+ self.object=new_student
+
+ uid=grade+new_number
+ from_url="register"
+ base_url=reverse(self.get_success_url(),kwargs={'kind':'student'})
+ return redirect(base_url+'?uid=%sfrom_url=%s' % (uid,from_url))
+
+
+class CreateTeacherView(CreateView):
+ model=Teacher
+ form_class=TeaRegisterFrom
+ template_name="user/register.html"
+ success_url="login"
+
+ def form_valid(self,form):
+ department_no=random.randint(0,300)
+ department_no='{:0>3}'.format(department_no)
+ teacher_set=Teacher.objects.filter(department_no=department_no).order_by("-number")
+ if teacher_set.count>0:
+ last_teacher=teacher_set[0]
+ new_number=str(int(last_teacher.number)+1)
+ new_number='{:0>7}'.format(new_number)
+
+
+ else:
+ new_number='0000001'
+
+ new_teacher=form.save(commit=False)
+ new_teacher.number=department_no
+ new_teacher.save()
+
+ form.save_m2m()
+
+ self.object=new_teacher
+
+ uid=department_no+new_number
+ from_url="register"
+ base_url=reverse(self.get_success_url(),kwargs={'kind':'teacher'})
+ return redirect(base_url+'?uid=%sfrom_url=%s' % (uid,from_url))
\ No newline at end of file
diff --git a/SSCM/user/forms.py b/SSCM/user/forms.py
new file mode 100644
index 0000000..5b3bdce
--- /dev/null
+++ b/SSCM/user/forms.py
@@ -0,0 +1,34 @@
+from django import forms
+from user.models import Student , Teacher
+class StuLoginForm(forms.Form):
+ uid=forms.CharField(label='学号', max_length=10)
+ password=forms.CharField(label='密码', max_length=30, widget=forms.PasswordInput)
+
+class TeaLoginForm(forms.Form):
+ uid=forms.CharField(label='教职工号',max_length=10)
+ password=forms.CharField(label='密码',max_length=30,widget=forms.PasswordInput)
+class StuRegisterForm(forms.ModelForm):
+ confirm_password=forms.CharField(label='确认密码',widget=forms.PasswordInput)
+
+ class Meta:
+ model=Student
+ fields=('grade','name','password','confirm_password','gender','birthday','email','info')
+ def clean(self):
+ clean_data=super(StuRegisterForm,self).clean()
+ password=clean_data.get('password')
+ confirm_password=clean_data.get('confirm_password','Password does not match')
+
+ return clean_data
+
+class TeaRegisterFrom(forms.ModelForm):
+ confirm_password=forms.CharField(label='确认密码',widget=forms.PasswordInput)
+
+ class Meta:
+ model=Teacher
+ fields=('name','password','confirm_password','gender','birthday','email','info')
+ def clean(self):
+ clean_data=super(TeaRegisterFrom,self).clean()
+ password=clean_data.get('password')
+ confirm_password=clean_data.get('confirm_password','Password does not match')
+
+ return clean_data
\ No newline at end of file
diff --git a/SSCM/user/migrations/0001_initial.py b/SSCM/user/migrations/0001_initial.py
new file mode 100644
index 0000000..f3c922d
--- /dev/null
+++ b/SSCM/user/migrations/0001_initial.py
@@ -0,0 +1,46 @@
+# Generated by Django 3.2.25 on 2024-05-14 05:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Student',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=50, verbose_name='姓名')),
+ ('gender', models.CharField(choices=[('m', '男'), ('f', '女')], default='m', max_length=10, verbose_name='性别')),
+ ('birthday', models.DateField(verbose_name='生日')),
+ ('email', models.EmailField(max_length=254, verbose_name='邮箱')),
+ ('info', models.CharField(help_text='一句话概括自己,不超过250字', max_length=255, verbose_name='个人简介')),
+ ('grade', models.CharField(max_length=4, verbose_name='年级')),
+ ('number', models.CharField(max_length=20, verbose_name='级内学号')),
+ ('password', models.CharField(max_length=30, verbose_name='密码')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='Teacher',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=50, verbose_name='姓名')),
+ ('gender', models.CharField(choices=[('m', '男'), ('f', '女')], default='m', max_length=10, verbose_name='性别')),
+ ('birthday', models.DateField(verbose_name='生日')),
+ ('email', models.EmailField(max_length=254, verbose_name='邮箱')),
+ ('info', models.CharField(help_text='不要超过250字', max_length=255, verbose_name='教师简介')),
+ ('department_no', models.CharField(max_length=3, verbose_name='院系号')),
+ ('number', models.CharField(max_length=7, verbose_name='院内编号')),
+ ('password', models.CharField(max_length=30, verbose_name='密码')),
+ ],
+ ),
+ migrations.AddConstraint(
+ model_name='student',
+ constraint=models.UniqueConstraint(fields=('gender', 'number'), name='student_id'),
+ ),
+ ]
diff --git a/SSCM/user/migrations/0002_teacher_teacher_id.py b/SSCM/user/migrations/0002_teacher_teacher_id.py
new file mode 100644
index 0000000..b91b592
--- /dev/null
+++ b/SSCM/user/migrations/0002_teacher_teacher_id.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.25 on 2024-05-14 05:31
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('user', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddConstraint(
+ model_name='teacher',
+ constraint=models.UniqueConstraint(fields=('department_no', 'number'), name='teacher_id'),
+ ),
+ ]
diff --git a/SSCM/user/migrations/__init__.py b/SSCM/user/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/SSCM/user/migrations/__pycache__/0001_initial.cpython-312.pyc b/SSCM/user/migrations/__pycache__/0001_initial.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3582b94dc5e74ef4b27d144990c8c9be8d569ce5
GIT binary patch
literal 2736
zcmd^BZ)_7~7{9yzFYUOFLDzO0V@#l}n_~h|KoZyhMTW@ums-5s`o3$gwAXUI0ySy|
z;a>s-648whMq&a)R$v4pb&$x%C4RXkP1@Wi64!P8pwC6Oizb
zfbdX&^r-xVM@6EsyilxRQ!71HT~bQK*5NT3Fqq;^zY(hgEUr&!llvDO1a(l|=Z
zTP~_;X#!?H1?s?JKqoB~vFjC&hAOd_BpXJ_`N&HZyJc1EmI3Pm42?B0*nk~4l1=4g
zqc3Z&Y1;ypFNoS&({cr9TVT1ere!;Lt0#aWTU91jvdI$cv%^7iNV7a}*|ILktQW8{$5JvgtS!1|l)Y
z@N5{$YP=S^5t=xjIQiROxDqMSnnL&lg
z-+U#19(r!FR^&)>;EdhqL$
zOOvU~(?6V@{^@-8`mX%l;o@I70-kV_sXLS7~0)XegupBM2aZbo^0LfQkIYy^c8{ZqH
zjxhSrO(F^`$BTQMi)B5dh#5vUG7P$2;vtA=6T=*fvmx9(h|_UAC!+R}O$aV-6W+(c
zn1IpBi+YrP?86%fIIXg28|UAOI&}xmiEQWzu)-YKiyF5?8n@%(muT}=0D9&z$@Br9
zI~Io(5@RF^=Wf97i05bv;>G6Pjo!TpF%aRsQRNjCB0=aAz5V??ecm`a4c?d6rnjrB
zYb`VP4V}@1fKP(5U?LVoH`f{BSzZ0m&KWh?pdH#hqbCf@FBr4>mbAVlXR$xCES0RT
ztH-leSK8`IsVCYc4@p-pIDP=?w9EOGfRvOb+a0?!8p_OUrWuq(t*R0Kc2B2m*^8Y
zORLn@ePdO&tvlV;onj}BX4*Uw{n0D6I`;JQjN_n0ANpqrS%G_{HLY*WS<$Z(H%e#P
z+9_?=C4G1#WBqtmqe7Y6w4z>nYL~FF+Gm|;{u_Z9#rtn(*3Y^C
literal 0
HcmV?d00001
diff --git a/SSCM/user/migrations/__pycache__/0002_teacher_teacher_id.cpython-312.pyc b/SSCM/user/migrations/__pycache__/0002_teacher_teacher_id.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..19182063b79e28c76a7ac9721206fc3e102ae962
GIT binary patch
literal 758
zcmY*X&ubGw6n?Y2nQYcZf(TLZP@y1u39$zcB86I^Ahsw)kY!=qW~S*ZyR+%+rjVOL
z4<38#AK*#a|HMlJLS(LJ-&W%@C5<`V8J#}>jbFHP>idj<$i9@abS-ezxK-z-%?)6`!XtcCUS+-
zjIt!}Epq_s3o`ql!5J_J5QV^^sE-2M0_MbJ!~dp$ZbN%;eEWZ^VbrG1MeW?0doFN=
zbTxNW_g&T4sru2)Im4VuwbJc&pAas1!J|ag3l{YbnbhtkWrIi-DH8<|nZjb2?(2AO
z5kWZBLHK~PgyzZ-QOZieMkFyzc|9$=kP#QfuHR5DDb0i^j}SeJVZt?QnB__cz
zeI^r>i5_RUG$U2bO-i@^7Lty!wcZJSG-OM&^0EP24Eig~jQ*SLm(RjCqv9|V;h@|G
zGK*QS2>153c0!{)T;5Kor?5^cY1PhYXE2iHw#%OZxp^KZFvZY#G_|d}_~YxTr}1ZR
z;;xR})gNvBbxw~b?asK}xqSNe@;&|DW>+=4;Z5z@9sKE)yk8aE^&QoqaU}X#hwhhp
zOM&wv@0qYN_JKw>?(_N3HsnK1_49??fT@iTy2gO~D|`##Q*Y8*8@JYegC=G6AEo`n
AYybcN
literal 0
HcmV?d00001
diff --git a/SSCM/user/migrations/__pycache__/__init__.cpython-312.pyc b/SSCM/user/migrations/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d7fedb5c458251a5ca849f597db17704102e2f80
GIT binary patch
literal 153
zcmX@j%ge<81jkM}rGeG55=%1k^NM5Q<1_OzOXB183Mzkb*yQG?l;)(`
X6|n*hVg%x15aS~=BO_xGGmr%Un`b6u
literal 0
HcmV?d00001
diff --git a/SSCM/user/models.py b/SSCM/user/models.py
new file mode 100644
index 0000000..f0427d3
--- /dev/null
+++ b/SSCM/user/models.py
@@ -0,0 +1,49 @@
+from django.db import models
+
+genders = [
+ ('m', '男'),
+ ('f', '女')
+]
+# Create your models here.
+class Student(models.Model):
+
+ name=models.CharField(max_length=50,verbose_name="姓名")
+ gender=models.CharField(max_length=10,choices=genders,default='m',verbose_name="性别")
+ birthday=models.DateField(verbose_name='生日')
+ email=models.EmailField(verbose_name="邮箱")
+ info=models.CharField(max_length=255,verbose_name='个人简介',help_text='一句话概括自己,不超过250字')
+ grade=models.CharField(max_length=4,verbose_name='年级')
+ number=models.CharField(max_length=20,verbose_name='级内学号')
+ password=models.CharField(max_length=30,verbose_name='密码')
+
+ class Meta:
+ constraints=[
+ models.UniqueConstraint(fields=['gender','number'],name='student_id')
+ ]
+ def get_id(self):
+ return "%s%s" %(self.grade,self.number)
+
+ def __str__(self):
+ return "%s (%s)" % (self.get_id(),self.name)
+
+class Teacher(models.Model):
+
+ name=models.CharField(max_length=50,verbose_name="姓名")
+ gender=models.CharField(max_length=10,choices=genders,default='m',verbose_name="性别")
+ birthday=models.DateField(verbose_name='生日')
+ email=models.EmailField(verbose_name='邮箱')
+ info=models.CharField(max_length=255,verbose_name='教师简介',help_text='不要超过250字')
+
+ department_no=models.CharField(max_length=3,verbose_name='院系号')
+ number=models.CharField(max_length=7,verbose_name='院内编号')
+ password=models.CharField(max_length=30,verbose_name='密码')
+
+ class Meta:
+ constraints=[
+ models.UniqueConstraint(fields=['department_no','number'],name='teacher_id')
+ ]
+ def get_id(self):
+ return "%s%s" % (self.department_no,self.number)
+
+ def __str__(self):
+ return "%s (%s)" % (self.get_id(),self.name)
diff --git a/SSCM/user/tests.py b/SSCM/user/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/SSCM/user/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/SSCM/user/urls.py b/SSCM/user/urls.py
new file mode 100644
index 0000000..895657b
--- /dev/null
+++ b/SSCM/user/urls.py
@@ -0,0 +1,8 @@
+from user import views
+from django.urls import path
+
+urlpatterns = [
+ path('login/', views.home, name="login"),
+ path('login/',views.login,name="login"),
+ path('register/',views.register,name='register')
+]
\ No newline at end of file
diff --git a/SSCM/user/views.py b/SSCM/user/views.py
new file mode 100644
index 0000000..242d852
--- /dev/null
+++ b/SSCM/user/views.py
@@ -0,0 +1,67 @@
+from django.shortcuts import render
+from django.http.response import HttpResponse
+
+from constants import INVALID_KIND
+from user.forms import StuLoginForm, TeaLoginForm
+from user.cbvs import CreateStudentView,CreateTeacherView
+
+def home(request):
+ return render(request, "user/login_home.html")
+
+
+def login(request, *args, **kwargs):
+ if not kwargs or "kind" not in kwargs or kwargs["kind"] not in ["teacher", "student"]:
+ return HttpResponse(INVALID_KIND)
+
+ kind=kwargs["kind"]
+
+
+ if request.method=='POST':
+ if kind == "teacher":
+ form=TeaLoginForm(data=request.POST)
+ else:
+ form=StuLoginForm(data=request.POST)
+
+ if form.is_valid():
+ uid=form.cleaned_data['uid']
+
+ temp_res="hello,%s" % uid
+ return HttpResponse(temp_res)
+
+ elif request.method=='GET':
+ context = {'kind': kind}
+ if request.GET.get('uid'):
+ uid=request.GET.get('uid')
+ context['uid']=uid
+ data={'uid':uid,'password':'123456789'}
+ if kind =='teacher':
+ form=TeaLoginForm(data)
+ else:
+ form=StuLoginForm(data)
+
+ else:
+
+ if kind =='teacher':
+ form=TeaLoginForm()
+ else:
+ form=StuLoginForm()
+ context['form']=form
+ if request.GET.get('from_url'):
+ context['from_url']=request.GET.get('from_url')
+
+ return render(request, 'user/login_detail.html', context)
+
+
+
+def register(request,kind):
+ func=None
+ if kind == 'student':
+ func=CreateStudentView.as_view()
+ elif kind =='teacher':
+ func=CreateTeacherView.as_view()
+
+ if func:
+ return func(request)
+ else:
+ return HttpResponse(INVALID_KIND)
+