目录
flask-11蓝图blueprint 与 flask-13 模型配置
7、在templates下新增文件夹user,再在此文件夹下新增register.html
结合教程
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、注册