Merge remote-tracking branch 'origin/Django' into Django
This commit is contained in:
@@ -20,8 +20,8 @@
|
|||||||
<h1>注册新用户</h1>
|
<h1>注册新用户</h1>
|
||||||
<form id="regForm">
|
<form id="regForm">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<label for="code">注册码</label>
|
<label for="code">注册码(选填)</label>
|
||||||
<input id="code" name="code" type="text" required />
|
<input id="code" name="code" type="text" />
|
||||||
<label for="email">邮箱</label>
|
<label for="email">邮箱</label>
|
||||||
<input id="email" name="email" type="email" required />
|
<input id="email" name="email" type="email" required />
|
||||||
<button id="sendCodeBtn" type="button">发送验证码</button>
|
<button id="sendCodeBtn" type="button">发送验证码</button>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<button id="regBtn" type="submit">注册</button>
|
<button id="regBtn" type="submit">注册</button>
|
||||||
<div id="error" class="error"></div>
|
<div id="error" class="error"></div>
|
||||||
</form>
|
</form>
|
||||||
<div class="hint">仅允许持有管理员提供注册码的学生注册</div>
|
<div class="hint">有注册码请填写,否则可留空</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
function getCookie(name){const v=`; ${document.cookie}`;const p=v.split(`; ${name}=`);if(p.length===2) return p.pop().split(';').shift();}
|
function getCookie(name){const v=`; ${document.cookie}`;const p=v.split(`; ${name}=`);if(p.length===2) return p.pop().split(';').shift();}
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
const email_code=(document.getElementById('email_code').value||'').trim();
|
const email_code=(document.getElementById('email_code').value||'').trim();
|
||||||
const password=document.getElementById('password').value||'';
|
const password=document.getElementById('password').value||'';
|
||||||
const confirm=document.getElementById('confirm').value||'';
|
const confirm=document.getElementById('confirm').value||'';
|
||||||
if(!code||!email||!email_code||!username||!password){err.textContent='请填写所有字段';return;}
|
if(!email||!email_code||!username||!password){err.textContent='请填写所有必填字段';return;}
|
||||||
if(password!==confirm){err.textContent='两次密码不一致';return;}
|
if(password!==confirm){err.textContent='两次密码不一致';return;}
|
||||||
const btn=document.getElementById('regBtn'); btn.disabled=true;
|
const btn=document.getElementById('regBtn'); btn.disabled=true;
|
||||||
try{
|
try{
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ def register_submit(request):
|
|||||||
email_code = (payload.get("email_code") or "").strip()
|
email_code = (payload.get("email_code") or "").strip()
|
||||||
username = (payload.get("username") or "").strip()
|
username = (payload.get("username") or "").strip()
|
||||||
password = (payload.get("password") or "")
|
password = (payload.get("password") or "")
|
||||||
if not code or not email or not email_code or not username or not password:
|
if not email or not email_code or not username or not password:
|
||||||
return HttpResponseBadRequest("Missing fields")
|
return HttpResponseBadRequest("Missing fields")
|
||||||
v = request.session.get("email_verify") or {}
|
v = request.session.get("email_verify") or {}
|
||||||
if (v.get("email") or "") != email:
|
if (v.get("email") or "") != email:
|
||||||
@@ -201,20 +201,22 @@ def register_submit(request):
|
|||||||
return JsonResponse({"ok": False, "message": "验证码已过期"}, status=400)
|
return JsonResponse({"ok": False, "message": "验证码已过期"}, status=400)
|
||||||
if (v.get("code") or "") != email_code:
|
if (v.get("code") or "") != email_code:
|
||||||
return JsonResponse({"ok": False, "message": "邮箱验证码错误"}, status=400)
|
return JsonResponse({"ok": False, "message": "邮箱验证码错误"}, status=400)
|
||||||
rc = get_registration_code(code)
|
rc = None
|
||||||
if not rc:
|
if code:
|
||||||
return JsonResponse({"ok": False, "message": "注册码无效"}, status=400)
|
rc = get_registration_code(code)
|
||||||
try:
|
if not rc:
|
||||||
exp = rc.get("expires_at")
|
return JsonResponse({"ok": False, "message": "注册码无效"}, status=400)
|
||||||
now = __import__("datetime").datetime.now(__import__("datetime").timezone.utc)
|
try:
|
||||||
if hasattr(exp, 'isoformat'):
|
exp = rc.get("expires_at")
|
||||||
exp_dt = exp
|
now = __import__("datetime").datetime.now(__import__("datetime").timezone.utc)
|
||||||
else:
|
if hasattr(exp, 'isoformat'):
|
||||||
exp_dt = __import__("datetime").datetime.fromisoformat(str(exp))
|
exp_dt = exp
|
||||||
if exp_dt <= now:
|
else:
|
||||||
return JsonResponse({"ok": False, "message": "注册码已过期"}, status=400)
|
exp_dt = __import__("datetime").datetime.fromisoformat(str(exp))
|
||||||
except Exception:
|
if exp_dt <= now:
|
||||||
pass
|
return JsonResponse({"ok": False, "message": "注册码已过期"}, status=400)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
existing = es_get_user_by_username(username)
|
existing = es_get_user_by_username(username)
|
||||||
if existing:
|
if existing:
|
||||||
return JsonResponse({"ok": False, "message": "用户名已存在"}, status=409)
|
return JsonResponse({"ok": False, "message": "用户名已存在"}, status=409)
|
||||||
@@ -226,8 +228,8 @@ def register_submit(request):
|
|||||||
"password": password,
|
"password": password,
|
||||||
"permission": 1,
|
"permission": 1,
|
||||||
"email": email,
|
"email": email,
|
||||||
"key": rc.get("keys") or [],
|
"key": (rc.get("keys") if rc else []) or [],
|
||||||
"manage_key": rc.get("manage_keys") or [],
|
"manage_key": (rc.get("manage_keys") if rc else []) or [],
|
||||||
})
|
})
|
||||||
if not ok:
|
if not ok:
|
||||||
return JsonResponse({"ok": False, "message": "注册失败"}, status=500)
|
return JsonResponse({"ok": False, "message": "注册失败"}, status=500)
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ class RegistrationCodeDocument(Document):
|
|||||||
code = fields.KeywordField() #具体值
|
code = fields.KeywordField() #具体值
|
||||||
keys = fields.KeywordField(multi=True) #对应的key
|
keys = fields.KeywordField(multi=True) #对应的key
|
||||||
manage_keys = fields.KeywordField(multi=True) #对应的manage_key
|
manage_keys = fields.KeywordField(multi=True) #对应的manage_key
|
||||||
|
created_at = fields.DateField() #创建时间
|
||||||
expires_at = fields.DateField() #过期时间
|
expires_at = fields.DateField() #过期时间
|
||||||
created_by = fields.LongField() #创建者id
|
created_by = fields.LongField() #创建者id
|
||||||
class Django:
|
class Django:
|
||||||
|
|||||||
Reference in New Issue
Block a user