写一个登录注册要有后端
时间: 2024-04-21 11:27:41 浏览: 24
好的,以下是一个简单的登录注册后端的示例代码,基于 Flask 框架和 SQLite 数据库实现:
```python
from flask import Flask, request, jsonify
import sqlite3
import hashlib
import uuid
app = Flask(__name__)
# 连接 SQLite 数据库
conn = sqlite3.connect('users.db')
c = conn.cursor()
# 创建用户表
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL)''')
# 关闭数据库连接
conn.close()
# 注册功能
@app.route('/register', methods=['POST'])
def register():
# 获取用户名和密码
username = request.form.get('username')
password = request.form.get('password')
# 判断用户名和密码是否为空
if not username or not password:
return jsonify({'error': '用户名和密码不能为空'})
# 对密码进行加密
salt = uuid.uuid4().hex
hashed_password = hashlib.sha256((password + salt).encode()).hexdigest()
# 插入用户数据到数据库
conn = sqlite3.connect('users.db')
c = conn.cursor()
try:
c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, hashed_password))
conn.commit()
except sqlite3.IntegrityError:
conn.close()
return jsonify({'error': '该用户名已被注册'})
conn.close()
return jsonify({'success': '注册成功'})
# 登录功能
@app.route('/login', methods=['POST'])
def login():
# 获取用户名和密码
username = request.form.get('username')
password = request.form.get('password')
# 判断用户名和密码是否为空
if not username or not password:
return jsonify({'error': '用户名和密码不能为空'})
# 从数据库中查询用户数据
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("SELECT password FROM users WHERE username=?", (username,))
user = c.fetchone()
conn.close()
# 判断用户是否存在
if not user:
return jsonify({'error': '用户名不存在'})
# 对密码进行校验
salt = uuid.uuid4().hex
hashed_password = hashlib.sha256((password + salt).encode()).hexdigest()
if hashed_password != user[0]:
return jsonify({'error': '密码不正确'})
return jsonify({'success': '登录成功'})
if __name__ == '__main__':
app.run(debug=True)
```
这个示例代码中,使用了 Flask 框架提供的路由功能,通过 POST 请求的方式接收用户名和密码,然后将用户数据存储到 SQLite 数据库中。对密码进行了加密处理,确保用户数据的安全性。在登录时,根据用户名从数据库中查询用户数据,对密码进行校验,确保登录的安全性。