From 77584735d087f54e7692b7a4bde6999f70cef2f2 Mon Sep 17 00:00:00 2001 From: lsh <1622356900@qq.com> Date: Wed, 2 Oct 2024 19:39:01 +0800 Subject: [PATCH] shangchuan --- bysms/config/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 160 bytes .../__pycache__/settings.cpython-312.pyc | Bin 0 -> 2829 bytes bysms/config/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1006 bytes bysms/config/__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 646 bytes bysms/config/asgi.py | 16 + bysms/config/settings.py | 134 ++++ bysms/config/urls.py | 24 + bysms/config/wsgi.py | 16 + bysms/db.sqlite3 | Bin 0 -> 151552 bytes bysms/manage.py | 22 + bysms/pages/ceshi.html | 76 ++ bysms/pages/firstpage.html | 141 ++++ bysms/pages/fourthpage.html | 179 +++++ bysms/pages/login.html | 63 ++ bysms/pages/secondpage.html | 144 ++++ bysms/pages/thirdpage.html | 110 +++ bysms/pages/upload.html | 33 + bysms/requirements.txt | Bin 0 -> 1312 bytes bysms/static/excel上传格式.png | Bin 0 -> 9510 bytes bysms/static/login.css | 722 ++++++++++++++++++ bysms/user/__init__.py | 0 .../user/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 158 bytes bysms/user/__pycache__/admin.cpython-312.pyc | Bin 0 -> 202 bytes bysms/user/__pycache__/apps.cpython-312.pyc | Bin 0 -> 460 bytes bysms/user/__pycache__/models.cpython-312.pyc | Bin 0 -> 1376 bytes bysms/user/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1445 bytes bysms/user/__pycache__/views.cpython-312.pyc | Bin 0 -> 12459 bytes bysms/user/admin.py | 3 + bysms/user/apps.py | 6 + bysms/user/migrations/0001_initial.py | 35 + .../0002_alter_student_student_score.py | 18 + bysms/user/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 1865 bytes ...lter_student_student_score.cpython-312.pyc | Bin 0 -> 752 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 169 bytes bysms/user/models.py | 16 + bysms/user/tests.py | 3 + bysms/user/urls.py | 19 + bysms/user/views.py | 217 ++++++ 40 files changed, 1997 insertions(+) create mode 100644 bysms/config/__init__.py create mode 100644 bysms/config/__pycache__/__init__.cpython-312.pyc create mode 100644 bysms/config/__pycache__/settings.cpython-312.pyc create mode 100644 bysms/config/__pycache__/urls.cpython-312.pyc create mode 100644 bysms/config/__pycache__/wsgi.cpython-312.pyc create mode 100644 bysms/config/asgi.py create mode 100644 bysms/config/settings.py create mode 100644 bysms/config/urls.py create mode 100644 bysms/config/wsgi.py create mode 100644 bysms/db.sqlite3 create mode 100644 bysms/manage.py create mode 100644 bysms/pages/ceshi.html create mode 100644 bysms/pages/firstpage.html create mode 100644 bysms/pages/fourthpage.html create mode 100644 bysms/pages/login.html create mode 100644 bysms/pages/secondpage.html create mode 100644 bysms/pages/thirdpage.html create mode 100644 bysms/pages/upload.html create mode 100644 bysms/requirements.txt create mode 100644 bysms/static/excel上传格式.png create mode 100644 bysms/static/login.css create mode 100644 bysms/user/__init__.py create mode 100644 bysms/user/__pycache__/__init__.cpython-312.pyc create mode 100644 bysms/user/__pycache__/admin.cpython-312.pyc create mode 100644 bysms/user/__pycache__/apps.cpython-312.pyc create mode 100644 bysms/user/__pycache__/models.cpython-312.pyc create mode 100644 bysms/user/__pycache__/urls.cpython-312.pyc create mode 100644 bysms/user/__pycache__/views.cpython-312.pyc create mode 100644 bysms/user/admin.py create mode 100644 bysms/user/apps.py create mode 100644 bysms/user/migrations/0001_initial.py create mode 100644 bysms/user/migrations/0002_alter_student_student_score.py create mode 100644 bysms/user/migrations/__init__.py create mode 100644 bysms/user/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 bysms/user/migrations/__pycache__/0002_alter_student_student_score.cpython-312.pyc create mode 100644 bysms/user/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 bysms/user/models.py create mode 100644 bysms/user/tests.py create mode 100644 bysms/user/urls.py create mode 100644 bysms/user/views.py diff --git a/bysms/config/__init__.py b/bysms/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bysms/config/__pycache__/__init__.cpython-312.pyc b/bysms/config/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3faa8edcdb78948e5b8f366936eb441999252684 GIT binary patch literal 160 zcmX@j%ge<81gvYnrGeKEC2%}D!Bjv literal 0 HcmV?d00001 diff --git a/bysms/config/__pycache__/settings.cpython-312.pyc b/bysms/config/__pycache__/settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..233017cc71d2d8fab7712de6a508cec814579aa1 GIT binary patch literal 2829 zcmb7G&2QVt6({vA>LaqO#7g3z3>IisaZSZYoNg9rT3VtVVP(l{%9|}=EJ16=5*>cX z9LlMQ9@O(*Y80q**u!EEMT#7HUTlH>0lhfLApv_aP!vILN`l1#J@t{2VnOyHq3z+D zH}C!4Z{EB&^gmN6hJxoGZ-3gxX^Q%{HyJ&Vq44%EG({a!h>|Eoqku;10VzOxa!?CO z!2pE=IP?^3yk{pdc#n@yhm)P;xOO0)rIVs4B*jozinl0bQTCgFN=sQZ zjdEZ$jn4by1%I4T=~hUZMtLcRE=uQt_;&W1j4Gt z?kQRqlMjhy;q9?N|Md!^K)aze#ctP}rC}OWgWzV@!t=Yg99zD6b63{xY$1E!K?>g8 z+x}HcFWmmBHCJeV)xLG(#@tS~JlxY38-=Ko8^CaobK6q4I6te-^rW_Hx1Gxq zO3wuww!PoM#F?2`B$yD$^XUa07L*ovT$=Q-;bfZLc@QVpCD`JWPKR(CAeH=rC`6q3 zp^vU2q~S-3g*kuss=d#NUK&7HeYfV^nhY@{#f|xk1KpTc;dBrv0NpgWlK&br{pCae z1@bfw&chs1q&EGc8*`jwHpzRcy5E_KE+m-`9W80Bb{zCjh^BUw~Ry$ClbWjS$Ah ze3!VvjYi42GDL#}>L$V(;g-}Ew34~3VhuU5B3$~=Q$;5_6bhH!s4T<9Ez54S1J|Rb zZdpOdu^TXn8OiXPLyO9oD9fs}3mUvO{PTgfhp|mbEtaK6)0LXo02L^pR796qt(41E;Q_xcxXJZ;y&-R`S4;KUvK#U!xS<_W zHQabZSY4~~4MB7>55$#<=Uc6mc(20Tc$shT9tF|O^Bax(@)|FS59;e>`3t^UfyFu$ zW~$29RyOz*K`zzH0svN41zD;?EyXr~d}ZO2nj7(?hU8|;!ZN>6ZODLDmzOI-wG2CJ zK(vy_&dm(u8z_JcG{zYZ{T=*K)o zU;Gype;uKcnLoz9zV{+=^;zQT^TbCl64#$4uD?huJWDL}V*NCgUZ;CZKSIS*z3_1+ z+e^J+V%b11{U#Sn2Vf;fWv=v+{TP)K=$BK|hcgE=hqDK>kK0e8&!=u2WforM^2bT` z4Hf<<-48}{%&r2qf` literal 0 HcmV?d00001 diff --git a/bysms/config/__pycache__/urls.cpython-312.pyc b/bysms/config/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4da7556d6d014ed157a89043518a28cfec36f9ea GIT binary patch literal 1006 zcmb7D&ui2`6rN<0-8TIN{smJIwvjbqg-TsikgnCDco2J80^4jdyPKNHgqexDf(LJk z7eUZ}LFvJ>=zrkN-g5CEQoOa4B6#vml7&SObPki3$2Z^m-uGrcFD+RJR^!XhVYi0R zH}x}J^(r{&LhuHKsE0x=)MJh6JzZ0AEv`|cXHc_eYDh=K2o2cH(A?L`v-^7a9cjJ# zq;5C-Cy=mq?%u`$ONP-X>wUZvg{koZu({GFsB6G4Tb#f{>1dVU49sMaOkR76>QY^OF&qmJ1kl zN#d?MZCA213WTe`E|eFpb^Vb~flG9(tt<%&#YNeIwC&()VTk<%M>J(zb}$}tMlqfA z{WPtTrOX0<27?qBkHV5Q z8xJchJEdLaI2>j8RAhy16{h^N+Cj`lE*Lni)KrOrw`tqf4|O4JEjRs;Mv1NGhH^Y_ zROlQ%p3el~1^$lR$Q%7W+?IYnU#6w|nLnn|zryHM+Y~JC=SKr@%IQ;bb@a+q4FcDOE<@4~A8%{d;HFue^FpJ4m zz6><#afx%V9n~~VJJwe;;}j!p^(#7iJcrErXJ?+@czNq!5g!<y)VXtR=q(y&U#@$dOVrJIN<~Eq-hupN#Ie;1qdShK=S)8rEZr3aRqTn#Qhx# z*C-5ulA)V~$0g=Q;FC_rjbj>mt_(Trbkw{%iX`F*kdP_9=(s>QQ^P|+dLf0YL;x6l zDPyr_Sw8oK=?`2M@Tn$`M;0(^*{oW9zAL%qLrnQ70w%3p5rmfUGkayTg40U@NGCgU z&d5j?Yj@Y1^-ZU>v9;A`)?3c~&D!?8jlJ{v9!vpJhAa@3Vp?<@rND7gjf?a`uEX?{ zd^4Mx=!z#T0vm=2XQ`nYedxJ6RHmgfgs;#f6ZB_Qx!Y^@wtz&~)z#}O%XSUKL&;-% z{O;+|o44cl&&MyH*xiwcgq@4AGafS@{hPay@A+m@R%6uHL1Ia{UpmJ4w^qc3$wh>X nBUJr{w8zH2@f9t6L<@(D=Hb%%XLRd(`SPdomHkq3PBr}ppEtmd literal 0 HcmV?d00001 diff --git a/bysms/config/asgi.py b/bysms/config/asgi.py new file mode 100644 index 0000000..400e9e3 --- /dev/null +++ b/bysms/config/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for config project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_asgi_application() diff --git a/bysms/config/settings.py b/bysms/config/settings.py new file mode 100644 index 0000000..b730da8 --- /dev/null +++ b/bysms/config/settings.py @@ -0,0 +1,134 @@ +""" +Django settings for config project. + +Generated by 'django-admin startproject' using Django 5.1.1. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.1/ref/settings/ +""" + +from pathlib import Path +import os + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-q4zt_!3q_l9bdtyzdaeqvf=gm)6^g+)h^h400+jugzvdeakvl5' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'user.apps.UserConfig' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'config.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [os.path.join(BASE_DIR, 'pages')], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'config.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.1/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.1/howto/static-files/ + + +# Default primary key field type +# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +# settings.py +STATIC_URL = '/static/' # 静态文件访问路径 + +STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static/')]#css问题加载这个 +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} \ No newline at end of file diff --git a/bysms/config/urls.py b/bysms/config/urls.py new file mode 100644 index 0000000..55d17bf --- /dev/null +++ b/bysms/config/urls.py @@ -0,0 +1,24 @@ +""" +URL configuration for config project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path,include + +urlpatterns = [ + # path('admin/', admin.site.urls), + path('',include('user.urls')), + ] + diff --git a/bysms/config/wsgi.py b/bysms/config/wsgi.py new file mode 100644 index 0000000..e232e56 --- /dev/null +++ b/bysms/config/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for config project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_wsgi_application() diff --git a/bysms/db.sqlite3 b/bysms/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..1daabcbb8fa75312288e6682f9f1297b6f6822dd GIT binary patch literal 151552 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 ldIP!EY9PmLU)S1GjOs1lsTCZ + +
+

这是要隐藏的内容。

+

点击按钮后,这段文字将被隐藏。

+
+ + + + --> + + + + + + Document + + + nihap +

sandw

+ + +
+
+
+ +
+
+ + +
+
+
修改用户名和密码
+
+ 当前用户名:{{name}} + +
+ +
+ +
+
+
+ +
+ \ No newline at end of file diff --git a/bysms/pages/firstpage.html b/bysms/pages/firstpage.html new file mode 100644 index 0000000..1b7a867 --- /dev/null +++ b/bysms/pages/firstpage.html @@ -0,0 +1,141 @@ + + + + + + 随机点名系统 + + + + +
随机点名系统
+ + +
+
+
天选之子
+
{{ form }}
+
+ {% if sign == 'zhongkou' %} + 触发随机事件:双倍扣分 + {% elif sign == 'lucky' %} + 触发随机事件:可以寻求帮助 + {% endif %} + 占位 +
+
+
+ + +
+
+ + 评分: + + + 到达课堂(加1分) + {% if sign == 'zhongkou' %} + 没到(扣2分)
+ {% else %} + 没到(扣1分)
+ {% endif %} + + + 重复问题(加0.5分) + {% if sign == 'zhongkou' %} + 不能重复问题(扣2分)
+ {% else %} + 不能重复问题(扣1分)
+ {% endif %} + + 回答问题得分: + + +
+
+
+ +
+
+ +
+
+ + \ No newline at end of file diff --git a/bysms/pages/fourthpage.html b/bysms/pages/fourthpage.html new file mode 100644 index 0000000..10b8447 --- /dev/null +++ b/bysms/pages/fourthpage.html @@ -0,0 +1,179 @@ + + + + + + 随机点名系统 + + + + +
随机点名系统
+ + + +
+
+
+ +
+
+ + +
+
+
修改用户名和密码
+
+ 当前用户名:{{name}} + +
+ +
+ +
+
+
+ +
+ + + + \ No newline at end of file diff --git a/bysms/pages/login.html b/bysms/pages/login.html new file mode 100644 index 0000000..3fe1e73 --- /dev/null +++ b/bysms/pages/login.html @@ -0,0 +1,63 @@ + + + + + +登陆界面 + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+ +
+
+
login
+ + + +
+
+ +
+ + + + + + +
+ + +
+ + +
+
+
+ + + \ No newline at end of file diff --git a/bysms/pages/secondpage.html b/bysms/pages/secondpage.html new file mode 100644 index 0000000..ed99a9d --- /dev/null +++ b/bysms/pages/secondpage.html @@ -0,0 +1,144 @@ + + + + + + 随机点名系统 + + + + +
随机点名系统
+ + + +
+
+
+ +
+
+ +
+
+
+ + +
+ + + + + {% for row in form %} + + + + + + + {% endfor %} + +
学号姓名专业 班级
{{ row.student_xuehao }}{{ row.student_name }}{{ row.student_major }}{{ row.student_class }}
+
+ + + \ No newline at end of file diff --git a/bysms/pages/thirdpage.html b/bysms/pages/thirdpage.html new file mode 100644 index 0000000..e648f56 --- /dev/null +++ b/bysms/pages/thirdpage.html @@ -0,0 +1,110 @@ + + + + + + 随机点名系统 + + + + +
随机点名系统
+ + + +
+ + + + + {% for row in form %} + + + + + + + {% endfor %} +
排名学号姓名积分
{{ forloop.counter }}{{ row.student_xuehao }}{{ row.student_name }}{{ row.student_score }}
+
+ + + + \ No newline at end of file diff --git a/bysms/pages/upload.html b/bysms/pages/upload.html new file mode 100644 index 0000000..bf5ed36 --- /dev/null +++ b/bysms/pages/upload.html @@ -0,0 +1,33 @@ + + + + + 上传Excel文件 + + + + + +
+
+ + + +
+

提示:请上传Excel文件(学号,姓名,班级,专业)(学号必须为数字,班级和专业可以为空)

+ +
+ + \ No newline at end of file diff --git a/bysms/requirements.txt b/bysms/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..d90180fa2b90989b2f3facb00daa6ffa3fce3a62 GIT binary patch literal 1312 zcmY+EPfx;75XARv;zz*<_3y!(@nGV~gXaoGi={?+SUqN+KoP$o!FJm)Q;`Qo~=@}wl~GM9-sE{naAh;zEjRphx(bF>YVjinSOyY zw^z%B&?>*Pi4Yt8TI(J7UjsVqoPdDN$sLD`Q&qxzF=W(YYiy^i zjeR-_`e8`AK80Tm{2)xlp8CJFmGEnM)Ohu|M^ZF;If%dV{=q>99Gu{|Qxu=0i{M5B zzAS}{MpV*I>-F?-?kZynr7e_|dyM)kuPwdr7jc%oI&^2MO!`XUwyKQ|m>^yR2f3Wk zxDrO8X$MF6IJ$7JXzfnS1`YIg<~rUK-Rrd8!N=fbWTbgL2zx6JcACVao|nB>!9u_I z!A5k-V6vUQOKHMUy1sVBWYt1h4--uY;Z>veg)*4;K?tcDHNmkF2RoJf<}+JzVrK(` zjM{zs?^SH&Mye`TxcAEGuy^4l%pkDs_!jtdFnUH#r#r#)C(hJK^-k}=4n5H^v)CxF zRcyrXbY~(f-L}xiJ$@HX;rXNb%x4`thpI!b98DKu2;^33aye7jhjJ3b-#uZ*YsDwt zVRA9HKJE_lX{DhWJQ$FXItorPEf(##{}q)z3p`V_Ze|+G&5j7vOXhpMvqU@ e$hPs%vimcE*laZJUBSX{KeuAxC`^bw3zT0?3%id1 literal 0 HcmV?d00001 diff --git a/bysms/static/excel上传格式.png b/bysms/static/excel上传格式.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a92896464a08134134c045412816f8282891d6 GIT binary patch literal 9510 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%0D9Oj@4Bt{m7=Yg=UC>8l*RaV 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 R>)$2>MOihO8fo*8{{w<3_ly7l literal 0 HcmV?d00001 diff --git a/bysms/static/login.css b/bysms/static/login.css new file mode 100644 index 0000000..98fb0d8 --- /dev/null +++ b/bysms/static/login.css @@ -0,0 +1,722 @@ +@font-face { + font-family: 'icomoon'; + src: url('fonts/icomoon.eot?1tb2pa'); + src: url('fonts/icomoon.eot?1tb2pa#iefix') format('embedded-opentype'), + url('fonts/icomoon.ttf?1tb2pa') format('truetype'), + url('fonts/icomoon.woff?1tb2pa') format('woff'), + url('fonts/icomoon.svg?1tb2pa#icomoon') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +body { + /* 初始化 取消内外边距 */ + margin: 0; + padding: 0; + overflow: hidden; + zoom: 85%; +} + +button { + /* 去除按钮自带样式 */ + border: none !important; + outline: none !important; +} + + +#container { + /* 100%窗口高度 */ + height: 100vh; +} + +.bg { + /* 绝对定位 */ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.sun { + margin: 0; + padding: 0; + /* 绝对定位 水平垂直居中 */ + position: absolute; + top: 500px; + left: 48%; + transform: translate(-50%, -50%); + width: 600px; + height: 600px; + background: orange; + border-radius: 50%; +} + +.moon { + margin: 0; + padding: 0; + position: absolute; + top: 54%; + left: 48%; + /* 计算得出月亮的位置 */ + transform: translate(calc(-50% + -160px), calc(-50% + -180px)); + width: 600px; + height: 600px; + /* 通过阴影绘制月亮 */ + box-shadow: 160px 180px 0 cyan; + border-radius: 50%; +} + +.sea { + position: absolute; + bottom: 0; + width: 100%; + height: 35%; + /* 背景模糊制造大海的感觉 */ + backdrop-filter: blur(100px); + -webkit-backdrop-filter: blur(100px); + z-index: 100; +} + +.sun, +.moon, +.sun-box, +.moon-box, +.bg { + /* 添加动画过渡 */ + transition: all 1s ease-in-out; +} + +.sun-box, +.moon-box { + /* 相对定位 */ + position: relative; + /* 溢出隐藏 */ + /* overflow: hidden; */ +} + +.light .bg { + background: #ffeea2; +} + +/* 夜晚 */ +.dark .sun-box { + height: 0; +} + +.dark .moon-box { + height: 100%; +} + +.dark .bg { + background: #040720; +} + +/* ................................................. */ +/* ....................按钮模块..................... */ +/* ...... ..........................................*/ + +.container2 .c2 { + /* 相对定位 */ + /* position: relative; */ + transition: 1s; + z-index: 1; + float: left; + margin: 5px 0; + cursor: pointer; + position: relative; + display: block; + width: 80px; + height: 40px; + background-color: #222; + border-radius: 40px; + /* 内阴影 */ + box-shadow: inset 0 2px 15px rgba(0, 0, 0, 0.2), + inset 0 2px 2px rgba(0, 0, 0, 0.2), + inset 0 -1px 1px rgba(0, 0, 0, 0.2); +} + +/* 滑块 */ +.container2 .indicator { + /* 绝对定位 */ + position: absolute; + z-index: 2; + left: 0px; + top: 5px; + width: 40px; + height: 40px; + /* 渐变背景 */ + background: linear-gradient(to bottom, #444, #222); + border-radius: 50%; + /* 阴影 */ + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5), + inset 0 1px 1px rgba(255, 255, 255, 0.1); + /* 缩小 */ + transform: scale(0.9); + /* 动画过渡 */ + transition: 1s; + /* 鼠标事件取消 */ + pointer-events: none; +} + +/* 滑块中心发光点 */ +.container2 .indicator::before { + content: ""; + width: 5px; + height: 5px; + /* 绝对定位 居中 */ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + background-color: #f00; + border-radius: 50%; + /* 阴影制造发光效果 */ + box-shadow: 0 0 2px #f00, + 0 0 5px #f00, + 0 0 10px #f00, + 0 0 15px #f00, + 0 0 20px #f00, + 0 0 25px #f00, + 0 0 30px #f00, + 0 0 35px #f00; + transition: 0.5s; +} + +/* 勾选复选框后滑块的变化 */ +.container2 input:checked~.indicator { + left: 40px; +} + +.container2 input:checked~.indicator::before { + background-color: #0f0; + box-shadow: 0 0 2px #0f0, + 0 0 5px #0f0, + 0 0 10px #0f0, + 0 0 15px #0f0, + 0 0 20px #0f0, + 0 0 25px #0f0, + 0 0 30px #0f0, + 0 0 35px #0f0; +} + +.container2 input:checked~.dark .sun-box { + height: 100% !important; +} + +.container2 input:checked~.dark .sun { + top: 62%; +} + +.container2 input:checked~.dark .moon-box { + height: 0 !important; + transform-origin: -10px; + transform: rotate(-90deg); +} + +.container2 input:checked~.dark .bg { + background: #ffeea2; +} + +.container2 input:checked~label { + background-color: #ffeea2; +} + +.container2 input:checked~.indicator { + background: #ffeea2; + box-shadow: 0 0 .5; +} + +/* ................................................. */ +/* ....................登录模块...................... */ +/* ...... ..........................................*/ + +.form-box { + /* transform: scale(0.7, 0.7); */ + /* zoom: 90%; */ + position: fixed; + top: 28%; + left: 36%; + width: 400px; + height: 550px; + z-index: 101; + background-color: rgba(255, 255, 255, 0.1); + /* 背景模糊 */ + backdrop-filter: blur(20px); + border-top: 1px solid rgba(255, 255, 255, 0.5); + border-left: 1px solid rgba(255, 255, 255, 0.5); + border-radius: 15px; + display: flex; + flex-direction: column; + align-items: center; + /* 阴影 */ + box-shadow: 0px 20px 50px rgba(0, 0, 0, 0.5); +} + +.form-box .tit { + cursor: default; + color: #fff; + font-size: 45px; + font-weight: bold; + /* 大写 */ + text-transform: uppercase; + /* 字间距 */ + letter-spacing: 10px; + text-indent: 10px; + margin: 90px auto 50px auto; +} + +.form-box input { + width: 350px; + height: 35px; + font-size: 17px; + background: transparent; + text-indent: 8px; + border: none; + border-bottom: 1px solid rgba(255, 255, 255, 0.8); + margin: 15px auto; + outline: none; + color: #fff; +} + +.form-box input::placeholder { + color: rgba(255, 255, 255, 0.8); +} + +.form-box button { + font-size: 20px; + width: 350px; + height: 45px; + margin: 35px auto 40px auto; + border: none; + background: #00addd; + color: #fff; + letter-spacing: 20px; + text-indent: 20px; + border-radius: 8px; + font-weight: bold; + cursor: pointer; +} + +.form-box button:hover { + transition: .5s; + background: #0098d4; + letter-spacing: 50px; + text-indent: 45px; +} + +.form-box span { + font-size: 14px; + color: #fff; +} + +.form-box a { + color: #00addd; + text-decoration: none; +} + +/* .............................................. */ +/* ....................注册特效................... */ +/* ...............................................*/ +.search, +.close { + font-family: 'icomoon'; + white-space: nowrap; + font-style: normal; + text-align: center; +} + +.search:hover { + text-decoration: underline; +} + +.close { + transition: .3s; +} + +.close:hover { + color: #f55858; +} + +.search { + font-size: 14px; + color: #33b7eb; +} + +/* 注册按钮 */ +.search-btn { + pointer-events: all; + z-index: 301; + font-style: normal; + position: absolute; + top: 79.2%; + left: 59%; + width: 50px; + height: 50px; + line-height: 60px; + text-align: center; + cursor: pointer; +} + + +/* 关闭按钮 */ +.close-btn { + background: none !important; + pointer-events: all; + position: absolute; + top: -238px; + right: -600px; + z-index: 302; + font-size: 25px; + color: #fff; + cursor: pointer; + display: none; +} + +.container3 { + /* zoom: 80%; */ + z-index: 301; + position: absolute; + background: linear-gradient(200deg, #e7f0fd, #accbee); + top: -97%; + left: -180%; + width: 2000px; + height: 2000px; + /* background-color: darkgrey; */ + /* 渐变背景 */ + /* background: linear-gradient(200deg, #6e86ee, #453c90); */ + /* 将元素剪切为一个圆形 【25px表示圆的半径】 【50% 50%表示圆心位置】 */ + clip-path: circle(40px at 50% 50%); + /* clip-path: inset(975px 975px round 15px); */ + /* 设置过渡 */ + transition: .9s; + opacity: 0; +} + +.search-box { + z-index: 303; + /* 默认宽度为0(隐藏) */ + position: fixed; + top: 0%; + left: 0%; + width: 0; + height: 50px; + border-bottom: 3px solid #fff; + transition: 0.3s; +} + +.search-box input { + width: 100%; + height: 50px; + background: none; + border: none; + outline: none; + color: #fff; + font-size: 22px; + font-weight: 500; + /* 请输入前的缩进 */ + text-indent: 8px; +} + +.search-box input::placeholder { + color: rgba(255, 255, 255, 0.7); +} + +.search-box .fa { + width: 50px; + height: 50px; + line-height: 50px; + color: #fff; + font-size: 22px; + text-align: center; + cursor: pointer; +} + +#search_btn:checked~.search-btn { + display: none; +} + +#search_btn:checked~.container3 .shade { + pointer-events: all; + position: fixed; + top: 28%; + left: 36%; + width: 400px; + height: 550px; + z-index: 120; +} + +#search_btn:checked~.close-btn { + display: block; +} + +#search_btn:checked~.container3 { + opacity: 1; + clip-path: circle(100%); +} + +#search_btn:checked~.container3 .search-box { + width: 400px; +} + +.sign { + pointer-events: none; + position: fixed; + top: 28%; + left: 37%; + width: 400px; + height: 550px; + z-index: 300; + /* 100%窗口高度 */ + /* 弹性布局 水平+垂直居中 */ + /* display: flex; + justify-content: center; + align-items: center; */ +} + +/* ................................................. */ +/* ....................注册界面...................... */ +/* ...... ..........................................*/ + +.signin { + pointer-events: all; + position: fixed; + top: 20%; + left: 37%; + z-index: 330; + font-size: 96px; + color: #393838; + font-weight: bold; + letter-spacing: 5px; + cursor: pointer; +} + +.signin span { + /* 动画过渡 */ + transition: 0.5s; +} + +.signin:hover span { + margin-right: 10px; +} + +.signin:hover span::after { + font-size: 20px; + content: " us"; +} + +.signin:hover span { + color: #fff; + /* 文字阴影 */ + text-shadow: 0 0 10px #fff, + 0 0 20px #fff, + 0 0 40px #fff, + 0 0 80px #fff, + 0 0 120px #fff, + 0 0 160px #fff; +} + + +.s1 { + pointer-events: all; + position: fixed; + float: left; + top: 45%; + left: 36%; +} + +.s2 { + top: 52%; +} + +.s3 { + width: 250px !important; + top: 59%; +} + +.s3 button { + position: fixed; + pointer-events: all !important; + font-style: normal; + top: 56.5%; + left: 51%; + font-size: 15px; + width: 130px; + height: 45px; + margin: 35px auto 40px auto; + border: none; + background-color: #d5e4f6; + color: #71c9eb; + /* letter-spacing: 20px; + text-indent: 20px; */ + border-radius: 8px; + font-weight: bold; + cursor: pointer; + transition: .5s; +} + +.s3 .verification-code:hover { + background-color: #5abce6; + color: #d5e4f6; +} + +.sign-btn-box { + overflow: hidden; + color: #00aeff; + border: 2px solid #00aeff; +} + +.s3 .sign-btn { + font-size: 20px; + position: fixed; + top: 65%; + left: 36%; + width: 400px; + background: #00addd; + color: #fff; + letter-spacing: 20px; + text-indent: 20px; + border-radius: 8px; + font-weight: bold; + cursor: pointer; +} + +.s3 .sign-btn:hover { + transition: .5s; + background: #0098d4; + letter-spacing: 50px; + text-indent: 45px; +} + +/* 流星特效 */ + +.container4 span { + position: absolute; + top: 50%; + left: 50%; + width: 4px; + height: 4px; + background-color: #fff; + border-radius: 50%; + /* 发光效果 */ + box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.1), + 0 0 0 8px rgba(255, 255, 255, 0.1), + 0 0 20px rgba(255, 255, 255, 1); + /* 执行动画 */ + animation: animate 3s linear infinite; +} + +/* 拖尾效果 */ +.container4 span::before { + content: ""; + position: absolute; + top: 50%; + transform: translateY(-50%); + width: 300px; + height: 3px; + background: linear-gradient(90deg, #fff, transparent); +} + +/* 分别为每一个流星设置位置、动画延迟时间、动画时长 */ +.container4 span:nth-child(1) { + top: 0; + right: 0; + /* initial关键字用于设置CSS属性为它的默认值 */ + /* 这个东西可以用来强制覆盖前面设置的属性 */ + /* left的初始值为auto,所以就相当于left:auto */ + left: initial; + /* 动画延迟时间 */ + animation-delay: 0s; + /* 动画时长 */ + animation-duration: 1s; +} + +.container4 span:nth-child(2) { + top: 0; + right: 80px; + left: initial; + animation-delay: 0.2s; + animation-duration: 3s; +} + +.container4 span:nth-child(3) { + top: 80px; + right: 0; + left: initial; + animation-delay: 0.4s; + animation-duration: 2s; +} + +.container4 span:nth-child(4) { + top: 0; + right: 180px; + left: initial; + animation-delay: 0.6s; + animation-duration: 1.5s; +} + +.container4 span:nth-child(5) { + top: 0; + right: 400px; + left: initial; + animation-delay: 0.8s; + animation-duration: 2.5s; +} + +.container4 span:nth-child(6) { + top: 0; + right: 600px; + left: initial; + animation-delay: 1s; + animation-duration: 3s; +} + +.container4 span:nth-child(7) { + top: 300px; + right: 0; + left: initial; + animation-delay: 1.2s; + animation-duration: 1.75s; +} + +.container4 span:nth-child(8) { + top: 0; + right: 700px; + left: initial; + animation-delay: 1.4s; + animation-duration: 1.25s; +} + +.container4 span:nth-child(9) { + top: 0; + right: 1000px; + left: initial; + animation-delay: 0.75s; + animation-duration: 2.25s; +} + +.container4 span:nth-child(10) { + top: 0; + right: 450px; + left: initial; + animation-delay: 2.75s; + animation-duration: 2.25s; +} + +/* 流星坠落动画 */ +@keyframes animate { + 0% { + transform: rotate(315deg) translateX(0); + opacity: 1; + } + + 90% { + opacity: 1; + } + + 100% { + transform: rotate(315deg) translateX(-1000px); + opacity: 0; + } +} \ No newline at end of file diff --git a/bysms/user/__init__.py b/bysms/user/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bysms/user/__pycache__/__init__.cpython-312.pyc b/bysms/user/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b39bca6f45cf2e2b69191bdd8bc34c6a0f63360 GIT binary patch literal 158 zcmX@j%ge<81Y(=NrGemtztrpQ;UjY z3@t3pOk-S9i?d7e3u2z{p8RzE&gXlkJzvoslT=xpTO3mgR2CB-pP83g5+AQuQ2C3) eCO1E&G$+-rh!toMBM=vZ7$2D#85xV1fh+*9EGicO literal 0 HcmV?d00001 diff --git a/bysms/user/__pycache__/admin.cpython-312.pyc b/bysms/user/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6326ac04495e0aa148e2dbc483bd4e53e7c5cb53 GIT binary patch literal 202 zcmX@j%ge<81Y(=Nr8xoV#~=<2FhLog1%Qm{3@HpLj5!Rsj8Tk?43$ip%r8OGnvAzt z6H{_C^ZYcKZtm}#sl@w(r6)^)9tYr8MQuoyyNH|-?gche36~`D_Selu} zxTF?mm*f}3Jl{R}>H3||_e^`fqB|z3vN*RmrWB|w25hcgLFF$Fo80`A(wtPgA`YM_ Wj6hrrVtim`WMsU@pismHvS_lt1aUMOZ*e*n6gcPSrDdikL!==jBb4)51jv}qkjfCnn8Fanl)@Or zoWc~vQpv2za*HdpIJF3(w@Nl8D={xUUoRy|FE>9WHK$n5DKp)%v?SjxGc_mW7E38m zsh=k6Esps3yu{qp`1o5~@$o>Fr8yurPkek~X<`mkMkpmUEwMDGBt8+SKRyj&07z~n z!)K7QzM26EXR8>H^~EuU7M5nFF)pda*(Lb}G0%5Te!70=^F7m^ujr0Rsw~bejsaO6 zlUPtttXEK31PUuK!2)Cy^8$$$h8vO=7g)q@a0@oN6oEv*@_w4kx45C60%&jG$OQ#lF(}YJFf%eT-epky!p6iXG(qw!1CRpi0ss{Zcsc+8 literal 0 HcmV?d00001 diff --git a/bysms/user/__pycache__/models.cpython-312.pyc b/bysms/user/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3dc515c85929e452903f0c0db8f4acc568b82f07 GIT binary patch literal 1376 zcma)6O-$546rO3jZFgB%%{Imu2?u_(9uQ(AsKkVT{3xP{c-d^y6lVDCwlHm#y@BBX z@c@ZYt{&I0i5xL{z>_APHrWI+i6>(SHxs~vUYu#!k3Ffh~+L_%I%VL!!JDsnO| zFRj3Rl$?#|GL?K6lkLyUH=qkNmNBOd3)>^!D3yJCY|6(vBnpf6>k3s3!!|S6Flfv$ zSl7PA^|)b7`KA>{2p&YYbb6sysiBQFYRE-KP#gZ@><3VXu{mj+^Pn4B)1l zTW_>nPj_N>!gD6mTkl_dfBSCh!>g^_^YmcW&A4fvCmoKeaWYHzfdzsq?qw$Cz-FRm z{>et7rjV$~U0X%P#I2d0Bfetd>TC}=Q`&lD#!O@%ssh%1c4UpQg(#%BgP>&S>>ij=YGEx|=F8m$ItL46{vQa%o71#3-wmrg` z#;B_xJZ$=wM`UIX=wiSWD%rke(a4}>+7rPMQDF?}A{9J`s-9yE2gHavw!wIhJ>0J+ zNR%ZY{CbiKE&>+CduSI+g{$RE{Y>#)=uSaMUjhps} z(})JcK}PQL7bd(iLH9@h=$G0SUgq2663f8f2lomSKST)OS8#Dx6=2hR%VOI?+b&@0 UZcK&`;r#HTwP5W5t_S7+0IqcRq*1O$eUH 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 literal 0 HcmV?d00001 diff --git a/bysms/user/admin.py b/bysms/user/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/bysms/user/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/bysms/user/apps.py b/bysms/user/apps.py new file mode 100644 index 0000000..36cce4c --- /dev/null +++ b/bysms/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/bysms/user/migrations/0001_initial.py b/bysms/user/migrations/0001_initial.py new file mode 100644 index 0000000..748e8ee --- /dev/null +++ b/bysms/user/migrations/0001_initial.py @@ -0,0 +1,35 @@ +# Generated by Django 5.1.1 on 2024-09-30 11:58 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='user', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('username', models.CharField(max_length=200, unique=True)), + ('password', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='student', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('student_xuehao', models.IntegerField(default=0)), + ('student_name', models.CharField(blank=True, max_length=200, null=True)), + ('student_major', models.CharField(blank=True, max_length=200, null=True)), + ('student_class', models.CharField(blank=True, max_length=200, null=True)), + ('student_score', models.IntegerField(default=0)), + ('teather', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='user.user')), + ], + ), + ] diff --git a/bysms/user/migrations/0002_alter_student_student_score.py b/bysms/user/migrations/0002_alter_student_student_score.py new file mode 100644 index 0000000..fc21c35 --- /dev/null +++ b/bysms/user/migrations/0002_alter_student_student_score.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.1 on 2024-10-01 13:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('user', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='student', + name='student_score', + field=models.FloatField(default=0), + ), + ] diff --git a/bysms/user/migrations/__init__.py b/bysms/user/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bysms/user/migrations/__pycache__/0001_initial.cpython-312.pyc b/bysms/user/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91964ed1bc639096caa9071d9e48aa72533d29f1 GIT binary patch literal 1865 zcmb7FPiWg#7?)&OvK%Lo^UrJMB()R9oZ%1$Y`n3Rxz5t2|DZJ68e^s@c`uF}S#l(~ ztIG}@^f1_^Y_Rp1<3`}>0wUSEFuas&7&>QBP-7UsQmxP*@%C_n*Pr3y4Y8I`H{3cdE>Xbu zfC4P^l|5@+z3#E=>ktKholf|l5#~mMLBWbrGGt59H4||a9YEDw?`n9*V3#@koFU$! z=efWDy5K8O1(u&SpaBc~4Q`k1NH-Y3d+4DP&;dXhQh)jJSrywR)4226SFrmCpFhp5P9-8f>` zRUE?+Yp&}CM7)J_-Gs(Hfuu13R={FK#6p*}ZB?$#334g{l6=FIh zN!vA9C81!BS2V@KZ-hbsR-uN|Sy!NGkhy^R^4_CfCj-DBUnL4%R7yGg+)LyEkdWV$ zjSd-F)+|_pT`stU!&FMzRa^rOlx3}?BL=LYfEOPgD~QkMZsl`}AEBULh22r}6LpAv zP%oD8mVdAKF;2@Yrn2v5(#1t+ZdrP@c<|)AzkYsv@XPlHKYmkOtD6;&8y=4 z{CrC4CN)>B8yvRgZ9FDS36FvY)YE~X` z`|yq%nROzwO?Gd_E=aa!v?8W0TKnNQ?TO^0Puz*5Gm&f#|F+VaxMGV}|9jt>_`nt~ zw0U-9;JKd{f^G3%UdCVNC1y`&b~5gC#+lAEw_DRWTfDd*p0Z=9oiR6-a$+eQ*|2@< z(^l-ZEw1i|&)e~ZowwZhf)ih8j_gg_E4N$mRa-2)PLw8EX(yg;%B}c^wwT)wkK57Y zqa`<*bfU>7_p9(&aI=@4>}5B5)5+d+v#U;a)&5LrMa#Ch)gBCx9Q$yN!=ppoS67Tw z@5K`wI@hWG99Wy{{72?`EnvKZVMzE#?zNoPWu21E6Dyvn1x&pRyx(cy3q~5VWT2Z< icx(G;nm*(xI`#+k_H!;ua}R^AIOB*jFDT4-2L1-Tp4m5y0KO_R zJB2A2uS;+M6etQILN1ClS3{t|eW2PdP@SO`o+ZuiBYlEhy=ypy?}|8@u%n=v`dN^~ zT;M37EaW@$9Dw4KjGswx01RA2!PO{gB3IXd8LfQae^Wq?LDd^>o%!Fd7&VRyM^c(P z$9OiBtY&tLjw!51vw7rjMu)Rhlaz7!$CPc<{LMCyEkQW_4RI!Rt)@HHnwG%L& zs_hATBg|O3sj8$#?$`_yKg%7$PTFj`%6Bl9uWx_Cv{&XzUoN+YMqFmXs)%psru;LD8TPXvkM~( z*5#3|oy9L7j%=_ly|(-2a?e~IEUgR{R|b{p{*`{E+N)F#H@;MACq=`uM>?+HR}a#q zS-maC5EgCuaWkpW?Oc8?dD8Km3d>{9OZ3aUJ=x)UdO=e4yZoXwBOM|169aNia0%gk PyT7p7TUb2>N%HJJAfLfR literal 0 HcmV?d00001 diff --git a/bysms/user/migrations/__pycache__/__init__.cpython-312.pyc b/bysms/user/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..adc0cf1c9d75248f9bcca75760d3f61a8995ee76 GIT binary patch literal 169 zcmX@j%ge<81WUeuPXp19K?FMZ%mNgd&QQsq$>_I|p@<2{`wUX^)fGrMTg8MHrxq2* z7+P4GnZ~%J7H5~_7sNc@J^AVSozM47d%mJOCaJPGw>YL0s4ONoGrcIWBr`v+I3_+m pGcU6wK3=b&@)w6qZhlH>PO4oIE6_|vAT9 + daoda=request.POST.get('daoda','') + score1=request.POST.get('score1','') + score2=request.POST.get('score2','') + if daoda=='1':#到课堂加1分 + STudent.student_score+=1 + elif daoda=='2':#没到扣1分 + STudent.student_score-=1 + elif daoda=='22':#没到扣2分(双倍扣分) + STudent.student_score-=2 + #重复问题 + if score1=='1':#重复问题加0.5分 + STudent.student_score+=0.5 + elif score1=='2':#重复不了问题扣1分 + STudent.student_score-=1 + elif score1=='22':#重复不了问题扣2分(双倍扣分) + STudent.student_score-=2 + #回答问题 + STudent.student_score+=float(score2) + print(STudent.student_score) + #写入数据库 + STudent.save() + return render(request, 'firstpage.html') + else: + return render(request, 'login.html') +# 第二页 +def secondpage(request): + teather=request.session.get("info")#获取用户信息 + if teather:#判断是否登录 + User=user.objects.filter(username=teather).first()#获取用户 + form=student.objects.filter(teather_id=User.id) + return render(request, 'secondpage.html',{'form':form})#返回学生数据 + else: + return render(request, 'login.html') + +# 第三页 +def thirdpage(request): + teather=request.session.get("info")#获取用户session信息 + if teather: + User=user.objects.filter(username=teather).first()#获取当前用户的id + + form=student.objects.filter(teather_id=User.id).order_by('-student_score') + + return render(request, 'thirdpage.html',{"form":form}) + else: + return render(request, 'login.html') + +#上传Excel文件 +def upload_excel(request): + if request.session.get("info"): + return render(request, 'upload.html') + else: + return render(request, 'login.html') +#接收文件 +def upload_file(request): + teather=request.session.get("info")#获取session中的用户名 + if teather: + User=user.objects.filter(username=teather).first()#获取用户 + if request.method == 'POST': + excel_file = request.FILES.get('file')#获取excel表格文件 + df=pd.read_excel(excel_file)#读取excel表格 + for index, row in df.iterrows(): + if student.objects.filter(student_xuehao=row['学号'],teather_id=User.id).exists():#判断是否已经存在当前老师的学生表中 + continue + student.objects.create(student_xuehao=row['学号'],student_name=row['姓名'],student_major=row['专业'],student_class=row['班级'],teather_id=User.id)#写入学生表 + form=student.objects.filter(teather_id=User.id)#返回当前老师的学生表 + return render(request, 'secondpage.html',{'form':form}) + else: + return render(request, 'login.html') + + +#删除表格 +def delete_excel(request): + teather=request.session.get("info")#获取session中的用户名 + if teather: + User=user.objects.filter(username=teather).first()#获取用户 + print("删除当前老师的所有学生") + student.objects.filter(teather_id=User.id).delete() + return render(request, 'secondpage.html') + else: + return render(request, 'login.html') + + +#第四页 +def fourthpage(request): + teather=request.session.get("info")#获取当前用户 + if teather:#判断是否登录 + User=user.objects.filter(username=teather).first()#获取当前用户的id + return render(request, 'fourthpage.html',{'name':User.username}) + else: + return render(request, 'login.html') + +#账号和密码修改 +def xiugai(request): + teather=request.session.get("info")#获取当前用户名 + if teather:#判断是否登录 + User=user.objects.filter(username=teather).first()#获取当前用户 + if request.method == 'POST': + username=request.POST.get('username','') + password=request.POST.get('password','') + print(username,password) + if username=='' and password=='': + return render(request, 'fourthpage.html',{'name':User.username}) + else: + if username!='': + User.username=username + if password!='': + User.password=password + User.save() + return render(request, 'login.html') + else: + return render(request, 'login.html') + +#账户注销 +def zhuxiao(request): + teather=request.session.get("info")#获取当前用户名 + if teather:#判断是否登录 + User=user.objects.filter(username=teather).first()#获取当前用户 + if request.method == 'POST': + User.delete() + return render(request, 'login.html') + else: + return render(request, 'login.html') \ No newline at end of file