Flask全系

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)

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dS0piA7k-1625289527537)(C:\Users\SHTT\AppData\Roaming\Typora\typora-user-images\image-20210703131705587.png)]

然后查看数据库是否有记录

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li979036525

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值