微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flask框架

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] 举报,一经查实,本站将立刻删除。

相关推荐