写一个用python和flask的登陆注册页面并连接sqlite3
时间: 2024-02-25 09:59:41 浏览: 24
好的,以下是一个简单的基于Flask和SQLite3的登陆注册页面示例代码:
```python
from flask import Flask, render_template, request, redirect, url_for, session
import hashlib
import sqlite3
app = Flask(__name__)
app.secret_key = 'secret_key'
# 创建数据库连接
conn = sqlite3.connect('users.db')
c = conn.cursor()
# 创建用户表,如果表不存在
c.execute('''CREATE TABLE IF NOT EXISTS users
(username TEXT PRIMARY KEY, password TEXT)''')
conn.commit()
@app.route('/')
def index():
if 'username' in session:
return 'Logged in as ' + session['username'] + '<br>' + \
'<b><a href="/logout">Logout</a></b>'
return "You are not logged in <br><a href='/login'>" + \
"Click here to log in</a>"
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
hash_password = hashlib.md5(password.encode('utf-8')).hexdigest()
# 查询用户表中是否存在该用户并验证密码
c.execute('SELECT * FROM users WHERE username=? AND password=?', (username, hash_password))
result = c.fetchone()
if result:
session['username'] = username
return redirect(url_for('index'))
else:
return 'Invalid username or password'
return render_template('login.html')
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
hash_password = hashlib.md5(password.encode('utf-8')).hexdigest()
# 插入用户表
try:
c.execute('INSERT INTO users VALUES (?, ?)', (username, hash_password))
conn.commit()
except sqlite3.IntegrityError:
return 'Username already exists'
else:
return redirect(url_for('login'))
return render_template('register.html')
if __name__ == '__main__':
app.run(debug=True)
```
在项目根目录下创建两个html文件,login.html和register.html,分别用于登陆和注册页面的展示。以下是示例代码:
login.html:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form method="post" action="/login">
<label>Username:</label>
<input type="text" name="username"><br>
<label>Password:</label>
<input type="password" name="password"><br>
<input type="submit" value="Submit">
</form>
<a href="/register">New user? Click here to register</a>
</body>
</html>
```
register.html:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<form method="post" action="/register">
<label>Username:</label>
<input type="text" name="username"><br>
<label>Password:</label>
<input type="password" name="password"><br>
<input type="submit" value="Submit">
</form>
<a href="/login">Already have an account? Click here to login</a>
</body>
</html>
```
以上代码仅为示例代码,实际使用时需要进行一定的修改和优化。同时,需要注意SQLite3是一个轻量级的数据库,不适合处理大量数据,若需要使用更强大的数据库,可以考虑使用MySQL、PostgreSQL等。