From b4f97bdf8f6ba37446fc2c5b5e3fe204fed132c5 Mon Sep 17 00:00:00 2001 From: "p412319.zxc" <2651231880@qq.com> Date: Mon, 27 May 2024 11:14:14 +0800 Subject: [PATCH] commit_01 --- SSCM/.idea/.gitignore | 8 ++ SSCM/.idea/SSCM.iml | 30 ++++ .../inspectionProfiles/profiles_settings.xml | 6 + SSCM/.idea/misc.xml | 7 + SSCM/.idea/modules.xml | 8 ++ SSCM/SSCM/__init__.py | 0 .../SSCM/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 142 bytes .../SSCM/__pycache__/settings.cpython-312.pyc | Bin 0 -> 2572 bytes SSCM/SSCM/__pycache__/urls.cpython-312.pyc | Bin 0 -> 977 bytes SSCM/SSCM/__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 623 bytes SSCM/SSCM/asgi.py | 16 +++ SSCM/SSCM/settings.py | 128 ++++++++++++++++++ SSCM/SSCM/urls.py | 21 +++ SSCM/SSCM/wsgi.py | 16 +++ SSCM/__pycache__/constants.cpython-312.pyc | Bin 0 -> 203 bytes SSCM/constants.py | 1 + SSCM/course/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 144 bytes SSCM/course/__pycache__/admin.cpython-312.pyc | Bin 0 -> 188 bytes SSCM/course/__pycache__/apps.cpython-312.pyc | Bin 0 -> 450 bytes .../course/__pycache__/models.cpython-312.pyc | Bin 0 -> 185 bytes SSCM/course/admin.py | 3 + SSCM/course/apps.py | 6 + SSCM/course/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 155 bytes SSCM/course/models.py | 3 + SSCM/course/tests.py | 3 + SSCM/course/views.py | 3 + SSCM/db.sqlite3 | Bin 0 -> 151552 bytes SSCM/manage.py | 22 +++ SSCM/templates/user/background.html | 23 ++++ SSCM/templates/user/login_detail.html | 30 ++++ SSCM/templates/user/login_home.html | 9 ++ SSCM/templates/user/register.html | 21 +++ SSCM/user/__init__.py | 0 .../user/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 142 bytes SSCM/user/__pycache__/admin.cpython-312.pyc | Bin 0 -> 186 bytes SSCM/user/__pycache__/apps.cpython-312.pyc | Bin 0 -> 444 bytes SSCM/user/__pycache__/cbvs.cpython-312.pyc | Bin 0 -> 3452 bytes SSCM/user/__pycache__/forms.cpython-312.pyc | Bin 0 -> 2816 bytes SSCM/user/__pycache__/models.cpython-312.pyc | Bin 0 -> 3494 bytes SSCM/user/__pycache__/urls.cpython-312.pyc | Bin 0 -> 502 bytes SSCM/user/__pycache__/views.cpython-312.pyc | Bin 0 -> 2391 bytes SSCM/user/admin.py | 3 + SSCM/user/apps.py | 6 + SSCM/user/cbvs.py | 71 ++++++++++ SSCM/user/forms.py | 34 +++++ SSCM/user/migrations/0001_initial.py | 46 +++++++ .../migrations/0002_teacher_teacher_id.py | 17 +++ SSCM/user/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 2736 bytes .../0002_teacher_teacher_id.cpython-312.pyc | Bin 0 -> 758 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 153 bytes SSCM/user/models.py | 49 +++++++ SSCM/user/tests.py | 3 + SSCM/user/urls.py | 8 ++ SSCM/user/views.py | 67 +++++++++ 57 files changed, 668 insertions(+) create mode 100644 SSCM/.idea/.gitignore create mode 100644 SSCM/.idea/SSCM.iml create mode 100644 SSCM/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 SSCM/.idea/misc.xml create mode 100644 SSCM/.idea/modules.xml create mode 100644 SSCM/SSCM/__init__.py create mode 100644 SSCM/SSCM/__pycache__/__init__.cpython-312.pyc create mode 100644 SSCM/SSCM/__pycache__/settings.cpython-312.pyc create mode 100644 SSCM/SSCM/__pycache__/urls.cpython-312.pyc create mode 100644 SSCM/SSCM/__pycache__/wsgi.cpython-312.pyc create mode 100644 SSCM/SSCM/asgi.py create mode 100644 SSCM/SSCM/settings.py create mode 100644 SSCM/SSCM/urls.py create mode 100644 SSCM/SSCM/wsgi.py create mode 100644 SSCM/__pycache__/constants.cpython-312.pyc create mode 100644 SSCM/constants.py create mode 100644 SSCM/course/__init__.py create mode 100644 SSCM/course/__pycache__/__init__.cpython-312.pyc create mode 100644 SSCM/course/__pycache__/admin.cpython-312.pyc create mode 100644 SSCM/course/__pycache__/apps.cpython-312.pyc create mode 100644 SSCM/course/__pycache__/models.cpython-312.pyc create mode 100644 SSCM/course/admin.py create mode 100644 SSCM/course/apps.py create mode 100644 SSCM/course/migrations/__init__.py create mode 100644 SSCM/course/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 SSCM/course/models.py create mode 100644 SSCM/course/tests.py create mode 100644 SSCM/course/views.py create mode 100644 SSCM/db.sqlite3 create mode 100644 SSCM/manage.py create mode 100644 SSCM/templates/user/background.html create mode 100644 SSCM/templates/user/login_detail.html create mode 100644 SSCM/templates/user/login_home.html create mode 100644 SSCM/templates/user/register.html create mode 100644 SSCM/user/__init__.py create mode 100644 SSCM/user/__pycache__/__init__.cpython-312.pyc create mode 100644 SSCM/user/__pycache__/admin.cpython-312.pyc create mode 100644 SSCM/user/__pycache__/apps.cpython-312.pyc create mode 100644 SSCM/user/__pycache__/cbvs.cpython-312.pyc create mode 100644 SSCM/user/__pycache__/forms.cpython-312.pyc create mode 100644 SSCM/user/__pycache__/models.cpython-312.pyc create mode 100644 SSCM/user/__pycache__/urls.cpython-312.pyc create mode 100644 SSCM/user/__pycache__/views.cpython-312.pyc create mode 100644 SSCM/user/admin.py create mode 100644 SSCM/user/apps.py create mode 100644 SSCM/user/cbvs.py create mode 100644 SSCM/user/forms.py create mode 100644 SSCM/user/migrations/0001_initial.py create mode 100644 SSCM/user/migrations/0002_teacher_teacher_id.py create mode 100644 SSCM/user/migrations/__init__.py create mode 100644 SSCM/user/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 SSCM/user/migrations/__pycache__/0002_teacher_teacher_id.cpython-312.pyc create mode 100644 SSCM/user/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 SSCM/user/models.py create mode 100644 SSCM/user/tests.py create mode 100644 SSCM/user/urls.py create mode 100644 SSCM/user/views.py diff --git a/SSCM/.idea/.gitignore b/SSCM/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/SSCM/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/SSCM/.idea/SSCM.iml b/SSCM/.idea/SSCM.iml new file mode 100644 index 0000000..4c65dab --- /dev/null +++ b/SSCM/.idea/SSCM.iml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSCM/.idea/inspectionProfiles/profiles_settings.xml b/SSCM/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/SSCM/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/SSCM/.idea/misc.xml b/SSCM/.idea/misc.xml new file mode 100644 index 0000000..52d3769 --- /dev/null +++ b/SSCM/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/SSCM/.idea/modules.xml b/SSCM/.idea/modules.xml new file mode 100644 index 0000000..3b163bc --- /dev/null +++ b/SSCM/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/SSCM/SSCM/__init__.py b/SSCM/SSCM/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/SSCM/SSCM/__pycache__/__init__.cpython-312.pyc b/SSCM/SSCM/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..606b080cfcf5da5ba51f8e94be215b4933516502 GIT binary patch literal 142 zcmX@j%ge<81i`1A(m?cM5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!(si+l38*Z|$j^%@ z08<4;`B|ySB{9Ll&b|;LK0Y%qvm`!Vub}c5hfQvNN@-52T@fo#HzN=igBTx~85tRi Hn1L(+ScM?O literal 0 HcmV?d00001 diff --git a/SSCM/SSCM/__pycache__/settings.cpython-312.pyc b/SSCM/SSCM/__pycache__/settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76aaa5ff30f02723a64677d38fc2b5eac2513792 GIT binary patch literal 2572 zcmb7GOK;mo5GM70TUKO8c@$8Zz_y&4suSmlBn>Umju5>nN^#2uC1~whrcIFwA92l- z?!ENZ9CFI7$f>`h7aKh!;K^uDy~zm*6ghQBNwy#xs7r|Zn4RyN+1Z(;ev3v!1U$d~ zvApqJlpy}JC&R}#7<~K(20s&s;0Qz_mqfN*oQot}1a@KfTe7dU6&%8j`?rJPmSf{s zZjVlraX#ec{K&%vS_Btt5y<<7aa@uK;Y)@4CS{3xuv8vtm~rO($X7>nr7KtDcw<(E!@yl~1k@Jgw5AKHKG2*^8yZlg2aGqV8`OrKwSUBSROON;`|?EHGwur6V@A?9kn8pI+a@=?z1Y(vqm@X=USh zJA#bB5Ej++OF=TQ_J3@tcw@xSU-s!{NXt_d^i6Yl5C&1!aMMun!b|C~p1G&pdAPGH zDGzT8OZRrJb&R`n+lw>XbDQ$gwOb2I@{8|hjG3#3a?Lc`kL#I$ne5Y0O-0sKah-Ca zYMvXH8es9#n9zn`S=VlakD+1J@--Dh z)o{jdE(~`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!le1P43&#w6#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 %} +
+ +
+ + \ 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 %} +
+
+ {% csrf_token %} + {{ form.as_p }} +
+ + 注册 +
+
+ +
+{% 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 @@ + + + + + + 注册 + + + +
+
注册
+
+ {% csrf_token %} + {{ form.as_p }} +

+ +

+
+
+ + \ 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) +