37创客科创中心

 找回密码
 立即注册
查看: 1304|回复: 4

240623文田组:siot的message实战

  [复制链接]

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
发表于 2024-6-23 00:16:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x



针对siot2.0的message消息表进行操作
1、数据模型
  1. '''模型message'''
  2. class message(db.Model):
  3.     id = db.Column(db.Integer, primary_key=True)
  4.     username = db.Column(db.String(80), unique=True, nullable=False)
  5.     device_id = db.Column(db.String(120), nullable=False)
  6.     topic_name = db.Column(db.String(120), nullable=False)
  7.     content = db.Column(db.String(120), nullable=False)
复制代码


2、数据表单
  1. '''表单FormMessage'''
  2. class FormMessage(FlaskForm):
  3.     id = IntegerField('编号')
  4.     username = StringField("用户")
  5.     device_id = StringField("设备")
  6.     topic_name = StringField('主题')
  7.     content = StringField('内容')
  8.     submit = SubmitField("确定")
  9.     Cancel = SubmitField("取消")
复制代码


增删改查预设模板
查:
  1. @app.route('/Mview<id>', methods=['GET', 'POST'])
  2. def Mview(id):
  3.     return '增加数据预设模块:Mview'
复制代码
改:
  1. @app.route('/Medit<id>', methods=['GET', 'POST'])
  2. def Medit(id):
  3.     return '增加数据预设模块:Medit'
复制代码
删:
  1. @app.route('/Mdel<id>', methods=['GET', 'POST'])
  2. def Mdel(id):
  3.     return '增加数据预设模块:Mdel'
复制代码
增:
  1. @app.route('/Mnew', methods=['GET', 'POST'])
  2. def Mnew():
  3.     return '增加数据预设模块:Mnew'
复制代码





3、list列表数据展示
模板:templates/pub_list_message.html
  1. {% extends 'base.html' %}
  2. {% from 'bootstrap5/table.html' import render_table %}
  3. {% from 'bootstrap5/pagination.html' import render_pager, render_pagination %}
  4. {% block content %}
  5.     <h2>{{ title }}</h2>
  6.     {{ render_table(messages,titles, show_actions=True, model=Message,
  7. view_url=('Mview', [('id', ':id')]),edit_url=('Medit', [('id', ':id')]),delete_url=('Mdel', [('id', ':id')]),new_url=url_for('Mnew')) }}
  8.     {{ render_pagination(pagination) }}
  9. {% endblock %}
复制代码
功能函数:fun_message
  1. @app.route("/m")
  2. # @login_required
  3. def fun_message():
  4.     titles = [
  5.         ("id", "编号"),
  6.         ("username", "用户名"),
  7.         ("device_id", "设备号"),
  8.         ("topic_name", "主题名"),
  9.         ("content", "内容"),
  10.     ]  # 自定义标题
  11.     page = request.args.get("page", 1, type=int)
  12.     pagination = message.query.paginate(page=page, per_page=5)
  13.     user = pagination.items
  14.     print(user)
  15.     return render_template(
  16.         "pub_list_message.html",
  17.         pagination=pagination,
  18.         titles=titles,
  19.         messages=user,
  20.         Message=message,
  21.         title="37创客siot2.0-message消息",
  22.     )
复制代码


4、查看Mview

  1. @app.route('/Mview<id>', methods=['GET', 'POST'])
  2. def Mview(id):
  3.     # return '查看数据预设模块:Mview'
  4.     msg = message.query.get(id) #根据id读取到相应数据
  5.     form = FormMessage()  # 表单:呈现数据
  6.     form.id.data = msg.id
  7.     form.username.data = msg.username
  8.     form.topic_name.data = msg.topic_name
  9.     form.device_id.data = msg.device_id
  10.     form.content.data = msg.content
  11.     if form.validate_on_submit():
  12.         return redirect(url_for("fun_message"))
  13.     if msg:
  14.         return render_template('pub_view.html', form=form, message=msg)
  15.     return f'没有对应数据 {id} 存在. 返回 <a href="/">table</a>.'
复制代码


5、修改Medit
  1. @app.route('/Medit<id>', methods=['GET', 'POST'])
  2. def Medit(id):
  3.     # return '增加数据预设模块:Medit'
  4.     # 第一步:定义表单和获取数据
  5.     form = FormMessage()
  6.     aiuser = message.query.get(id)
  7.     # 第三步:点击保存数据
  8.     if form.validate_on_submit():
  9.         # 获取页面数据到数据对象模型
  10.         aiuser.username = form.username.data
  11.         aiuser.device_id = form.device_id.data
  12.         aiuser.topic_name = form.topic_name.data
  13.         aiuser.content = form.content.data
  14.         db.session.commit()  # 提交保存数据
  15.         flash("用户信息已经更新!")  # 提示数据操作状态
  16.         return redirect(url_for("fun_message"))  # 定向到列表函数页面
  17.     # 第二步:读取数据显示处理
  18.     # 把数据发送到页面表单中
  19.     form.username.data = aiuser.username
  20.     form.topic_name.data = aiuser.topic_name
  21.     form.content.data = aiuser.content
  22.     form.device_id.data = aiuser.device_id
  23.     form.id.data = aiuser.id
  24.     # 提示操作情况
  25.     flash("用户信息读取完成!")
  26.     # 数据显示页面渲染
  27.     return render_template('pub_edit.html', form=form, title='编辑')
复制代码


6、删除Mdel
  1. @app.route('/Mdel<id>', methods=['GET', 'POST'])
  2. def Mdel(id):
  3.     # return '增加数据预设模块:Mdel'
  4.     aiuser = message.query.get(id)
  5.     flash(f'编号:  {id} --{aiuser.username}-----{aiuser.topic_name}-----{aiuser.content}-----的用户数据删除完成.')
  6.     if aiuser:
  7.         db.session.delete(aiuser)
  8.         db.session.commit()
  9.         return redirect(url_for("fun_message"))
  10.     return f'提示: {id} 数据不存在无法删除. 返回 <a href="/t">表格</a>.'
复制代码


7、新增Mnew
  1. @app.route('/Mnew', methods=['GET', 'POST'])
  2. def Mnew():
  3.     # return '增加数据预设模块:Mnew'
  4.     form = FormMessage()
  5.     aiuser = message()
  6.     if form.validate_on_submit():
  7.         content = form.content.data
  8.         username = form.username.data
  9.         topic_name = form.topic_name.data
  10.         device_id = form.device_id.data
  11.         id = form.id.data
  12.         user = message(id=id, username=username, topic_name=topic_name, content=content,device_id=device_id)
  13.         db.session.add(user)
  14.         db.session.commit()
  15.         flash("你的信息已经保存!")
  16.         return redirect(url_for("fun_message"))
  17.     return render_template('pub_new.html', form=form, title='新增')
复制代码














回复

使用道具 举报

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
 楼主| 发表于 2024-6-23 15:19:14 | 显示全部楼层
程序文件240623.py


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
 楼主| 发表于 2024-6-23 15:25:58 | 显示全部楼层
初始程序app240616.py
  1. from flask import Flask, render_template, redirect, url_for, request, flash
  2. from flask_login import (
  3.     LoginManager,
  4.     UserMixin,
  5.     login_user,
  6.     login_required,
  7.     logout_user,
  8.     current_user,
  9. )
  10. from flask_sqlalchemy import SQLAlchemy
  11. from flask_bootstrap import Bootstrap5, SwitchField
  12. from flask_wtf import FlaskForm, CSRFProtect
  13. from wtforms.fields import *

  14. app = Flask(__name__)
  15. app.config["SECRET_KEY"] = "20200808"
  16. app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///siot.db"
  17. # 设置按钮默认样式和尺寸参数
  18. app.config['BOOTSTRAP_BTN_STYLE'] = 'primary'
  19. app.config['BOOTSTRAP_BTN_SIZE'] = 'sm'
  20. # 设置表格操作按钮
  21. app.config['BOOTSTRAP_TABLE_VIEW_TITLE'] = 'Read读取数据'
  22. app.config['BOOTSTRAP_TABLE_EDIT_TITLE'] = 'Update修改数据'
  23. app.config['BOOTSTRAP_TABLE_DELETE_TITLE'] = 'Remove删除数据'
  24. app.config['BOOTSTRAP_TABLE_NEW_TITLE'] = 'Create新增数据'

  25. db = SQLAlchemy(app)
  26. # 实例化UI bootstrap5
  27. bootstrap = Bootstrap5(app)
  28. # 跨域访问实例化
  29. csrf = CSRFProtect(app)
  30. # 登录授权初始化
  31. login_manager = LoginManager()
  32. login_manager.init_app(app)
  33. login_manager.login_view = "login"
  34. login_manager.login_message = "请先登录"


  35. ### 创建 User 模型 继承了usermixin和model
  36. class LoginUser(UserMixin, db.Model):
  37.     id = db.Column(db.Integer, primary_key=True)
  38.     username = db.Column(db.String(80), unique=True, nullable=False)
  39.     password = db.Column(db.String(120), nullable=False)


  40. ### 创建 User 模型 继承了usermixin和model
  41. class User(UserMixin, db.Model):
  42.     id = db.Column(db.Integer, primary_key=True)
  43.     username = db.Column(db.String(80), unique=True, nullable=False)
  44.     password = db.Column(db.String(120), nullable=False)


  45. # 与siot数据库中的topic主题表对应
  46. class topic(db.Model):
  47.     id = db.Column(db.Integer, primary_key=True)
  48.     name = db.Column(db.String(80), unique=True, nullable=False)
  49.     username = db.Column(db.String(120), nullable=False)
  50.     description = db.Column(db.String(120), nullable=False)


  51. class FormTopic(FlaskForm):
  52.     id = IntegerField('编号')
  53.     name = StringField("主题")
  54.     username = StringField("用户")
  55.     description = StringField("描述")
  56.     submit = SubmitField("提交")
  57.     Cancel = SubmitField("取消")


  58. @app.route("/")
  59. @app.route("/t")  # 浏览器访问使用
  60. # @login_required
  61. def fun_topic():
  62.     titles = [
  63.         ("id", "编号"),
  64.         ("name", "主题"),
  65.         ("username", "用户"),
  66.         ("description", "描述"),
  67.     ]  # 自定义标题
  68.     page = request.args.get("page", 1, type=int)
  69.     pagination = topic.query.paginate(page=page, per_page=5)
  70.     user = pagination.items
  71.     print(user)
  72.     return render_template(
  73.         "pub_list.html",
  74.         pagination=pagination,
  75.         titles=titles,
  76.         messages=user,
  77.         Message=topic,
  78.         title="37创客siot2.0-topic主题",
  79.     )

  80. @app.route('/Tview/<id>', methods=['GET', 'POST'])
  81. def Tview(id):
  82.     aiuser = topic.query.get(id) #topic对象模型,根据id从数据库读取数据
  83.     form = FormTopic()#表单
  84.     form.id.data = aiuser.id
  85.     form.name.data = aiuser.name
  86.     form.username.data = aiuser.username
  87.     form.description.data = aiuser.description
  88.     if form.validate_on_submit():
  89.         return redirect(url_for("fun_topic"))
  90.     if aiuser:
  91.         return render_template('pub_view.html', form=form, message=aiuser)
  92.     return f'没有对应数据 {id} 存在. 返回 <a href="/">table</a>.'


  93. # 编辑数据----------------------------------------------------------------------
  94. @app.route('/Tedit/<id>', methods=['GET', 'POST'])
  95. def Tedit(id):
  96.     # 第一步:定义表单和获取数据
  97.     form = FormTopic()
  98.     aiuser = topic.query.get(id)
  99.     # 第三步:点击保存数据
  100.     if form.validate_on_submit():
  101.         # 获取页面数据到数据对象模型
  102.         aiuser.username = form.username.data
  103.         aiuser.name = form.name.data
  104.         aiuser.description = form.description.data
  105.         db.session.commit()  # 提交保存数据
  106.         flash("用户信息已经更新!")  # 提示数据操作状态
  107.         return redirect(url_for("fun_topic"))  # 定向到列表函数页面
  108.     # 第二步:读取数据显示处理
  109.     # 把数据发送到页面表单中
  110.     form.username.data = aiuser.username
  111.     form.name.data = aiuser.name
  112.     form.description.data = aiuser.description
  113.     form.id.data = aiuser.id
  114.     # 提示操作情况
  115.     flash("用户信息读取完成!")
  116.     # 数据显示页面渲染
  117.     return render_template('pub_edit.html', form=form, title='编辑')

  118. # 删除数据----------------------------------------------------------------------
  119. @app.route('/Tdelete/<id>', methods=['GET', 'POST'])
  120. def Tdelete(id):
  121.     aiuser = topic.query.get(id)
  122.     flash(f'编号:  {id} --{aiuser.username}-----{aiuser.name}-----的用户数据删除完成.')
  123.     if aiuser:
  124.         db.session.delete(aiuser)
  125.         db.session.commit()
  126.         return redirect(url_for("fun_topic"))
  127.     return f'提示: {id} 数据不存在无法删除. 返回 <a href="/t">表格</a>.'

  128. # # 新增数据----------------------------------------------------------------------
  129. # @app.route('/Tnew', methods=['GET', 'POST'])
  130. # def Tnew():
  131. #     return '增加数据预设模块:Tnew'

  132. # 新增数据----------------------------------------------------------------------
  133. @app.route('/Tnew', methods=['GET', 'POST'])
  134. def Tnew():
  135.     form = FormTopic()
  136.     aiuser = topic()
  137.     if form.validate_on_submit():
  138.         ms = form.description.data
  139.         uname = form.username.data
  140.         mz = form.name.data
  141.         id = form.id.data
  142.         user = topic(id=id, name=mz, username=uname,description=ms)
  143.         db.session.add(user)
  144.         db.session.commit()
  145.         flash("你的信息已经保存!")
  146.         return redirect(url_for("fun_topic"))
  147.     return render_template('pub_new.html', form=form, title='新增')






  148. # ==================================================================================================
  149. '''模型message'''
  150. class message(db.Model):
  151.     id = db.Column(db.Integer, primary_key=True)
  152.     username = db.Column(db.String(80), unique=True, nullable=False)
  153.     device_id = db.Column(db.String(120), nullable=False)
  154.     topic_name = db.Column(db.String(120), nullable=False)
  155.     content = db.Column(db.String(120), nullable=False)
  156. '''表单FormMessage'''
  157. class FormMessage(FlaskForm):
  158.     id = IntegerField('编号')
  159.     username = StringField("用户")
  160.     device_id = StringField("设备")
  161.     topic_name =StringField('主题')
  162.     content =StringField('内容')
  163.     submit = SubmitField("确定")
  164.     Cancel = SubmitField("取消")

  165. @app.route("/m")
  166. # @login_required
  167. def fun_message():
  168.     titles = [
  169.         ("id", "编号"),
  170.         ("username", "用户名"),
  171.         ("device_id", "设备号"),
  172.         ("topic_name", "主题名"),
  173.         ("content", "内容"),
  174.     ]  # 自定义标题
  175.     page = request.args.get("page", 1, type=int)
  176.     pagination = message.query.paginate(page=page, per_page=5)
  177.     user = pagination.items
  178.     print(user)
  179.     return render_template(
  180.         "list.html",
  181.         pagination=pagination,
  182.         titles=titles,
  183.         messages=user,
  184.         Message=message,
  185.         title="37创客siot2.0-message消息",
  186.     )





  187. # 表单定义
  188. # 登录表单
  189. class ULoginForm(FlaskForm):
  190.     username = StringField("用户名")
  191.     password = PasswordField("密码")
  192.     submit = SubmitField("登入")
  193.     Logout = SubmitField("退出")
  194.     Cancel = SubmitField("取消")


  195. # 编辑登录表单
  196. class ELoginForm(FlaskForm):
  197.     id = IntegerField('编号')
  198.     username = StringField("用户名")
  199.     password = StringField("密码")
  200.     submit = SubmitField("确定")
  201.     Cancel = SubmitField("取消")

  202. # 初始化数据库
  203. # # 初始化数据库数据========================================================================
  204. @app.route('/initdb')
  205. # @login_required
  206. def initdb():
  207.     # db.drop_all()
  208.     db.create_all()
  209.     for i in range(10):  #
  210.         u = LoginUser(
  211.             username=f'37ck{i + 1}',
  212.             password=f'20200808'
  213.         )
  214.         db.session.add(u)
  215.     db.session.commit()
  216.     # return "数据库初始化完成"
  217.     return redirect(url_for("index"))


  218. # ==============================显示User用户数据表所有数据==================================================================
  219. # ctrl+/ 注释代码
  220. # @app.route("/")
  221. @app.route('/l')
  222. # @login_required
  223. def index():
  224.     titles = [
  225.         ("id", "编号"),
  226.         ("username", "用户名"),
  227.         ("password", "密码"),
  228.     ]  # 自定义标题
  229.     page = request.args.get("page", 1, type=int)
  230.     pagination = LoginUser.query.paginate(page=page, per_page=5)
  231.     user = pagination.items
  232.     print(user)
  233.     return render_template(
  234.         "list_curd.html",
  235.         pagination=pagination,
  236.         titles=titles,
  237.         messages=user,
  238.         Message=LoginUser,
  239.         title="37创客授权用户",
  240.     )


  241. @app.route('/u')
  242. # @login_required
  243. def fun_user():
  244.     titles = [
  245.         ("id", "编号"),
  246.         ("username", "用户名"),
  247.         ("password", "密码"),
  248.     ]  # 自定义标题
  249.     page = request.args.get("page", 1, type=int)
  250.     pagination = User.query.paginate(page=page, per_page=5)
  251.     user = pagination.items
  252.     print(user)
  253.     return render_template(
  254.         "list.html",
  255.         pagination=pagination,
  256.         titles=titles,
  257.         messages=user,
  258.         Message=User,
  259.         title="37创客授权用户:user用户表",
  260.     )


  261. ''' 数据库操作部分代码'''


  262. # 新增数据----------------------------------------------------------------------
  263. @app.route('/new', methods=['GET', 'POST'])
  264. def new():
  265.     form = ELoginForm()
  266.     aiuser = User()
  267.     if form.validate_on_submit():
  268.         op = form.username.data
  269.         log = form.password.data
  270.         id = form.id.data
  271.         user = User(id=id, password=log, userrname=op)
  272.         db.session.add(user)
  273.         db.session.commit()
  274.         flash("你的信息已经保存!")
  275.         return redirect(url_for("index"))
  276.     return render_template('ai_new.html', form=form, title='新增')


  277. # 删除数据----------------------------------------------------------------------
  278. @app.route('/delete/<id>', methods=['GET', 'POST'])
  279. def delete(id):
  280.     aiuser = User.query.get(id)
  281.     flash(f'编号:  {id} --{aiuser.username}-----{aiuser.password}-----的用户数据删除完成.')
  282.     if aiuser:
  283.         db.session.delete(aiuser)
  284.         db.session.commit()
  285.         return redirect(url_for("index"))
  286.     return f'提示: {id} 数据不存在无法删除. 返回 <a href="/ai">表格</a>.'


  287. # 编辑数据----------------------------------------------------------------------
  288. @app.route('/edit/<id>', methods=['GET', 'POST'])
  289. def edit(id):
  290.     # 第一步:定义表单和获取数据
  291.     form = ELoginForm()
  292.     aiuser = User.query.get(id)
  293.     # 第三步:点击保存数据
  294.     if form.validate_on_submit():
  295.         # 获取页面数据到数据对象模型
  296.         aiuser.username = form.username.data
  297.         aiuser.password = form.password.data
  298.         db.session.commit()  # 提交保存数据
  299.         flash("用户信息已经更新!")  # 提示数据操作状态
  300.         return redirect(url_for("index"))  # 定向到列表函数页面
  301.     # 第二步:读取数据显示处理
  302.     # 把数据发送到页面表单中
  303.     form.username.data = aiuser.username
  304.     form.password.data = aiuser.password
  305.     form.id.data = aiuser.id
  306.     # 提示操作情况
  307.     flash("用户信息读取完成!")
  308.     # 数据显示页面渲染
  309.     return render_template('ai_edit.html', form=form, title='编辑')


  310. # 查看数据----------------------------------------------------------------------
  311. @app.route('/view/<id>', methods=['GET', 'POST'])
  312. def view(id):
  313.     aiuser = User.query.get(id)
  314.     form = ULoginForm()
  315.     # form.id.data = aiuser.id
  316.     form.username.data = aiuser.username
  317.     form.password.data = aiuser.password
  318.     if form.validate_on_submit():
  319.         return redirect(url_for("index"))
  320.     if aiuser:
  321.         return render_template('ai_View.html', form=form, message=aiuser)
  322.     return f'没有对应数据 {id} 存在. 返回 <a href="/ai">table</a>.'


  323. '''==========================================用户授权部分================================================================'''


  324. ### 用户加载函数
  325. @login_manager.user_loader
  326. def load_user(user_id):
  327.     return User.query.get(int(user_id))


  328. ### 登录视图
  329. # @app.route("/", methods=["GET", "POST"])
  330. @app.route("/login", methods=["GET", "POST"])
  331. def login():
  332.     form = ULoginForm()
  333.     if request.method == "POST":
  334.         username = request.form["username"]
  335.         password = request.form["password"]
  336.         user = User.query.filter_by(username=username, password=password).first()
  337.         if user:
  338.             login_user(user)
  339.             flash("登录成功!")
  340.             return redirect(url_for("index"))
  341.         else:
  342.             flash("用户不存在请核对")
  343.     flash("请输入你的用户名和密码!")
  344.     return render_template("ulogin.html", form=form, title="37创客登录")


  345. ### 退出操作
  346. @app.route("/logout")
  347. @login_required
  348. def logout():
  349.     logout_user()
  350.     return redirect(url_for("login"))


  351. if __name__ == "__main__":
  352.     app.run(host="0.0.0.0", port=84, debug=True)
复制代码




回复

使用道具 举报

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
 楼主| 发表于 2024-6-23 09:54:28 | 显示全部楼层
数据库文件附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

194

主题

324

帖子

2399

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2399
 楼主| 发表于 2024-6-23 10:05:36 | 显示全部楼层
模板文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|37创客科创中心

GMT+8, 2025-12-10 05:14 , Processed in 0.290260 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表