Web+Flask框架+数据库 带有用户登陆注册功能
时间: 2023-12-08 11:06:30 浏览: 35
以下是一个基于Flask框架的简单用户登陆注册功能示例代码:
```python
from flask import Flask, render_template, request, redirect, session
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.secret_key = "mysecretkey"
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(80), nullable=False)
@app.route('/')
def index():
if 'username' in session:
return render_template('home.html', username=session['username'])
else:
return redirect('/login')
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if user:
return render_template('register.html', error='Username already exists')
new_user = User(username=username, password=password)
db.session.add(new_user)
db.session.commit()
session['username'] = username
return redirect('/')
else:
return render_template('register.html')
@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['username'] = username
return redirect('/')
else:
return render_template('login.html', error='Invalid login credentials')
else:
return render_template('login.html')
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect('/login')
if __name__ == '__main__':
db.create_all()
app.run(debug=True)
```
上述代码实现了以下功能:
- 用户可以注册新账户
- 用户可以使用已注册的账户登陆
- 用户可以在登陆后查看主页
- 用户可以在登陆后注销账户
使用SQLite作为数据库,存储用户的用户名和密码。
在应用程序启动时,创建了名为“users.db”的SQLite数据库,并创建了一个名为“User”的表。
在注册页面,用户输入用户名和密码,如果该用户名已存在,则返回错误消息。否则,将新用户添加到数据库中,并将其用户名存储在会话中,以便在注册后自动登陆。
在登陆页面,用户输入用户名和密码。如果用户名和密码与数据库中的匹配,则将该用户名存储在会话中,并重定向到主页。否则,返回错误消息。
在主页上,如果用户已登陆,则显示其用户名。否则,重定向到登陆页面。
在注销页面上,将已存储在会话中的用户名删除,并重定向到登陆页面。