flask实现登录认证完整代码
时间: 2023-08-12 10:32:50 浏览: 37
好的,下面是一个简单的Flask登录认证的完整代码,使用的是Flask-Login扩展:
```python
from flask import Flask, render_template, redirect, url_for, request
from flask_login import LoginManager, login_user, logout_user, login_required, UserMixin
app = Flask(__name__)
app.secret_key = 'your_secret_key'
# 初始化LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
# 模拟用户数据
users = {
'admin': {'password': 'admin123'},
'guest': {'password': 'guest123'}
}
# 定义User类,继承自UserMixin
class User(UserMixin):
pass
# 根据用户ID加载用户
@login_manager.user_loader
def load_user(user_id):
user = User()
user.id = user_id
return user
# 登录页面
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username in users and password == users[username]['password']:
user = User()
user.id = username
login_user(user)
return redirect(url_for('index'))
else:
return render_template('login.html', error='Invalid username or password')
else:
return render_template('login.html')
# 首页
@app.route('/')
@login_required
def index():
return render_template('index.html')
# 退出登录
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('login'))
if __name__ == '__main__':
app.run()
```
这个例子中,我们使用了Flask-Login扩展来管理用户会话和认证。首先需要初始化LoginManager,并设置登录页面的路由。然后定义一个User类,继承自UserMixin,用于表示用户对象。在load_user函数中,根据用户ID加载用户对象。登录页面的处理函数中,检查用户名和密码是否正确,如果正确则创建一个User对象,并调用login_user函数将其登录。首页的处理函数使用了@login_required装饰器,表示访问该页面需要登录。退出登录的处理函数调用logout_user函数将用户登出。
这只是一个简单的例子,实际应用中还需要考虑安全性、会话管理、密码加密等问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)