flask 登录注册带有状态保持用CBV写
时间: 2023-08-10 07:03:48 浏览: 48
下面是使用 Flask CBV(Class-Based Views)编写的带有状态保持的登录和注册功能的示例代码:
```python
from flask import Flask, render_template, request, redirect, url_for, session
from flask.views import View
app = Flask(__name__)
app.secret_key = 'your_secret_key_here'
# 用户数据库
users = []
class RegisterView(View):
methods = ['GET', 'POST']
def dispatch_request(self):
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 检查用户名是否已存在
for user in users:
if user['username'] == username:
return 'Username already exists!'
# 创建新用户
user = {'username': username, 'password': password}
users.append(user)
session['username'] = username
return redirect(url_for('profile'))
return render_template('register.html')
class LoginView(View):
methods = ['GET', 'POST']
def dispatch_request(self):
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 验证用户名和密码
for user in users:
if user['username'] == username and user['password'] == password:
session['username'] = username
return redirect(url_for('profile'))
return 'Invalid username or password!'
return render_template('login.html')
class ProfileView(View):
methods = ['GET']
def dispatch_request(self):
if 'username' in session:
return f"Welcome, {session['username']}!"
else:
return redirect(url_for('login'))
class LogoutView(View):
methods = ['GET']
def dispatch_request(self):
session.clear()
return redirect(url_for('login'))
app.add_url_rule('/register', view_func=RegisterView.as_view('register'))
app.add_url_rule('/login', view_func=LoginView.as_view('login'))
app.add_url_rule('/profile', view_func=ProfileView.as_view('profile'))
app.add_url_rule('/logout', view_func=LogoutView.as_view('logout'))
if __name__ == '__main__':
app.run()
```
在上述代码中,我们使用了 Flask 的 CBV 功能,通过继承 `View` 类来创建视图类。每个视图类都有一个 `dispatch_request` 方法,用于处理不同的 HTTP 请求。
`RegisterView` 处理用户注册,`LoginView` 处理用户登录,`ProfileView` 显示用户个人资料,`LogoutView` 注销用户。在注册和登录过程中,我们将用户名存储在会话中以实现状态保持。
通过以上示例代码,您可以使用 Flask 的 CBV 来实现带有状态保持的登录和注册功能。