使用python做一个包括管理员和用户的注册登录系统
时间: 2024-03-06 07:52:00 浏览: 21
好的,这是一个比较常见的应用场景,通常我们可以使用数据库来进行数据的存储和管理,下面是一个简单的示例代码,你可以参考一下:
1. 首先安装需要的依赖包:
```python
pip install flask flask_sqlalchemy
```
2. 创建一个 `app.py` 文件:
```python
from flask import Flask, render_template, request, redirect, url_for, session
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' # 数据库文件路径
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭对模型修改的监控
app.secret_key = 'your_secret_key' # 设置 session 密钥
db = SQLAlchemy(app) # 初始化数据库
# 用户模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
password = db.Column(db.String(50), nullable=False)
is_admin = db.Column(db.Boolean, default=False)
# 创建表
db.create_all()
# 路由:登录
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username, password=password).first()
if user:
session['user_id'] = user.id
if user.is_admin:
return redirect(url_for('admin'))
else:
return redirect(url_for('user'))
else:
return render_template('login.html', error='用户名或密码错误')
else:
return render_template('login.html')
# 路由:注册
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User(username=username, password=password)
db.session.add(user)
db.session.commit()
return redirect(url_for('login'))
else:
return render_template('register.html')
# 路由:管理员页面
@app.route('/admin')
def admin():
if 'user_id' in session:
user = User.query.get(session['user_id'])
if user and user.is_admin:
users = User.query.all()
return render_template('admin.html', users=users)
return redirect(url_for('login'))
# 路由:普通用户页面
@app.route('/user')
def user():
if 'user_id' in session:
user = User.query.get(session['user_id'])
if user and not user.is_admin:
return render_template('user.html')
return redirect(url_for('login'))
# 路由:注销
@app.route('/logout')
def logout():
session.pop('user_id', None)
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
```
3. 在项目根目录下创建 `templates` 文件夹,并创建以下三个模板文件:
- `login.html`:登录页面模板
```html
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
{% if error %}
<p>{{ error }}</p>
{% endif %}
<form action="{{ url_for('login') }}" method="POST">
<label>用户名:</label>
<input type="text" name="username"><br>
<label>密码:</label>
<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
<a href="{{ url_for('register') }}">注册</a>
</body>
</html>
```
- `register.html`:注册页面模板
```html
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
</head>
<body>
<form action="{{ url_for('register') }}" method="POST">
<label>用户名:</label>
<input type="text" name="username"><br>
<label>密码:</label>
<input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
<a href="{{ url_for('login') }}">登录</a>
</body>
</html>
```
- `admin.html`:管理员页面模板
```html
<!DOCTYPE html>
<html>
<head>
<title>管理员页面</title>
</head>
<body>
<h2>用户列表</h2>
<table>
<thead>
<tr>
<th>用户名</th>
<th>是否为管理员</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.username }}</td>
<td>{{ '是' if user.is_admin else '否' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<br>
<a href="{{ url_for('logout') }}">注销</a>
</body>
</html>
```
- `user.html`:普通用户页面模板
```html
<!DOCTYPE html>
<html>
<head>
<title>普通用户页面</title>
</head>
<body>
<h2>欢迎,{{ user.username }}!</h2>
<br>
<a href="{{ url_for('logout') }}">注销</a>
</body>
</html>
```
上面的代码中,我们使用了 Flask 框架来搭建 Web 应用,使用 SQLAlchemy 来管理数据库。我们定义了一个 User 模型,用于表示用户的信息。在路由中,我们定义了四个页面:登录、注册、管理员页面和普通用户页面。当用户登录成功后,我们将用户的 ID 存入 session 中,方便后续的页面访问。当用户访问管理员页面时,需要验证用户是否为管理员,如果是,则显示所有用户的信息,否则跳转到登录页面。普通用户页面则只显示欢迎信息。
以上是一个简单的示例,你可以根据自己的需求进行修改和扩展。