基于SQLAlchemy的登陆系统
时间: 2023-10-05 21:08:21 浏览: 50
好的,我可以为您介绍一下基于SQLAlchemy的登陆系统。SQLAlchemy是一个Python的ORM库,可以方便地与数据库交互。下面是一个简单的登陆系统的代码,使用了SQLite数据库和Flask框架:
```python
from flask import Flask, render_template, request, redirect, url_for, session
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
app = Flask(__name__)
app.secret_key = 'mysecretkey'
engine = create_engine('sqlite:///users.db', echo=True)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True)
password = Column(String(50))
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
db_session = Session()
@app.route('/')
def home():
return render_template('home.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = db_session.query(User).filter_by(username=username, password=password).first()
if user:
session['username'] = user.username
return redirect(url_for('profile'))
else:
return render_template('login.html', message='Wrong username or password!')
else:
return render_template('login.html')
@app.route('/profile')
def profile():
if 'username' in session:
return render_template('profile.html', username=session['username'])
else:
return redirect(url_for('login'))
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('home'))
```
在这个代码中,我们定义了一个User模型类,它映射到数据库中的users表,包含id、username和password三个字段。我们使用Flask框架来处理HTTP请求,并使用session来保存用户的登录状态。
在/login路由中,我们首先从表单中获取用户名和密码,然后使用SQLAlchemy查询数据库中是否存在这个用户。如果存在,则将用户名存储到session中,并重定向到/profile路由。否则,返回一个错误消息。
在/profile路由中,我们检查用户是否已经登录,如果已经登录,则返回用户的个人资料页面。否则,重定向到/login路由。
在/logout路由中,我们删除session中的用户名,并重定向到首页。
这是一个简单的基于SQLAlchemy的登陆系统的实现。当然,真正的生产环境中需要更加完善的安全机制,比如密码加盐哈希存储,防止SQL注入等。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)