帮我实现html登陆及登出页面,支持token保存和验证,后端是tornado,给出示例代码
时间: 2023-05-18 08:05:41 浏览: 51
以下是一个简单的HTML登录和登出页面示例,支持使用token保存和验证。后端使用Tornado框架实现。
HTML登录页面:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h1>Login</h1>
<form method="post" action="/login">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
```
HTML登出页面:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Logout Page</title>
</head>
<body>
<h1>Logout</h1>
<form method="post" action="/logout">
<input type="submit" value="Logout">
</form>
</body>
</html>
```
Tornado后端代码:
```
import tornado.ioloop
import tornado.web
import uuid
# 模拟用户数据
users = {
'user1': 'password1',
'user2': 'password2',
'user3': 'password3'
}
# 模拟token数据
tokens = {}
class LoginHandler(tornado.web.RequestHandler):
def get(self):
self.render('login.html')
def post(self):
username = self.get_argument('username')
password = self.get_argument('password')
if username in users and users[username] == password:
# 生成token并保存
token = str(uuid.uuid4())
tokens[token] = username
self.set_cookie('token', token)
self.redirect('/')
else:
self.write('Login failed')
class LogoutHandler(tornado.web.RequestHandler):
def post(self):
token = self.get_cookie('token')
if token in tokens:
# 删除token
del tokens[token]
self.clear_cookie('token')
self.redirect('/')
class MainHandler(tornado.web.RequestHandler):
def get(self):
token = self.get_cookie('token')
if token in tokens:
username = tokens[token]
self.write('Welcome, ' + username)
self.write('<br><br><form method="post" action="/logout"><input type="submit" value="Logout"></form>')
else:
self.redirect('/login')
def make_app():
return tornado.web.Application([
(r'/', MainHandler),
(r'/login', LoginHandler),
(r'/logout', LogoutHandler)
])
if __name__ == '__main__':
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
```
在这个示例中,我们使用了一个字典来模拟用户数据和token数据。在登录时,如果用户名和密码正确,我们会生成一个随机的token并将其保存在tokens字典中,并将其设置为cookie。在主页中,我们会检查cookie中的token是否存在于tokens字典中,如果存在,则表示用户已经登录,否则将重定向到登录页面。在登出时,我们会删除tokens字典中的对应token,并清除cookie。