flask 框架
#config.py 配置文件 蓝图
'''
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:[email protected]:3306/test3'
# sqlALCHEMY_DATABASE_URI= 'MysqL://root:[email protected]:13306/1907curd'
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
# manage.py 启动文件
from config import * #配置文件中
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() #启动
# mondels.py
'''
如果是团队开发:
最快方案: 项目经理把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) # 不为空,索引加快访问速度,名字唯一
# 多方外键: 书籍.author.作者名字
author_id = db.Column(db.Integer,db.ForeignKey('author.id'))#或Author.id
# user.py 逻辑文件
from flask import Blueprint,render_template,request,session,redirect,url_for # redirect ,url_for重定向跳转
from .models import Users
from config import db
users = Blueprint('users',__name__) #模块名/蓝图名叫users
@users.route('/') # 路由定义!
def index():
return render_template('index.html') # 跳转到模板!
#登录
@users.route('login',methods = ['GET','POST'])
def login():
if request.method == "POST":
username = request.form.get('name')
pwd = request.form.get('pwd')
if not all([username,pwd]) :
return render_template('login.html',err="请检查输入的内容")
user = Users.query.filter(Users.name==username and Users.pwd==pwd).all()
if user:
return render_template('index.html',err='登录成功')
else:
return render_template('login.html',err='账号或者密码错误')
return render_template('login.html')
#注册
@users.route('register',methods = ['GET','POST'])
def register():
if request.method == 'POST':
name = request.form.get('name')
pwd = request.form.get('pwd')
pwd1 = request.form.get('pwd1')
print(name ,pwd,pwd1)
if not all([name, pwd , pwd1]):
# print('没有输入')
return render_template('register.html',err='输入不完整')
if pwd != pwd1:
# print('ok')
return render_template('register.html',err = '密码两次输入不一样!')
a = Users.query.filter_by(name=name).all()
if not a:
try:
new_book = Users(name=name, pwd=pwd)
db.session.add(new_book)
db.session.commit()
print('ok')
return render_template('register.html', err='注册成功')
except Exception as e:
print ("注册失败")
db.session.rollback()
return render_template('register.html', err='注册失败')
else:
return render_template('register.html', err='改用户已存在!')
return render_template('register.html')
#注销
@users.route('logout',methods = ['GET','POST'])
def logout():
if request.method =='POST':
name = request.form.get('name')
if not name:
return render_template('logout.html',err='注意不能为空!')
a = Users.query.first(name=name)
if a:
db.session.delete()
db.session.commit()
print('注销成功')
else:
return render_template('logout.html',err='用户不存在!')
return render_template('logout.html')
#添加个人信息
@users.route('add_inio',methods = ['GET','POST'])
def add_inio():
if request.method =='POST':
name = request.form.get('name')
email = request.form.get('email')
phone = request.form.get('phone')
addr = request.form.get('addr')
create = request.form.get('create_time')
if not all([email,phone,addr,create,name]):
return render_template('add_inio.html',err='检查数据的完整性')
aa = Users.query.filter_by(name = name).first()
aa.email=email
aa.phone=phone
aa.addr=addr
aa.create=create
db.session.commit()
return render_template('add_inio.html',err='添加成功')
return render_template('add_inio.html')
#修改个人信息
@users.route('alter _inio',methods = ['GET','POST'])
def alter_inio():
if request.method == 'POST':
name = request.form.get('name')
pwd = request.form.get('pwd')
email = request.form.get('email')
phone = request.form.get('phone')
addr = request.form.get('addr')
create_time = request.form.get('create_time')
if not all([name,pwd,email,phone,addr,create_time]):
return render_template('alter _inio.html',err='检查数据的完整性!')
aa = Users.query.filter_by(name=name).first()
aa.email = email
aa.pwd = pwd
aa.phone = phone
aa.addr = addr
aa.create = create_time
db.session.commit()
return render_template('alter _inio.html', err='添加成功')
else:
a = Users.query.all()
return render_template('alter _inio.html',a=a)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。