flask-14 Flask蓝图+数据持久化

目录

flask-11蓝图blueprint 与 flask-13 模型配置 

一、安装所需库

二、项目结构创建

1、新增settings.py

2、新增apps包,在__init__.py 输入

3、新增ext包,在__init__.py 输入

 4、在apps下创建user包,再创建models.py

5、修改app.py

6、在templates下新增base.html

7、在templates下新增文件夹user,再在此文件夹下新增register.html

8、apps/user下新增view.py

三、创建数据库表

 四、运行

1、启动服务

 2、注册

3、数据库验证 


结合教程

flask-11蓝图blueprint 与 flask-13 模型配置 

学习内容实现数据持久化

一、安装所需库

pip install pymysql
pip install flask-script

pip install flask-sqlalchemy
 
pip install flask-migrate==2.7.0


pip uninstall flask

pip install Flask==1.1.4

二、项目结构创建

1、新增settings.py

class Config:
    DEBUG = True
    # 数据库配置
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://用户名:密码@ip:3306/bar'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = True


class DevelopmentConfig(Config):
    ENV = 'development'


class ProductionConfig(Config):
    ENV = 'production'
    DEBUG = False

2、新增apps包,在__init__.py 输入

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/12/15 11:08
# @Author  : niubobo
# @File    : __init__.py.py
# @Software: PyCharm
from flask import Flask
import settings
from apps.user.view import user_bp
from ext import db


def create_app():
    app = Flask(__name__, template_folder='../templates', static_folder='../static')
    # 加载配置
    app.config.from_object(settings.DevelopmentConfig)
    # 将db对象与app进行关联
     db.init_app(app=app)
    # 蓝图 ,将蓝图对象绑定到app上
    app.register_blueprint(user_bp)
    return app


if __name__ == '__main__':
    app = create_app()
    app.run()

3、新增ext包,在__init__.py 输入

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

 4、在apps下创建user包,再创建models.py

from datetime import datetime

from ext 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(64), nullable=False)
    phone = db.Column(db.String(11), unique=True)
    isdelete = db.Column(db.Boolean, default=False)
    rdatetime = db.Column(db.DateTime, default=datetime.now)

    def __str__(self):
        return self.username

5、修改app.py

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from apps import create_app
from ext import db
from apps.user.models import User

app = create_app()
print(app)
manager = Manager(app=app)

# 命令工具
migrate = Migrate(app=app, db=db)
# 添加命令到manager
manager.add_command('db', MigrateCommand)


@manager.command
def init():
    print('初始化')


if __name__ == '__main__':
    manager.run()

6、在templates下新增base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %} 父模板的title{% endblock %}
    </title>
    <style>
        #head{
            height: 50px;
            background-color: bisque;
        }

        #head ul{
            list-style: none;
            height: 50px;
        }
        #head ul li{
            float: left;
            width: 100px;
            text-align: center;
            font-size: 15px;
            line-height: 50px;
        }

        #middle{
            height: 100%;
            background-color: azure;
        }
        #foot{
            height: 50px;
            line-height: 50px;
            background-color: darkolivegreen;
        }
    </style>
    {%  block modle_style %}{%  endblock %}

</head>
<body>
<div id="head">
    <ul>
        <li><a href="">首页</a></li>
        <li><a href="">秒杀</a></li>
        <li><a href="">超市</a></li>
        <li><a href="">图书</a></li>
        <li><a href="">会员</a></li>

    </ul>
</div>

<div id="middle">
    {% block middle %} 中间{% endblock %}
</div>
<div id="foot">
    我是底部
</div>
{% block myjs %}{% endblock %}
</body>
</html>

7、在templates下新增文件夹user,再在此文件夹下新增register.html

{% extends 'base.html' %}
{% block title %}
    用户注册
{% endblock %}
{% block middle %}
    <p style="color: red">{{ msg }}</p>
    <!--<form action="/register" method="post"> -->
     <form action="{{url_for('user.register')}}" method="post">
        <p><input type="text" name="username" placeholder="用户名"></p>
        <p><input type="password" name="password" placeholder="密码"></p>
        <p><input type="password" name="repassword" placeholder="确认密码"></p>
        <p><input type="number" name="phone" placeholder="手机号码"></p>
        <p><input type="submit" value="用户注册"></p>
    </form>
{% endblock %}

8、apps/user下新增view.py

from flask import Blueprint, request, render_template, redirect

from apps.user.models import User
from ext import db
import hashlib
user_bp = Blueprint('user', __name__)


@user_bp.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        # 获取post提交得数据
        username = request.form.get('username')
        password = request.form.get('password')
        repassword = request.form.get('repassword')
        phone = request.form.get('phone')
        if password == repassword:
            # # 用户唯一
            # for user in users:
            #     if user.username == username:
            #         return render_template('user/register.html', msg='用户名已存在')
            # 与模型结合
            # 1、找到模型类并创建对象
            user = User()
            # 2、给对象熟悉赋值
            user.username = username
            user.password = password
            user.phone = phone
            # 添加
            # 3、将user添加到session中(类似缓存)
            db.session.add(user)
            # 4、提交数据
            db.session.commit()
            return '用户注册成功'
        else:
            return '两次密码不一致'
    return render_template('user/register.html')
    # return '用户注册'

三、创建数据库表

终端执行命令:

python app.py db init

python app.py db migrate

python app.py db upgrade

 四、运行

1、启动服务

python app.py runserver

 2、注册

 

3、数据库验证 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值