好的,我可以为您提供一个简单的 Flask 应用程序,包括登录和注册功能,并使用 ORM 和 MySQL 进行数据库用户名校验。请注意,这是一个基本且简化的示例,仅供参考。
首先,您需要安装 Flask、Flask-WTF、Flask-MySQLdb 等必要的库。您可以使用以下命令安装这些库:
```python
pip install flask
pip install Flask-WTF
pip install Flask-MySQLdb
```
接下来,您需要创建一个 MySQL 数据库,用于存储用户信息。在 MySQL 中,您可以使用以下命令创建一个名为 `users` 的表:
```mysql
CREATE TABLE users (
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
```
现在,让我们编写 Flask 应用程序。首先,导入必要的库:
```python
from flask import Flask, render_template, redirect, url_for, flash
from flask_mysqldb import MySQL
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo, Length
from werkzeug.security import generate_password_hash, check_password_hash
```
然后,创建 Flask 应用程序和 MySQL 实例:
```python
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key-here'
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'your-mysql-username-here'
app.config['MYSQL_PASSWORD'] = 'your-mysql-password-here'
app.config['MYSQL_DB'] = 'your-mysql-database-name-here'
mysql = MySQL(app)
```
接下来,定义用户模型和表单:
```python
class User:
def __init__(self, id, username, password):
self.id = id
self.username = username
self.password = password
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=50)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=50)])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Register')
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=50)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=50)])
submit = SubmitField('Login')
```
然后,编写注册和登录视图函数:
```python
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
username = form.username.data
password = generate_password_hash(form.password.data)
cur = mysql.connection.cursor()
cur.execute('SELECT * FROM users WHERE username = %s', (username,))
if cur.fetchone():
flash('Username already exists', 'error')
else:
cur.execute('INSERT INTO users (username, password) VALUES (%s, %s)', (username, password))
mysql.connection.commit()
flash('Successfully registered', 'success')
return redirect(url_for('login'))
return render_template('register.html', form=form)
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
username = form.username.data
password = form.password.data
cur = mysql.connection.cursor()
cur.execute('SELECT * FROM users WHERE username = %s', (username,))
user = cur.fetchone()
if user and check_password_hash(user[2], password):
user_obj = User(user[0], user[1], user[2])
flash('Successfully logged in', 'success')
# do something with the user object, e.g. store in session
return redirect(url_for('index'))
else:
flash('Invalid username or password', 'error')
return render_template('login.html', form=form)
```
最后,编写模板文件 `register.html` 和 `login.html`,用于呈现注册和登录表单。
这就是一个简单的 Flask 应用程序,包括登录和注册功能,并使用 ORM 和 MySQL 进行数据库用户名校验。请注意,这只是一个示例,您需要根据自己的需求进行修改和改进。