帮我写提个登录界面包含注册和登录功能
时间: 2023-07-19 13:42:52 浏览: 49
好的,下面是一个简单的登录界面,包含注册和登录功能,使用Python语言和Flask框架实现,数据存储在SQLite数据库中:
```python
from flask import Flask, render_template, request, redirect, url_for, session, flash
import sqlite3
app = Flask(__name__)
app.secret_key = 'secret'
def create_user_table():
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password TEXT)''')
conn.commit()
conn.close()
def insert_user(username, password):
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
conn.close()
def get_user(username):
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username = ?", (username,))
user = c.fetchone()
conn.close()
return user
@app.route('/')
def index():
return render_template('index.html')
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
confirm_password = request.form['confirm_password']
if password != confirm_password:
flash('Passwords do not match.', 'error')
return redirect(url_for('register'))
user = get_user(username)
if user:
flash('Username already exists.', 'error')
return redirect(url_for('register'))
insert_user(username, password)
flash('Registration successful. Please login.', 'success')
return redirect(url_for('login'))
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 = get_user(username)
if user and password == user[2]:
session['username'] = username
flash('Login successful.', 'success')
return redirect(url_for('index'))
else:
flash('Invalid username or password.', 'error')
return redirect(url_for('login'))
else:
return render_template('login.html')
@app.route('/logout')
def logout():
session.pop('username', None)
flash('Logout successful.', 'success')
return redirect(url_for('index'))
if __name__ == '__main__':
create_user_table()
app.run(debug=True)
```
说明:
1. `create_user_table()` 函数用于创建用户表格,如果表格已经存在,则不做任何事情。
2. `insert_user(username, password)` 函数用于向用户表格中插入新用户,如果用户名已经存在,则插入失败。
3. `get_user(username)` 函数用于从用户表格中获取指定用户名的用户信息,如果用户名不存在,则返回 `None`。
4. `/register` 路由用于注册新用户,接收POST请求,从请求中提取用户名和密码,如果密码和确认密码不一致,则注册失败;如果用户名已经存在,则注册失败;否则插入新用户并返回登录页面。
5. `/login` 路由用于登录,接收POST请求,从请求中提取用户名和密码,如果用户名和密码匹配,则登录成功并存储用户名到会话中;否则登录失败并返回登录页面。
6. `/logout` 路由用于登出,接收GET请求,从会话中删除用户名并返回首页。
7. `/` 路由用于首页,展示登录和注册链接。
8. `templates` 文件夹中的 `index.html`、`login.html` 和 `register.html` 分别为首页、登录页面和注册页面的HTML模板。
9. `static` 文件夹中的 `style.css` 为CSS样式表。
请注意,这只是一个简单的登录界面示例代码,具体实现和安全性可以根据需求进行修改和扩展。同时,为了安全起见,您需要在实际应用中添加必要的身份验证和授权机制。