用python和flask写一个登录和注册页面并连接到sqlite3
时间: 2024-02-29 22:56:03 浏览: 143
好的,我可以帮你解决这个问题。首先,你需要安装Flask和SQLite3,可以使用以下命令:
```
pip install flask
```
然后创建一个名为`app.py`的Python文件,并使用以下代码创建Flask应用程序:
```python
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
app.secret_key = "mysecretkey"
# 连接到数据库
conn = sqlite3.connect('database.db')
print("Opened database successfully")
# 创建用户表
conn.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT)')
print("Table created successfully")
conn.close()
# 登录路由
@app.route('/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, password))
user = cursor.fetchone()
if user:
return redirect(url_for('home'))
else:
return render_template('login.html', error='Invalid username or password')
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']
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password))
conn.commit()
return redirect(url_for('login'))
else:
return render_template('register.html')
# 首页路由
@app.route('/home')
def home():
return render_template('home.html')
if __name__ == '__main__':
app.run(debug=True)
```
这个应用程序定义了三个路由:登录,注册和首页。登录和注册页面使用Flask模板引擎呈现,表单提交将数据存储在SQLite3数据库中。登录和注册路由使用相同的表单,但是在数据库中执行的操作不同。
接下来,创建一个名为`login.html`的模板文件,包含一个登录表单:
```html
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
{% if error %}
<p>{{ error }}</p>
{% endif %}
<form method="POST">
<label>Username:</label>
<input type="text" name="username">
<br>
<label>Password:</label>
<input type="password" name="password">
<br>
<input type="submit" value="Login">
</form>
<a href="{{ url_for('register') }}">Register</a>
</body>
</html>
```
接下来,创建一个名为`register.html`的模板文件,包含一个注册表单:
```html
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<body>
<form method="POST">
<label>Username:</label>
<input type="text" name="username">
<br>
<label>Password:</label>
<input type="password" name="password">
<br>
<input type="submit" value="Register">
</form>
<a href="{{ url_for('login') }}">Login</a>
</body>
</html>
```
最后,创建一个名为`home.html`的模板文件,该文件表示用户成功登录后显示的页面:
```html
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome {{ user.username }}!</h1>
<a href="{{ url_for('login') }}">Logout</a>
</body>
</html>
```
这个应用程序使用Flask和SQLite3实现了登录和注册页面,并将数据存储在SQLite3数据库中。需要注意的是,这个应用程序仅用于学习目的,不能用于生产环境。
阅读全文