• flask+layui编写后端管理系统


    项目结构如下:

     model.py如下,需要在数据库里创建模型

    import json
    
    from sqlalchemy import Column,Integer,String,UniqueConstraint,Index
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import create_engine
    import config
    from sqlalchemy.orm import scoped_session, sessionmaker
    
    engine = create_engine(config.SQLALCHEMY_DATABASE_URI)
    Base = declarative_base()
    
    
    class User(Base):
        __tablename__ = 'users'
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
        age = Column(Integer)
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __str__(self):
            info = {
                "id": self.id,
                "name": self.name,
                "age": self.age
            }
            return json.dumps(info)
    
    # Base.metadata.create_all(engine)
    # Base.metadata.drop_all(engine)
    def query():
        sm = sessionmaker(bind=engine)
        session = sm()
        all = session.query(User).all()
        return all

    app.py文件内容如下:

    import json
    from flask_paginate import Pagination,get_page_parameter,request
    from flask import Flask,render_template
    from flask_sqlalchemy import SQLAlchemy
    app = Flask(__name__)
    import config
    from model.UserModel import User,query
            
        
    
    @app.route('/')
    def hello_world():
        return render_template("index.html")
    @app.route('/list')
    def ShowData():
        pageNum = int(request.args.get("pageNum"))
        pageSize = int(request.args.get("pageSize"))
        data_list = []
        all = query()
        for res in all:
            datas = {
                "id": res.id,
                "name": res.name,
                "age": res.age
            }
            data_list.append(datas)
        info = {"code": 0, "message": "OK", "total": len(data_list), "data": data_list[(pageNum - 1) * pageSize:pageNum * pageSize]}
        print(info)
        return info
    
    
    if __name__ == '__main__':
        app.run(debug=True,)
        # db.create_all()

    数据库配置config.py如下:

    host = 'xxx.xxx.xxx.xxx'
    port = 3306
    username = 'root'
    password = 'root'
    DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=username,password=password, host=host,port=port, db='testdb')
    SQLALCHEMY_DATABASE_URI = DB_URI
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = True

    index.html内容如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="/static/layui.js"></script>
        <link rel="stylesheet" href="/static/css/layui.css">
    </head>
    <body>
    <div class="layui-layout layui-layout-admin">
      <div class="layui-header">
        <div class="layui-logo layui-hide-xs layui-bg-black">layout demo</div>
        <!-- 头部区域(可配合layui 已有的水平导航) -->
        <ul class="layui-nav layui-layout-left">
        </ul>
        <ul class="layui-nav layui-layout-right">
          <li class="layui-nav-item layui-hide layui-show-md-inline-block">
            <a href="javascript:;">
              <img src="//tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg" class="layui-nav-img">
              tester
            </a>
            <dl class="layui-nav-child">
              <dd><a href="">Your Profile</a></dd>
              <dd><a href="">Settings</a></dd>
              <dd><a href="">Sign out</a></dd>
            </dl>
          </li>
          <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
            <a href="javascript:;">
              <i class="layui-icon layui-icon-more-vertical"></i>
            </a>
          </li>
        </ul>
      </div>
    
      <div class="layui-side layui-bg-black">
        <div class="layui-side-scroll">
          <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
          <ul class="layui-nav layui-nav-tree" lay-filter="test">
            <li class="layui-nav-item layui-nav-itemed">
              <a class="" href="javascript:;">menu group 1</a>
              <dl class="layui-nav-child">
                <dd><a href="javascript:;">menu 1</a></dd>
                <dd><a href="javascript:;">menu 2</a></dd>
                <dd><a href="javascript:;">menu 3</a></dd>
                <dd><a href="">the links</a></dd>
              </dl>
            </li>
            <li class="layui-nav-item">
              <a href="javascript:;">menu group 2</a>
              <dl class="layui-nav-child">
                <dd><a href="javascript:;">list 1</a></dd>
                <dd><a href="javascript:;">list 2</a></dd>
                <dd><a href="">超链接</a></dd>
              </dl>
            </li>
            <li class="layui-nav-item"><a href="javascript:;">click menu item</a></li>
            <li class="layui-nav-item"><a href="">the links</a></li>
          </ul>
        </div>
      </div>
    
      <div class="layui-body">
        <table class="layui-hide" id="test"></table>
      </div>
        <div id="page"></div>
    
      <div class="layui-footer">
        <!-- 底部固定区域 -->
        底部固定区域
      </div>
    </div>
    <script>
    //JS
    layui.use(['element', 'layer', 'util','table','laypage'], function(){
      var element = layui.element
      ,layer = layui.layer
      ,util = layui.util
      ,$ = layui.$
      ,laypage = layui.laypage
    
      var table = layui.table;
    
      table.render({
         elem: '#test'
        ,url: '/list'
        ,limit: 4
        ,page: true //是否显示分页
        , request: {
            pageName: 'pageNum' //页码的参数名称,默认:page
              ,limitName: 'pageSize' //每页数据量的参数名,默认:limit
    
        }
        ,cols: [[ //标题栏
          {field: 'id', title: 'ID',  80, sort: true}
          ,{field: 'name', title: '姓名',  120}
          ,{field: 'age', title: '年纪', minWidth: 150}
        ]]
        ,skin: 'line' //表格风格
        ,toolbar: 'default'
        ,parseData: function(res){ //将原始数据解析成 table 组件所规定的数据
          return {
            "code": res.code, //解析接口状态
            "msg": res.message, //解析提示文本
            "count": res.total, //解析数据长度
            "data": res.data //解析数据列表
          };
        }
      });
    
      //头部事件
      util.event('lay-header-event', {
        //左侧菜单事件
        menuLeft: function(othis){
          layer.msg('展开左侧菜单的操作', {icon: 0});
        }
        ,menuRight: function(){
          layer.open({
            type: 1
            ,content: '<div style="padding: 15px;">处理右侧面板的操作</div>'
            ,area: ['260px', '100%']
            ,offset: 'rt'
            ,anim: 5
            ,shadeClose: true
          });
        }
      });
    
    });
    </script>
    
    
    </body>
    </html>

    最终效果图如下:

    分页功能 

    需要注意的是如果想实现分页在index.html中需要加入请求的页码和开启分页功能如下:

    在后台需要得到分页的页码和当前页,如下:

  • 相关阅读:
    如何快速给pod添加健康检查?
    如何快速下载vagrant的box?
    如何快速新建sql的demo环境?
    如何快速将某个用户添加sudo免密以及docker权限?
    七、Docker+nginx
    六、Docker+Gitlab
    五、Docker+Sqlserver
    四、Docker+Tomcat
    Docker 内程序时间设置,很重要
    三、Docker镜像的相关操作
  • 原文地址:https://www.cnblogs.com/fengzi7314/p/15665753.html
Copyright © 2020-2023  润新知