Flask全系03—实现一次页面注册往数据库添加数据
文档树如下
1.安装需要的组件
pip install flask-script 需要使用包里的Manager工具
pip3 install pymysql 建公路
pip3 install flask-sqlalchemy 实现ORM映射
pip3 install flask-migrate 发布命令工具
2.创建settings.py
# 配置文件
class Config:
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123e456t@127.0.0.1:3306/flaskday05'
SQLALCHEMY_TRACK_MODIFICATIONS = False
class DevelopmentConfig(Config):
ENV = 'development'
class ProductionConfig(Config):
ENV = 'production'
DEBUG = False
3.新建包apps 和 exts
apps/__ init__.py
from flask import Flask
import settings
from apps.user.view import user_bp
from exts import db
def create_app():
app = Flask(__name__, template_folder='../templates', static_folder='../static')
app.config.from_object(settings.DevelopmentConfig)
#2创建完db在这与app建立连接
db.init_app(app=app)
#注册蓝图
app.register_blueprint(user_bp)
return app
app.py
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager #最后一步 导入模型类
from apps.user.models import User
from apps import create_app
from exts import db
app = create_app()
manager = Manager(app=app)
migrate = Migrate(app=app, db=db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
exts/init.py
from flask_sqlalchemy import SQLAlchemy
#1
db = SQLAlchemy()
4.在apps下创建user包,以及在下面创建 (models.py,view.py)
apps/user/models.py
from datetime import datetime
from exts import db
class User(db.model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(12), nullable=False)
phone = db.Column(db.String(11), unique=True)
rdatetime = db.Column(db.DateTime, default=datetime.now)
def __str__(self):
return self.username
apps/user/view.py
from flask import Blueprint, request, render_template
from apps.user.models import User
from exts import db
user_bp = Blueprint('user', __name__)
@user_bp.route('/register', methods=['POST', 'GET'])
def register():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
repassword = request.form.get('repassword')
phone = request.form.get('phone')
if repassword == password:
user = User()
user.username = username
user.password = password
user.phone = phone
# 放入缓存
db.session.add(user)
# 提交到数据库
db.session.commit()
return '注册成功'
pass
return '密码不一致'
pass
return render_template('user/register.html')
templates/user/register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{{ url_for('user.register') }}" method="post">
<p><input type="text" placeholder="请输入用户名" name="username"></p>
<p><input type="password" placeholder="请输入密码" name="password"></p>
<p><input type="password" placeholder="请再次输入密码" name="repassword"></p>
<p><input type="text" placeholder="请输入你的手机号码" name="phone"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
5.最后在app.py中导入
from apps.user.models import User
6.在Terminal中输入以下命令创建数据库的表
python app.py --help 查看可以使用的命令
python app.py db init 初始化一个迁移脚本的环境,只需要执行一次,只创建了一个文件夹,数据库没有初始化。
python app.py db migrate 将模型生成迁移文件,只要模型更改了(增加一列),就需要执行一遍这个命令。
python app.py db upgrate 将迁移文件真正的映射到数据库中,创建表格。每次运行了migrate命令后,就记得要运行这个命令。
7.成功的结果
在Terminal下输入 python app.py runserver -p 8000 开启服务器
然后打开浏览器在搜索栏输入 (http://127.0.0.1:8000/register)
然后查看数据库是否有记录
8.如果出现版本问题可以参考以下各个安装包的版本
Package Version
alembic 1.6.5
click 8.0.1
colorama 0.4.4
Flask 1.1.2
Flask-Migrate 2.5.0
Flask-Script 2.0.6
Flask-SQLAlchemy 2.5.1
greenlet 1.1.0
itsdangerous 2.0.1
Jinja2 3.0.1
Mako 1.1.4
MarkupSafe 2.0.1
pip 21.1.3
PyMySQL 1.0.2
python-dateutil 2.8.1
python-editor 1.0.4
setuptools 57.0.0
six 1.16.0
SQLAlchemy 1.4.20
Werkzeug 2.0.1