62 lines
3.2 KiB
HTML
62 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>用户注册</title>
|
|
<style>
|
|
body { font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; background: #f5f6fa; }
|
|
.container { max-width: 400px; margin: 10vh auto; padding: 24px; background: #fff; border-radius: 10px; box-shadow: 0 8px 24px rgba(0,0,0,0.08); }
|
|
h1 { font-size: 20px; margin: 0 0 16px; }
|
|
label { display:block; margin: 12px 0 6px; color:#333; }
|
|
input { width:100%; padding:10px 0px; border:1px solid #dcdde1; border-radius:6px; }
|
|
button { width:100%; margin-top:16px; padding:10px 12px; background:#2d8cf0; color:#fff; border:none; border-radius:6px; cursor:pointer; }
|
|
button:disabled { background:#9bbcf0; cursor:not-allowed; }
|
|
.error { color:#d93025; margin-top:10px; min-height:20px; }
|
|
.hint { color:#888; font-size:12px; margin-top:10px; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<h1>注册新用户</h1>
|
|
<form id="regForm">
|
|
{% csrf_token %}
|
|
<label for="code">注册码</label>
|
|
<input id="code" name="code" type="text" required />
|
|
<label for="email">邮箱</label>
|
|
<input id="email" name="email" type="email" required />
|
|
<label for="username">用户名</label>
|
|
<input id="username" name="username" type="text" required />
|
|
<label for="password">密码</label>
|
|
<input id="password" name="password" type="password" required />
|
|
<label for="confirm">确认密码</label>
|
|
<input id="confirm" name="confirm" type="password" required />
|
|
<button id="regBtn" type="submit">注册</button>
|
|
<div id="error" class="error"></div>
|
|
</form>
|
|
<div class="hint">仅允许持有管理员提供注册码的学生注册</div>
|
|
</div>
|
|
<script>
|
|
function getCookie(name){const v=`; ${document.cookie}`;const p=v.split(`; ${name}=`);if(p.length===2) return p.pop().split(';').shift();}
|
|
document.getElementById('regForm').addEventListener('submit',async(e)=>{
|
|
e.preventDefault();
|
|
const err=document.getElementById('error'); err.textContent='';
|
|
const code=(document.getElementById('code').value||'').trim();
|
|
const email=(document.getElementById('email').value||'').trim();
|
|
const username=(document.getElementById('username').value||'').trim();
|
|
const password=document.getElementById('password').value||'';
|
|
const confirm=document.getElementById('confirm').value||'';
|
|
if(!code||!email||!username||!password){err.textContent='请填写所有字段';return;}
|
|
if(password!==confirm){err.textContent='两次密码不一致';return;}
|
|
const btn=document.getElementById('regBtn'); btn.disabled=true;
|
|
try{
|
|
const csrftoken=getCookie('csrftoken');
|
|
const resp=await fetch('/accounts/register/submit/',{method:'POST',credentials:'same-origin',headers:{'Content-Type':'application/json','X-CSRFToken':csrftoken||''},body:JSON.stringify({code,email,username,password})});
|
|
const data=await resp.json();
|
|
if(!resp.ok||!data.ok){throw new Error(data.message||'注册失败');}
|
|
window.location.href=data.redirect_url;
|
|
}catch(e){err.textContent=e.message||'发生错误';}
|
|
finally{btn.disabled=false;}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html> |