|
|

楼主 |
发表于 2024-6-23 15:25:58
|
显示全部楼层
初始程序app240616.py
- from flask import Flask, render_template, redirect, url_for, request, flash
- from flask_login import (
- LoginManager,
- UserMixin,
- login_user,
- login_required,
- logout_user,
- current_user,
- )
- from flask_sqlalchemy import SQLAlchemy
- from flask_bootstrap import Bootstrap5, SwitchField
- from flask_wtf import FlaskForm, CSRFProtect
- from wtforms.fields import *
- app = Flask(__name__)
- app.config["SECRET_KEY"] = "20200808"
- app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///siot.db"
- # 设置按钮默认样式和尺寸参数
- app.config['BOOTSTRAP_BTN_STYLE'] = 'primary'
- app.config['BOOTSTRAP_BTN_SIZE'] = 'sm'
- # 设置表格操作按钮
- app.config['BOOTSTRAP_TABLE_VIEW_TITLE'] = 'Read读取数据'
- app.config['BOOTSTRAP_TABLE_EDIT_TITLE'] = 'Update修改数据'
- app.config['BOOTSTRAP_TABLE_DELETE_TITLE'] = 'Remove删除数据'
- app.config['BOOTSTRAP_TABLE_NEW_TITLE'] = 'Create新增数据'
- db = SQLAlchemy(app)
- # 实例化UI bootstrap5
- bootstrap = Bootstrap5(app)
- # 跨域访问实例化
- csrf = CSRFProtect(app)
- # 登录授权初始化
- login_manager = LoginManager()
- login_manager.init_app(app)
- login_manager.login_view = "login"
- login_manager.login_message = "请先登录"
- ### 创建 User 模型 继承了usermixin和model
- class LoginUser(UserMixin, db.Model):
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(80), unique=True, nullable=False)
- password = db.Column(db.String(120), nullable=False)
- ### 创建 User 模型 继承了usermixin和model
- class User(UserMixin, db.Model):
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(80), unique=True, nullable=False)
- password = db.Column(db.String(120), nullable=False)
- # 与siot数据库中的topic主题表对应
- class topic(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(80), unique=True, nullable=False)
- username = db.Column(db.String(120), nullable=False)
- description = db.Column(db.String(120), nullable=False)
- class FormTopic(FlaskForm):
- id = IntegerField('编号')
- name = StringField("主题")
- username = StringField("用户")
- description = StringField("描述")
- submit = SubmitField("提交")
- Cancel = SubmitField("取消")
- @app.route("/")
- @app.route("/t") # 浏览器访问使用
- # @login_required
- def fun_topic():
- titles = [
- ("id", "编号"),
- ("name", "主题"),
- ("username", "用户"),
- ("description", "描述"),
- ] # 自定义标题
- page = request.args.get("page", 1, type=int)
- pagination = topic.query.paginate(page=page, per_page=5)
- user = pagination.items
- print(user)
- return render_template(
- "pub_list.html",
- pagination=pagination,
- titles=titles,
- messages=user,
- Message=topic,
- title="37创客siot2.0-topic主题",
- )
- @app.route('/Tview/<id>', methods=['GET', 'POST'])
- def Tview(id):
- aiuser = topic.query.get(id) #topic对象模型,根据id从数据库读取数据
- form = FormTopic()#表单
- form.id.data = aiuser.id
- form.name.data = aiuser.name
- form.username.data = aiuser.username
- form.description.data = aiuser.description
- if form.validate_on_submit():
- return redirect(url_for("fun_topic"))
- if aiuser:
- return render_template('pub_view.html', form=form, message=aiuser)
- return f'没有对应数据 {id} 存在. 返回 <a href="/">table</a>.'
- # 编辑数据----------------------------------------------------------------------
- @app.route('/Tedit/<id>', methods=['GET', 'POST'])
- def Tedit(id):
- # 第一步:定义表单和获取数据
- form = FormTopic()
- aiuser = topic.query.get(id)
- # 第三步:点击保存数据
- if form.validate_on_submit():
- # 获取页面数据到数据对象模型
- aiuser.username = form.username.data
- aiuser.name = form.name.data
- aiuser.description = form.description.data
- db.session.commit() # 提交保存数据
- flash("用户信息已经更新!") # 提示数据操作状态
- return redirect(url_for("fun_topic")) # 定向到列表函数页面
- # 第二步:读取数据显示处理
- # 把数据发送到页面表单中
- form.username.data = aiuser.username
- form.name.data = aiuser.name
- form.description.data = aiuser.description
- form.id.data = aiuser.id
- # 提示操作情况
- flash("用户信息读取完成!")
- # 数据显示页面渲染
- return render_template('pub_edit.html', form=form, title='编辑')
- # 删除数据----------------------------------------------------------------------
- @app.route('/Tdelete/<id>', methods=['GET', 'POST'])
- def Tdelete(id):
- aiuser = topic.query.get(id)
- flash(f'编号: {id} --{aiuser.username}-----{aiuser.name}-----的用户数据删除完成.')
- if aiuser:
- db.session.delete(aiuser)
- db.session.commit()
- return redirect(url_for("fun_topic"))
- return f'提示: {id} 数据不存在无法删除. 返回 <a href="/t">表格</a>.'
- # # 新增数据----------------------------------------------------------------------
- # @app.route('/Tnew', methods=['GET', 'POST'])
- # def Tnew():
- # return '增加数据预设模块:Tnew'
- # 新增数据----------------------------------------------------------------------
- @app.route('/Tnew', methods=['GET', 'POST'])
- def Tnew():
- form = FormTopic()
- aiuser = topic()
- if form.validate_on_submit():
- ms = form.description.data
- uname = form.username.data
- mz = form.name.data
- id = form.id.data
- user = topic(id=id, name=mz, username=uname,description=ms)
- db.session.add(user)
- db.session.commit()
- flash("你的信息已经保存!")
- return redirect(url_for("fun_topic"))
- return render_template('pub_new.html', form=form, title='新增')
- # ==================================================================================================
- '''模型message'''
- class message(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(80), unique=True, nullable=False)
- device_id = db.Column(db.String(120), nullable=False)
- topic_name = db.Column(db.String(120), nullable=False)
- content = db.Column(db.String(120), nullable=False)
- '''表单FormMessage'''
- class FormMessage(FlaskForm):
- id = IntegerField('编号')
- username = StringField("用户")
- device_id = StringField("设备")
- topic_name =StringField('主题')
- content =StringField('内容')
- submit = SubmitField("确定")
- Cancel = SubmitField("取消")
- @app.route("/m")
- # @login_required
- def fun_message():
- titles = [
- ("id", "编号"),
- ("username", "用户名"),
- ("device_id", "设备号"),
- ("topic_name", "主题名"),
- ("content", "内容"),
- ] # 自定义标题
- page = request.args.get("page", 1, type=int)
- pagination = message.query.paginate(page=page, per_page=5)
- user = pagination.items
- print(user)
- return render_template(
- "list.html",
- pagination=pagination,
- titles=titles,
- messages=user,
- Message=message,
- title="37创客siot2.0-message消息",
- )
- # 表单定义
- # 登录表单
- class ULoginForm(FlaskForm):
- username = StringField("用户名")
- password = PasswordField("密码")
- submit = SubmitField("登入")
- Logout = SubmitField("退出")
- Cancel = SubmitField("取消")
- # 编辑登录表单
- class ELoginForm(FlaskForm):
- id = IntegerField('编号')
- username = StringField("用户名")
- password = StringField("密码")
- submit = SubmitField("确定")
- Cancel = SubmitField("取消")
- # 初始化数据库
- # # 初始化数据库数据========================================================================
- @app.route('/initdb')
- # @login_required
- def initdb():
- # db.drop_all()
- db.create_all()
- for i in range(10): #
- u = LoginUser(
- username=f'37ck{i + 1}',
- password=f'20200808'
- )
- db.session.add(u)
- db.session.commit()
- # return "数据库初始化完成"
- return redirect(url_for("index"))
- # ==============================显示User用户数据表所有数据==================================================================
- # ctrl+/ 注释代码
- # @app.route("/")
- @app.route('/l')
- # @login_required
- def index():
- titles = [
- ("id", "编号"),
- ("username", "用户名"),
- ("password", "密码"),
- ] # 自定义标题
- page = request.args.get("page", 1, type=int)
- pagination = LoginUser.query.paginate(page=page, per_page=5)
- user = pagination.items
- print(user)
- return render_template(
- "list_curd.html",
- pagination=pagination,
- titles=titles,
- messages=user,
- Message=LoginUser,
- title="37创客授权用户",
- )
- @app.route('/u')
- # @login_required
- def fun_user():
- titles = [
- ("id", "编号"),
- ("username", "用户名"),
- ("password", "密码"),
- ] # 自定义标题
- page = request.args.get("page", 1, type=int)
- pagination = User.query.paginate(page=page, per_page=5)
- user = pagination.items
- print(user)
- return render_template(
- "list.html",
- pagination=pagination,
- titles=titles,
- messages=user,
- Message=User,
- title="37创客授权用户:user用户表",
- )
- ''' 数据库操作部分代码'''
- # 新增数据----------------------------------------------------------------------
- @app.route('/new', methods=['GET', 'POST'])
- def new():
- form = ELoginForm()
- aiuser = User()
- if form.validate_on_submit():
- op = form.username.data
- log = form.password.data
- id = form.id.data
- user = User(id=id, password=log, userrname=op)
- db.session.add(user)
- db.session.commit()
- flash("你的信息已经保存!")
- return redirect(url_for("index"))
- return render_template('ai_new.html', form=form, title='新增')
- # 删除数据----------------------------------------------------------------------
- @app.route('/delete/<id>', methods=['GET', 'POST'])
- def delete(id):
- aiuser = User.query.get(id)
- flash(f'编号: {id} --{aiuser.username}-----{aiuser.password}-----的用户数据删除完成.')
- if aiuser:
- db.session.delete(aiuser)
- db.session.commit()
- return redirect(url_for("index"))
- return f'提示: {id} 数据不存在无法删除. 返回 <a href="/ai">表格</a>.'
- # 编辑数据----------------------------------------------------------------------
- @app.route('/edit/<id>', methods=['GET', 'POST'])
- def edit(id):
- # 第一步:定义表单和获取数据
- form = ELoginForm()
- aiuser = User.query.get(id)
- # 第三步:点击保存数据
- if form.validate_on_submit():
- # 获取页面数据到数据对象模型
- aiuser.username = form.username.data
- aiuser.password = form.password.data
- db.session.commit() # 提交保存数据
- flash("用户信息已经更新!") # 提示数据操作状态
- return redirect(url_for("index")) # 定向到列表函数页面
- # 第二步:读取数据显示处理
- # 把数据发送到页面表单中
- form.username.data = aiuser.username
- form.password.data = aiuser.password
- form.id.data = aiuser.id
- # 提示操作情况
- flash("用户信息读取完成!")
- # 数据显示页面渲染
- return render_template('ai_edit.html', form=form, title='编辑')
- # 查看数据----------------------------------------------------------------------
- @app.route('/view/<id>', methods=['GET', 'POST'])
- def view(id):
- aiuser = User.query.get(id)
- form = ULoginForm()
- # form.id.data = aiuser.id
- form.username.data = aiuser.username
- form.password.data = aiuser.password
- if form.validate_on_submit():
- return redirect(url_for("index"))
- if aiuser:
- return render_template('ai_View.html', form=form, message=aiuser)
- return f'没有对应数据 {id} 存在. 返回 <a href="/ai">table</a>.'
- '''==========================================用户授权部分================================================================'''
- ### 用户加载函数
- @login_manager.user_loader
- def load_user(user_id):
- return User.query.get(int(user_id))
- ### 登录视图
- # @app.route("/", methods=["GET", "POST"])
- @app.route("/login", methods=["GET", "POST"])
- def login():
- form = ULoginForm()
- if request.method == "POST":
- username = request.form["username"]
- password = request.form["password"]
- user = User.query.filter_by(username=username, password=password).first()
- if user:
- login_user(user)
- flash("登录成功!")
- return redirect(url_for("index"))
- else:
- flash("用户不存在请核对")
- flash("请输入你的用户名和密码!")
- return render_template("ulogin.html", form=form, title="37创客登录")
- ### 退出操作
- @app.route("/logout")
- @login_required
- def logout():
- logout_user()
- return redirect(url_for("login"))
- if __name__ == "__main__":
- app.run(host="0.0.0.0", port=84, debug=True)
复制代码
|
|