From 28ea51bd9866096961e858ee16d8509812e350ed Mon Sep 17 00:00:00 2001 From: Xiaoxianyue <2310219843@qq.com> Date: Mon, 3 Jun 2024 19:51:12 +0800 Subject: [PATCH] Commit message describing the changes --- .DS_Store | Bin 6148 -> 0 bytes .idea/MQTT.iml | 24 +++- .idea/dataSources.xml | 12 ++ .idea/inspectionProfiles/Project_Default.xml | 70 ---------- .idea/misc.xml | 5 +- .idea/vcs.xml | 6 - ChatRoomPlan.emmx | Bin 47659 -> 0 bytes MQTT/__init__.py | 0 MQTT/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 117 bytes MQTT/__pycache__/settings.cpython-310.pyc | Bin 0 -> 2251 bytes MQTT/__pycache__/urls.cpython-310.pyc | Bin 0 -> 961 bytes MQTT/__pycache__/wsgi.cpython-310.pyc | Bin 0 -> 514 bytes MQTT/asgi.py | 16 +++ MQTT/settings.py | 124 +++++++++++++++++ MQTT/urls.py | 24 ++++ MQTT/wsgi.py | 16 +++ db.sqlite3 | Bin 0 -> 131072 bytes manage.py | 22 +++ project/.DS_Store | Bin 6148 -> 0 bytes project/client/Client.py | 63 --------- .../config/__pycache__/config.cpython-311.pyc | Bin 394 -> 0 bytes project/config/config.py | 16 --- project/mysql.py | 131 ------------------ project/server/Server.py | 60 -------- project/test.py | 30 ---- signup/__init__.py | 0 signup/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 119 bytes signup/__pycache__/urls.cpython-310.pyc | Bin 0 -> 305 bytes signup/__pycache__/views.cpython-310.pyc | Bin 0 -> 1050 bytes signup/admin.py | 3 + signup/apps.py | 6 + signup/migrations/__init__.py | 0 signup/models.py | 6 + signup/tests.py | 3 + signup/urls.py | 7 + signup/views.py | 34 +++++ templates/login.html | 6 + templates/register.html | 6 + 38 files changed, 312 insertions(+), 378 deletions(-) delete mode 100644 .DS_Store create mode 100644 .idea/dataSources.xml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/vcs.xml delete mode 100644 ChatRoomPlan.emmx create mode 100644 MQTT/__init__.py create mode 100644 MQTT/__pycache__/__init__.cpython-310.pyc create mode 100644 MQTT/__pycache__/settings.cpython-310.pyc create mode 100644 MQTT/__pycache__/urls.cpython-310.pyc create mode 100644 MQTT/__pycache__/wsgi.cpython-310.pyc create mode 100644 MQTT/asgi.py create mode 100644 MQTT/settings.py create mode 100644 MQTT/urls.py create mode 100644 MQTT/wsgi.py create mode 100644 db.sqlite3 create mode 100644 manage.py delete mode 100644 project/.DS_Store delete mode 100644 project/client/Client.py delete mode 100644 project/config/__pycache__/config.cpython-311.pyc delete mode 100644 project/config/config.py delete mode 100644 project/mysql.py delete mode 100644 project/server/Server.py delete mode 100644 project/test.py create mode 100644 signup/__init__.py create mode 100644 signup/__pycache__/__init__.cpython-310.pyc create mode 100644 signup/__pycache__/urls.cpython-310.pyc create mode 100644 signup/__pycache__/views.cpython-310.pyc create mode 100644 signup/admin.py create mode 100644 signup/apps.py create mode 100644 signup/migrations/__init__.py create mode 100644 signup/models.py create mode 100644 signup/tests.py create mode 100644 signup/urls.py create mode 100644 signup/views.py create mode 100644 templates/login.html create mode 100644 templates/register.html diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 400a01b644cc357c9db75eac7c0c55ce01275d4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%Z}496uq7)G+~641t8c(Vh2O%i^l+qOvx-*AfyR`1%pb{RGokuM{P6=*N5`+d3=*mVv*G0r~D$DW@?BdP^(suZR)Bw!rp)4^EV*FTa)@&n9`y zRrZ%S=jo)V*T1o??aI0HRj2CgIIp8)F^h^`F`aaJ<5#lxTnHX7+r9WjI+%66OOHiX z^wMlFRt0G?K+4g}G)u&+Bc@q0QMHi{IIiP%y({y1eb;X_T8mwOzSl&%-MYJ2xX$J4 zw;vvM-|PZMLb@u|UkA2z3qhHE2!#)vmpMnu=jKhA*sEkT?ejn-NQECZH-9}LL-!G}r= z43-+z)&Zlg0Kf{|O3;>f30dPC3=EbU5rHsW3e=^{Trrp~hu=4Ofx%LvE+=L#AI!|m z%ngO9*)hJa(uoBct+fnT22L}ut-GE){||nC|36)1dzJyqz< + + + + + + - + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..a3481b0 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + sqlite.xerial + true + org.sqlite.JDBC + jdbc:sqlite:D:\MQTT\db.sqlite3 + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 8921944..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index b89f1da..73a3578 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ - + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ChatRoomPlan.emmx b/ChatRoomPlan.emmx deleted file mode 100644 index 24c7c087ef6aee5831e62851f440c856ed5bc38b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47659 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%0DC!^zhOCqwJ>G&w+7d7LnI_5h>_oh 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 diff --git a/MQTT/__init__.py b/MQTT/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/MQTT/__pycache__/__init__.cpython-310.pyc b/MQTT/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2073afc59b7362b7f277f2a61f9985d14c95a596 GIT binary patch literal 117 zcmd1j<>g`kg2Ok%(?IlN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!H7i&czoU`Pmr hh>y?A%PfhH*DI*J#bJ}1pHiBWY6sF$%mgG@7yu)e6^sA? literal 0 HcmV?d00001 diff --git a/MQTT/__pycache__/settings.cpython-310.pyc b/MQTT/__pycache__/settings.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..175ab407cd84cbc6c06c4dea48758afdde45657d GIT binary patch literal 2251 zcmb7FTXWk)6qXeE+PF=V^g;tODt&0(61km1pdBbxEG04ZjYv*F!=O>TYk6H=9PK)3 z^vd7p1N4m%4Kjm_nMDg`4vA*o;mm@=q0AfJ zEW$Gj&r2w0E}}fnqQV;I@JK|7=F%IU@M!V1=^Vq`N3}ShtZ!e2FqUWE0D~(ue|tG(r4C zekgB%_Z9$pL5L;d1GZ-~68IAQS)V{O;^L1WI4<@X8`7th3JSVZ9>jS8@quQqVhFjqM`{gh?nJ+3pC_{}U_3y_rCN!2WV&J{H?H z>qnat7Kl%AcNF4vhdlC~2R=I<48FHF4vz-wo_iE*4DQ|O_rvhE*erv z?^XGWCtahQjaJ7nayRf#1R)n6+aZ?IbrN&b#)(m2&cAJ2nL!pk%M`dBvORX!gC zcG?Skxtc!y!<2?SxeCJ`!N)VEpU&lC19`J~DDV!vk#1UuGmi6%m{K+C+!)h05N|?=`nc}x-_axAQ<+BF0`3^0KV8q(>9RRwBwA4 zn#P5xC5@NUGI+%-=#?%c7lgDdM)&3s&s)g|AB>#n{sk;Ud|3eI81eAG0tr&)fZY*jYYM#tH*hz-L}$MuGKbbt)?DbONl$C4w3EQ5U5V~ zG0q{}vqvsFEo^jf#v?s+3B!-0A_yn*vJhvr=60>A#bQ%wXyGMj?`UT(>$G@=Hl@cw zh%7il2uj1r9g0JRB|ST0SSKEF?W8C6#uh;sJ-aAUgZRW7d3EeNtbgYJNiGI8eqQ(O^+^q0+N{sk^g0;m80 literal 0 HcmV?d00001 diff --git a/MQTT/__pycache__/urls.cpython-310.pyc b/MQTT/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a967a8eb7db362d319eab18d3d21ffae05d2cf4 GIT binary patch literal 961 zcmb7D-HOyO7)?8!pY6=bUibjH>lDTo7q5znqAt6jf;u7;p_^$kGaZ_wB&oXN4UFP#nyf}nwh^yB1w=bR++^wdW%zW#W(yzC+L&HfyZKKwj_Puq#26j6t| zrNiCSb?mxV_PCdNyr1?R#60RTcQe=wcP^~^tWO6!XXmcmbVP@5P&gu=U4;C%ub<;w zie<5?6)}YrcqtWr@oGNDm698lo5=U)Ylg3DRaV3pri8x6WuXmLvNlX(pwQSz{GnhU zb%ZZqKbMN(LI4%tlU5}onqkdY;$s+VV=A4*F_pQF=!S@uJhaOtkC}+?Mdz`RRgvr1 zf@5f}WB=JF!huUC{zWbFR&U$3CA}Nr$CP3saKS67OoH)JNsjqVMyjeS?q#<4^A2wv zSOZ56VJnzjPlI6A`C3cPW>^r;9t3tBg#MF~Xnkh^#^@32-&9DmX37eQTEz!Bm%#Nu zYAik?I%rdw@S(e`FG=o*6iiLukjhgY15d{wlDbJQYT^QDQ)?PC{I`S__ t+4t8@KW{%x-rGm8pDZ@2Zko}3E@@q|hYkSs1SStn&d!`kZ{m!8{RU&5CpiEB literal 0 HcmV?d00001 diff --git a/MQTT/__pycache__/wsgi.cpython-310.pyc b/MQTT/__pycache__/wsgi.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6dd4b444af6c53d3044885d5f316512f00a40e06 GIT binary patch literal 514 zcmYjO!A=`75cN8N&~1Y_AkMxP` zf~sH~_`9KK(HJ)Z0>P~Lv?ZEi>zVqf@r#VN1s#&k_VO*f9rpSxMV-lqiTd_(o)E-PB5;LxI{I4m+A_g5FMThYe zA1uZKN`;F8w2dE3F5~czp9L9o0=J)oP3pH~Lxwx(UY-qlH_7mPH0lp}!{qv=`~B*C z*{;7H8L(FB+;m#5l_Z`&NgPGv_SPz*)QgX5%!+yz*8)A46>1myMgbYWSJr*ppnD-z oy~36IyWc(jQM0UFjS`g$xAS#9!xO(@V(RK9+4=B^?$VI{1KcN@)c^nh literal 0 HcmV?d00001 diff --git a/MQTT/asgi.py b/MQTT/asgi.py new file mode 100644 index 0000000..a915e0b --- /dev/null +++ b/MQTT/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for MQTT 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.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MQTT.settings') + +application = get_asgi_application() diff --git a/MQTT/settings.py b/MQTT/settings.py new file mode 100644 index 0000000..669c523 --- /dev/null +++ b/MQTT/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for MQTT project. + +Generated by 'django-admin startproject' using Django 5.0.6. + +For more information on this file, see +https://docs.djangoproject.com/en/5.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.0/ref/settings/ +""" + +from pathlib import Path + +# 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.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-gi1ng+ntwjj^a6qvj-mlvo6j(#hhrr!gl#q09s0i-)r!fx)=9c' + +# 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', +] + +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 = 'MQTT.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'] + , + '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 = 'MQTT.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.0/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.0/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.0/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/MQTT/urls.py b/MQTT/urls.py new file mode 100644 index 0000000..ce41050 --- /dev/null +++ b/MQTT/urls.py @@ -0,0 +1,24 @@ +""" +URL configuration for MQTT project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.2/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("accounts/", include("signup.urls")) +] + diff --git a/MQTT/wsgi.py b/MQTT/wsgi.py new file mode 100644 index 0000000..866975e --- /dev/null +++ b/MQTT/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for MQTT 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.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MQTT.settings') + +application = get_wsgi_application() diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..7bea4a63135cfe7dae4e4219e069911be86f2887 GIT binary patch literal 131072 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%0AYGu*zyd=~C0)nZMql!|qwNgu{~ zb_|&O27A(vRU^vgrheUtNahQVxxcWclC0&D{nZ8I|Fl2E2LwO>1V8`;KmY_l00ck) z1V8`;o^Ap@=XJ-p=AB!$}3Vn9*M`JW|M#x-O*+(m=kUDw?{wChBO9bI2IZBjL&#zdG=p0Mwv8O=De2S z8FM0a+$qd`bx)5O#f(v8!+;Hm%605Xsg+=$sqQw711v_FHUktdif&;s)Grck7AJ?z z+r#0@?{{=#sC9D6!-DY@21*aX>ua4+YU3cEaZKU;4PcprYhlUAu|2vJa{jzyY-x%z zaL>5eNfN#E{^Rp!NzTYo#(Lh0O|!Q0&bhZfLe>r%$}_ipeU8nsVvxrj$|D1)+UVH( z8OF0CP28~2!UO7rm{>;XB2w&e57Uu@+Kn%oia@4d1Ruc^48OVmVXa;t7kDI7FeW|1 z-W0db>$74GI6%HuP-%6@Vpz#V6Oy7&h|zPoHPJRRsdS?r?e?yZJeh=4O2Jam)<_eI8Lc`lg3QiQ4gOs&@Hn*;4T{aEJDS6 z_LznXLaiHTJwh$Ywca#d9*sg|GM*rpm7H3ZE2Qqraw489L<`Xzt9TpbF5AktF+A9_ z=`v~*M9FkD1xfjsEOJSm`>;odM!Efz@seuHX`|tcx$12!j#d4-zP`26R&AdgYK@*T zj@W9lltQIcrBf%mb0zaqJf`N9xYgh}tyt!}mj3xou)Aio=$)a#Q0wAz9ziB^EtiZf zrEA-JHpg;#HL2#T(w;p;nz6#@)U>?jr@ur?j$r7mpL~{068iXzu_bh+S`~fRwheU6 zkJSKbxqE89$z~|DZ?M`IMQwLo-6Vskoe44#%lS&Dj?}91Mp-Ea1C5GOE|d95fvswz zR3x)Ty7y{<*&CVJTl8cw+W*)~0Wn0o!nKTXskh%5tH?+*_?07a@&1?nH#-{6|?I+YqKI0Mcq%iA;6^3~vr;L)4RHYC$%)qvm z`$vvk46Dzh6hO;Er0-0SDYxDm^Ae1zo~>IrKDI)Z%J*7XZqDpKL=L5Z9CeY z*cxj}82^8QLK=_)0w4eaAOHd&00JNY0w4eaAOHf7i2$De9}`%(1pyEM0T2KI5C8!X z009sH0T2LzCx`%^|DT}BfD{k_0T2KI5C8!X009sH0T2KI5O_=k@cjRnz``vEfB*=9 z00@8p2!H?xfB*=900=xm1n~U-1XTv4fB*=900@8p2!H?xfB*=900@A3vL(-s>Aexkv`vsBsgCzJMx^r@Pk6x+&v?5TCe`03oO^~X20Y^7 zD}T4$47&|a{ij{gmxnN}WKuv1NC7Dz1*E|574Y6mo1Z5tN&zV#1wIw zGy&vI4vJ<5W})P8CJ*HfsN`tQn-XFX8xtzm4(pBP(ea7%lLz2gtsT^=je0eq=4nNw z66{-(o@b|GhV6hVtmF4EenJ6EyFLm?D#i#C=UxJUDlQs16N@0<8Bj4Tt||h}dviQ> ztpS=0oe>o-+8u)m*X>(_s{X9+I(WPq`2>sPu4P@nV;iwP?j_LAZT!eA^~)Q>(ER{C z*aM=k%+^%(=S%s_LvZHWt)R#}*uwyBu@v(h$Hg+xcA~;|R4PY>QdHQDm8_PD0ZU;% cE&_Qg6e39pg*Xee@>}<7b1zgA1RAsW17qWJi~s-t diff --git a/project/config/config.py b/project/config/config.py deleted file mode 100644 index 7c7b191..0000000 --- a/project/config/config.py +++ /dev/null @@ -1,16 +0,0 @@ - -#mysql -mysql_config = { - 'db_name': 'mqtt_test', - 'db_user': 'mqtt_test', - 'db_password': '12345678', - 'db_port': 3306, - 'db_host': '101.43.101.59' -} - -#MQTT broker -HOST = "101.43.101.59" -PORT = 1883 - -#topic -publish_topic={'login_topic':'login'} \ No newline at end of file diff --git a/project/mysql.py b/project/mysql.py deleted file mode 100644 index 7246e3e..0000000 --- a/project/mysql.py +++ /dev/null @@ -1,131 +0,0 @@ -from config.config import mysql_config -from peewee import * -import bcrypt -import datetime - - - -#链接数据库 -db = MySQLDatabase(mysql_config['db_name'], user=mysql_config['db_user'], password=mysql_config['db_password'], - host=mysql_config['db_host'], port=mysql_config['db_port']) - -#数据对象 -####################################################### -#基类 -class BaseModel(Model): - class Meta: - database = db - -#用户类 -class UserModel(BaseModel): - id=AutoField() - name = CharField(max_length=64) - password = CharField(max_length=32) - - - class Meta: - db_table = 'user' - - -#信息类 -class ChatModel(BaseModel): - id=AutoField() - message = TextField() - senderId=BigIntegerField() - time = DateTimeField(default=datetime.datetime.now) - class Meta: - db_table = 'chat' - -class CreateTable: - @staticmethod - def create(): - db.connect() - db.create_tables([UserModel, ChatModel]) - - -#用户操作 -########################################## -def hash_password(password): - # 生成盐值 - salt = bcrypt.gensalt() - # 生成哈希值 - hashed = bcrypt.hashpw(password.encode('utf-8'), salt) - return hashed - -# 验证密码 - -def check_password(hashed, password): - # 验证密码 - return bcrypt.checkpw(password.encode('utf-8'), hashed) - - -#用户信息传递 -class UserManage: - @staticmethod - def chackName(name):#检测用户是否存在,不存在则打印提示并返回None,否则返回UserModel - try: - user = UserModel.get(UserModel.name == name) - return user - except UserModel.DoesNotExist: - print(f"No user found with name: {name}") - return None - except Exception as error: - print(f"An error occurred: {error}") - return None - @staticmethod - def chackPassword(password):#如果密码正确则 - # 密码加密 - hashPassword = hash_password(password) - return check_password(hashPassword,password) - - - @staticmethod - def AddUser(name, password): - try: - UserModel.get(UserModel.name == name) - return 'User was existed' - except DoesNotExist: - pass - try: - pwd = hash_password(password) - UserModel.insert(name=name, password=pwd).execute() - return 'Succeed' - except Exception as error: - print(error) - return 'Fail' - - -################################################################ -class ChatManage: - - # 获取并返回所有 chat 数据 - @staticmethod - def getAllManage(): - try: - all_chats = ChatModel.select() - # 将数据转换为列表形式 - chat_list = [] - for chat in all_chats: - chat_data = { - 'id': chat.id, - 'message': chat.message, - 'senderId': chat.senderId, - 'time': chat.time - } - chat_list.append(chat_data) - return chat_list - except Exception as error: - print(error) - return None - - @staticmethod - def AddChat(message,senderId): - try: - UserModel.insert(message=message,senderId=senderId).execute() - return 'Succeed' - except Exception as error: - print(error) - return 'Fail' - - -CreateTable.create() \ No newline at end of file diff --git a/project/server/Server.py b/project/server/Server.py deleted file mode 100644 index 92696b8..0000000 --- a/project/server/Server.py +++ /dev/null @@ -1,60 +0,0 @@ - -import paho.mqtt.client as mqtt - -from project.config.config import HOST, PORT,publish_topic -from queue import Queue -import datetime -import threading -from threading import Thread, Event -import threading -from queue import Queue -import paho.mqtt.client as mqtt - -class Server: - def __init__(self): - self.client = mqtt.Client() - self.client.on_connect = self.on_connect - self.client.on_message = self.on_message - self.client.connect(HOST, PORT, 60) - self.lock = threading.Lock() - self.loopNum = 0 - - def start_loop(self): - # 用线程锁来控制同时仅能一个loop_forever - if self.loopNum == 0: - self.lock.acquire() - print('进程锁加载') - self.loopNum = 1 - self.client._thread_terminate = False - self.client.loop_forever() - - def stop_loop(self): - # 停止这个线程 - if self.loopNum == 1: - self.lock.release() - print('进程锁结束!!') - self.client._thread_terminate = True - self.loopNum = 0 - - def serverStart(self):#启动进程,使用threading(python自带进程管理库)进行管理 - loopThread = threading.Thread(target=self.start_loop) - loopThread.start() - - return loopThread - - - def on_connect(self, client, userdata, flags, rc): - if rc == 0: - print("Connected successfully") - client.subscribe('login') # 订阅 login 主题 - else: - print("Failed to connect, return code %d\n", rc) - - - def on_message(self, client, userdata, msg): - # 规定传入数据均为dict的形式 - data = eval(msg.payload.decode('utf-8')) - print(data) - -a=Server() -a.serverStart() \ No newline at end of file diff --git a/project/test.py b/project/test.py deleted file mode 100644 index b7796d4..0000000 --- a/project/test.py +++ /dev/null @@ -1,30 +0,0 @@ - - -############################################ -#此为我自己进行功能测试的文件,你们可以随意更改,随意提交 -############################################ - -import bcrypt - -# 加密密码 -def hash_password(password): - # 生成盐值 - salt = bcrypt.gensalt() - # 生成哈希值 - hashed = bcrypt.hashpw(password.encode('utf-8'), salt) - return hashed - -# 验证密码 -def check_password(hashed, password): - # 验证密码 - return bcrypt.checkpw(password.encode('utf-8'), hashed) - -# 示例使用 -if __name__ == "__main__": - password = "my_secure_password" - hashed_password = hash_password(password) - print(f"Hashed password: {hashed_password}") - - # 验证密码 - is_correct = check_password(hashed_password, "my_secur1e_password") - print(f"Password is correct: {is_correct}") \ No newline at end of file diff --git a/signup/__init__.py b/signup/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/signup/__pycache__/__init__.cpython-310.pyc b/signup/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..752152ea0717fa7854635a06b4bd237f4af585c8 GIT binary patch literal 119 zcmd1j<>g`k0+xvJ~J<~BtBlRpz;=nO>TZlX-=vgNKY{nkYHf|03)y#H~;_u literal 0 HcmV?d00001 diff --git a/signup/__pycache__/urls.cpython-310.pyc b/signup/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..854a0c3f69e2cf9875e09cf6b5273d7c6880931e GIT binary patch literal 305 zcmYjN%}T>S5Z>Q3O;YeA_z1bQcPZk*tAbb%LO=quT_f2|*liU14nBylv>rXxNAMt> z4GIqI%zWR@d^1eHSY!n4?CXB}f$=kf|CS)Q#OK%OfB@}?p%tYB81Rl6UU4HTL5ZRu z6bA{(8^?U61f((7tdcOlBV~3#1ya%=hGzG8pb@Z;I;C5`Q!Zp(uUq@@+^U!T{EuBZ z@!Mn@qxQ*EvkG#GH)RrXcxtTfm!s>vV^|wxRPa-ulaa{r4@cq*>)(mXk(=E2>D76C leY@GzzSVXd>Zq|CUPHPzJ&c{Yh&%dtpMspwf)_OXIRc7gOjZB@ literal 0 HcmV?d00001 diff --git a/signup/__pycache__/views.cpython-310.pyc b/signup/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c6042666c337a9d11bfda898f60d1e3fe0ba154 GIT binary patch literal 1050 zcmZvbOK%e~5XWt=_mOQ{mhu*e6PLXtoGXMtt+)|D4F^`0s%`8hTlNubZz`&dgcPoP zhxW*okK-#RJ^@ls%xt32BE0h7p0VYb`Po}-ZiWQfkKu>oCmta`(YV?e7%!mfJrF?z z%}GHMTCjvsv{~*HJmH0#xUKEvUg0Nx5hMZFT)1CJ(h;8UVGKpEPvXumIElo}dPkd<=-7E--zPDtLDJy zLf?h12OteOf$Tpr^~g||vjv^ghMqeYL_LI&UywO7ZbKTjfXa*~V8=cw9YYsnPL1CX z;RxQ)j4m9g!W~%t_RaqA^6|u&sov@LkE(i{$)c*ttTbt@YTX-E#o4Bk<4hZ=dJ|LR zmLEg*abUednn@)TFefSiu|cK}XK9`Z%XK=FisK5Fq3{l3$NEZss--pxZ_M%2GdmQ(@Ke$soRjCx`WaIISbn-)Y5KA#i823MIQx8 zt1gJ`j&hlnQXIA?J7Z}Smi#YvS8bsekzWaP15G5ql$$WK%eaS#{w~=1K1fKn0Cl(h zTI7^{@faY-#X-E0MB*eZ$5l^HDrH8s(d}io*KTjE)<#unRCd(Ee`1*)CTbu2XSs*3 oOD`W)TQ6R18|+H9ZQgCl!Ly +
+ {% csrf_token %} + {{ form.as_p }} + +
\ No newline at end of file diff --git a/templates/register.html b/templates/register.html new file mode 100644 index 0000000..dbb9562 --- /dev/null +++ b/templates/register.html @@ -0,0 +1,6 @@ + +
+ {% csrf_token %} + {{ form.as_p }} + +
\ No newline at end of file