flask-CURD

  1. 创建flask


    2.修改配置文件

    `'''
    config.py 保存项目配置
    '''
    from flask import Flask # 导入Flask模块
    from flask_sqlalchemy import SQLAlchemy #额外安装: 数据库操作模块
    from flask_wtf import CSRFProtect # 额外导入, csrf防护

数据库对象

db = SQLAlchemy()
class Config(object): #配置类定义Flask项目配置
'''项目配置信息'''
DEBUG=True # 开启调试模式
# 数据库
SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1:3306/info'
SQLALCHEMY_TRACK_MODIFICATIONS= True
SQLALCHEMY_ECHO= True
SECRET_KEY = "sdfdfdfdxfddesfdgb^$" # 加密字符串 csrf需要用session也需要用
def create_app():
'''创建app对象'''
app =Flask(name)
# 2. 使用csrf保护应用程序
CSRFProtect(app)
app.config.from_object(Config) # 通过配置类加载配置信息
# 初始化数据库配置
db.init_app(app)

导入蓝图

from apps.users import users
from apps.book import book
app.register_blueprint(users, url_prefix="/") #用户蓝图/模块
app.register_blueprint(book, url_prefix="/book")# 书籍模块
return app
3.**修改启动文件** ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193402134-382884949.png)from config import create_app,db #配置文件中
from flask_script import Manager # 扩展db指令
from flask_migrate import Migrate,MigrateCommand # 数据库迁移库
app = create_app()
manager = Manager(app) # 命令管理类
migrate = Migrate(app,db=db) #创建迁移对象
manager.add_command('db',MigrateCommand) #扩展新的数据库操作指令db

if name == 'main':
manager.run() #启动4.**创建需要的模型类** ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193541751-1632900212.png) ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193602584-1583870044.png)'''
如果是团队开发:
最快方案: 项目经理把models写完!个人按照自己需求微调!!!
'''
from config import db # 导入数据库对象
from datetime import datetime

用户模型(id,name,pwd,phone,email,addr,创建时间)

class Users(db.Model):
__tablename="users"
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
name = db.Column(db.String(50),nullable=False,index=True,unique=True) #不为空,索引加快访问速度,名字唯一
pwd = db.Column(db.String(20),nullable=False)
email = db.Column(db.String(20))
phone = db.Column(db.String(20))
addr = db.Column(db.String(20)) #地址
create_time = db.Column(db.DATE,default=datetime.now()) # 时间默认为系统当前日期

def str(self):
return f'名字:{self.name},电话:{self.phone}'

作者

class Author(db.Model):
__tablename = "author"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50), nullable=False, index=True, unique=True) # 不为空,索引加快访问速度,名字唯一

1方配置关系,配置反向引用的名字

books = db.relationship('Books',backref='author')

书籍(id,名字,价格,作者id,出版日期)

class Books(db.Model):
__tablename = "books"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50), nullable=False, index=True, unique=True) # 不为空,索引加快访问速度,名字唯一
price = db.Column(db.String(50))
create_time = db.Column(db.DATE,default=datetime.now())

多方外键: 书籍.author.作者名字

author_id = db.Column(db.Integer,db.ForeignKey('author.id'))#或Author.id
5.**编码** 5.1**图书curd,分页** ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193743336-2004657181.png) ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193805902-1858010576.png) ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193825724-1008880969.png)from flask import Blueprint,render_template,request,session,redirect,url_for # redirect ,url_for重定向跳转

book = Blueprint('book',name) #模块名/蓝图名叫users
from .models import Books,Users,db,Author

@book.route('/') # 路由定义!

def index():

books = Books.query.all()

print(books)

return render_template('/books.html',books=books) # 跳转到模板!

@book.route('/add',methods=["GET",'POST'])
def add():
if request.method == 'GET':
authors = Author.query.all()
return render_template('add.html',authors=authors)

else:
name = request.form.get('name')
price = request.form.get('price')
create_time = request.form.get('create_time')
author_id = request.form.get('author_id')
print(name)
book1 = Books(name=name,price=price,create_time=create_time,author_id=author_id)
db.session.add(book1)
db.session.commit()
# books = Books.query.all()
# return render_template('books.html', books=books)
return redirect('/book/readerall')

@book.route('/delete/int:id')
def delete(id):
book1 = Books.query.get(id)
db.session.delete(book1)
db.session.commit()
# books = Books.query.all()
# return render_template('books.html', books=books)
return redirect('/book/readerall')

@book.route('/update/int:id',methods=["GET","POST"])
def update(id):
if request.method == 'GET':
book1 = Books.query.get(id)
authors = Author.query.all()
return render_template('update.html',authors=authors,book1=book1)
else:
book1 = Books.query.get(id)
name = request.form.get('name')
price = request.form.get('price')
create_time = request.form.get('create_time')
author_id = request.form.get('author_id')
book1.name = name
book1.price = price
book1.create_time = create_time
book1.author_id = author_id
db.session.commit()
# books = Books.query.all()
# return render_template('books.html', books=books)
return redirect('/book/readerall')

@book.route('/readerall',methods=['GET','POST'])
def reader_all():
if request.method == 'GET':
paginate = Books.query.paginate(1, 2) # 默认显示第1页 # 获取页数
page = int(request.args.get('page',1))
if page <= 0:
page = 1
if page >= paginate.pages: # 共3页, 输入30-->显示最大页3
page = paginate.pages #最大页数
paginate = Books.query.paginate(page, 2)# 重新查询
books = paginate.items # 当前页数据(默认是第1页数据)
return render_template('books.html',books=books,paginate=paginate)
else:
name = request.form.get('name')
print(Books.query.filter(Books.name.contains(name)))
paginate = Books.query.filter(Books.name.contains(name)).paginate(1,2)
books = paginate.items
return render_template('books.html',books=books,paginate=paginate)5.2**用户登录注册** ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193917693-717668980.png) ![](https://img2020.cnblogs.com/blog/2198350/202011/2198350-20201109193929786-72707680.png)from flask import Blueprint,render_template,request,session,redirect,url_for # redirect ,url_for重定向跳转
users = Blueprint('users',name) #模块名/蓝图名叫users
from .models import Users,db

@users.route('/') # 路由定义!
def index():
return render_template('/index.html') # 跳转到模板!

@users.route('/register',methods=["GET",'POST'])
def register():
if request.method == 'GET':
return render_template('register.html')
else:
username = request.form.get('username')
password = request.form.get('password')
email = request.form.get('email')
phone = request.form.get('phone')
addr = request.form.get('addr')
create_time = request.form.get('create_time')
user = Users(name=username,pwd=password,email=email,phone=phone,addr=addr,create_time=create_time)
db.session.add(user)
db.session.commit()
return render_template('login.html')

@users.route('/login',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
username = request.form.get('username')
password = request.form.get('password')
user = Users.query.filter_by(name=username).first()
if user is not None:
print('用户名存在')
if user.pwd == password:
print('登录成功')
return redirect('/book/readerall')
else:
print('密码不正确')
return redirect('/login')
else:
print('用户名不存在')
return redirect('/login')6.**写好的前端页面** 6.1**add.html**

Title

添加页面

书名:
价格:
创建时间:
作者名:
` 6.2**books.html** ` Title

书籍列表

    {% for item in books %}
  • id:{{item.id}},书名:{{item.name}},作者名:{{item.author.name}} 删除修改
  • {% endfor %}

增加

书名:
    {% if paginate.has_prev %}
  • «
  • {% endif %} {% for i in paginate.iter_pages() %} {% if paginate.page == i %}
  • {{ i }}
  • {% else %}
  • {{ i }}
  • {% endif %} {% endfor %} {% if paginate.has_next %}
  • »
  • {% endif %}

当前第{{ paginate.page }}页

共{{ paginate.pages }}页

` 6.3**update.html** ` Title

修改页面

书名:
价格:
创建时间:
作者名:
` 6.4**用户前端页面login.html** ` Title

登录页面

用户名:
密码:
` 6.5**register.html** ` Title

注册页面

用户名:
密码:
邮箱:
电话号码:
地址:
创建时间:
`
posted @ 2020-11-09 19:46  奶昔_g  阅读(171)  评论(0)    收藏  举报