用pycharm的flsak框架编写用户登录注册具体代码并连接sql的navicat数据库
时间: 2023-12-03 22:46:34 浏览: 146
首先需要安装 Flask 和 Flask-MySQLdb 扩展库:
```
pip install flask
pip install flask-mysqldb
```
然后编写 Flask 应用程序代码:
```python
from flask import Flask, render_template, request, redirect, url_for, session
from flask_mysqldb import MySQL
app = Flask(__name__)
app.secret_key = 'your_secret_key' # 设置 session 的密钥,用于加密 session 数据
# MySQL 配置信息
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'mydatabase'
mysql = MySQL(app) # 初始化 MySQL 实例
# 登录页面
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 查询用户是否存在
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM users WHERE username = %s", (username,))
user = cur.fetchone()
cur.close()
if user:
if user['password'] == password:
session['username'] = username
return redirect(url_for('home'))
else:
return render_template('login.html', error='Incorrect Password')
else:
return render_template('login.html', error='User Not Found')
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']
# 检查用户名是否已存在
cur = mysql.connection.cursor()
cur.execute("SELECT * FROM users WHERE username = %s", (username,))
user = cur.fetchone()
if user:
return render_template('register.html', error='Username Already Exists')
else:
# 插入用户信息到数据库
cur.execute("INSERT INTO users (username, password) VALUES (%s, %s)", (username, password))
mysql.connection.commit()
cur.close()
session['username'] = username
return redirect(url_for('home'))
else:
return render_template('register.html')
# 主页
@app.route('/home')
def home():
if 'username' in session:
return render_template('home.html', username=session['username'])
else:
return redirect(url_for('login'))
# 退出登录
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
```
在上面的代码中,我们定义了四个路由:`/login`,`/register`,`/home` 和 `/logout`。
- `/login`:处理用户的登录请求,从数据库中查询用户信息并验证密码,如果验证通过则将用户名存入 session 中,并重定向到主页,否则重新显示登录页面并提示错误信息。
- `/register`:处理用户的注册请求,先检查用户名是否已存在,如果不存在则将用户信息插入到数据库中,并将用户名存入 session 中,然后重定向到主页,否则重新显示注册页面并提示错误信息。
- `/home`:显示当前登录用户的主页,如果用户未登录则重定向到登录页面。
- `/logout`:处理用户的退出登录请求,将 session 中的用户名删除,并重定向到登录页面。
注意,我们使用了 Flask 的 Session 功能来存储用户的登录状态,需要在应用程序中设置一个密钥(`app.secret_key`)用于加密 session 数据。
最后,在 navicat 中创建一个名为 `mydatabase` 的数据库,并在其中创建一个名为 `users` 的表,包含两个字段:`id`(自增主键)和 `username`、`password`(用户名和密码)。
完整的 HTML 模板可以在网上找到,这里不再赘述。
阅读全文