Python Flask+Bootstrap+Jinja2 构建轻量级企业内部系统平台框架

1.最近公司运维需求,学习python flask 满足环境治理系统的开发;入门如下;
 
 环境类型:
     Python 2.7.5         获取地址:https://www.python.org/downloads/ 
     Flask  1.0.2         
     pip 安装使用模快如下;
          flask==1.0.2
          request==1.0.2
          Jinja2==2.10
          Flask-Cors==3.0.6
          MySQL-python==1.2.3
     
     Bootstrap  4.0       获取地址:https://v4.bootcss.com/docs/4.0/getting-started/download/           
     
     
     开发IDE 工具

pycharm   Professional          获取地址:https://www.jetbrains.com/pycharm/
        
    
 2.启动flask 实例代码如下;
 代码功能如下:
        (1).访问允许跨域 
        (2).静态资源目录定义 
        (3).模板渲染;
        (4).路由解析 
        (5).用户表单提交和校验;
        (6).数据层处理;
 
 
 
 # -*- coding: utf-8 -*-
import sys
import time

from flask import Flask, request, render_template, Response
from flask_cors import CORS

from models import User

###需要安装 pip install -U flask-cors 模块# 解决跨域模块###

reload(sys)
sys.setdefaultencoding('utf-8')

##############定义静态文件存放路径########################
# app
app = Flask(import_name=__name__, static_folder='./static', static_url_path='/static',
            template_folder='./templates')
CORS(app, resources=r'/*')

# r'/*' 是通配符,让本服务器所有的URL 都允许跨域请求
#########
@app.route('/', methods=['GET', 'POST'])  ####默认首页###########
def index():
    class Person(object):
        Email = '[email protected]'
        gender = 'male'
        time = time.asctime(time.localtime(time.time()))

dell = Person()
    context = {
        'username': 'breaklinux',
        'password': '123456',
        'age': '25',
        'hobby': 'python',
        'person': dell,
        'wwwurl': {
            'baidu': 'www.baidu.com',
            'google': 'www.google.com'
        }
    }
    return render_template('html/index.html', **context)  #

##################命名规范flask 路由解析##############
@app.route('/naming', methods=['GET', 'POST'])
def naming():
        Query_tow = User()
        Naming_List_name =  Query_tow.Query_naming("环境治理类")
        Naming_List_name_nuber2 = Query_tow.Query_naming("发布规范类")
        return render_template('html/naming.html', Naming_List_name=Naming_List_name,
                           Naming_List_name_nuber2=Naming_List_name_nuber2)

@app.route('/create_naming', methods=['GET', 'POST'])
def create_naming():
    return render_template('html/create_naming.html')

@app.route("/sigin_naming", methods=['GET', 'POST'])
def sigin_naming():
    ##########get 方法######request.args
    ##########post 方法#####rquest.from######
    ################获取用户表单输入数据###########
    naming_name = request.args['naming_name']
    naming_url = request.args['naming_url']
    naming_type = request.args['naming_type']
    create_founder = request.args['naming_create_founder']

##################获取当前提交时间###################
    create_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

####################判断表单用户输入是否为空,为空跳转当前页面############
    if ("" == naming_name) or ("" == naming_url) or ("" == create_founder):
        return render_template('html/create_naming.html')
    else:
        #############实例化 models 文件 User 类和携带用户提交表单参数################
        user = User()
        user.save(naming_type,naming_name, naming_url, create_time, create_founder)  ##############调用class 类中save方法################
        return Response(u'新增成功' + "\n" "日期" + "\n" + create_time)

if __name__ == '__main__':
    app.run(
        host="0.0.0.0",
        port=80,
        debug=True
    )
    
2.views 视图展示层;
    
    <html>
<head>
    <meta charset="UTF-8">
    <title>嫦娥发布规范文档</title>
    <link rel="stylesheet" href="static/css/bootstrap.min.css">
    <script type="text/javascript" src="static/js/jquery.slim.min.js"></script>
    <script type="text/javascript" src="static/js/popper.min.js"></script>
    <script type=type="text/javascript" src="static/js/bootstrap.min.js"></script>
</head>
<style>
    body {
           background-color:#CCCCCC;
           margin:0px;
           padding:0px
      }

</style>
</head>
<div>
    <div>
          <a href='/naming'>
           <br>
             &nbsp;&nbsp; <input type="button" class="btn btn-info" value="嫦娥命名规范">
           </a>
        <hr >
        </div>
          <div>
          <br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
             <a href='/create_naming'>
            <input type="button" class="btn btn-primary" value="新建规范">
        </a>
          </div>
</div>
<br>
<br>
<div>
    <div>
        <div>
            <a href='/deploy'>
            <input type="button" class="btn  btn-success" value="环境部署">
        </a>
            <hr>
            <a href='/component'>
              <input type="button" class="btn btn-warning" value="组件管理">
                   </a>
               <hr>
           <a href='/container'>
              <input type="button" class="btn btn-secondary" value="容器模板">
           </a>
              <hr>
             <a href='/script'>
              <input type="button" class="btn btn-info" value="脚本管理 ">
           </a>
              <hr>
             <a href='/naming'>
              <input type="button" class="btn  btn-danger" value="命名规范">
           </a>

</div>

<div>

</div>
    </div>

<div>
        <div>
            <div>
                <div>
                <div style="height: 700px;width:auto">
                <h2>环境治理类</h2>
                <br>
                {% for item in Naming_List_name %}
                <button onclick="window.location.href='{{item[1]}}'" type="button" class="btn btn-info">{{item[0]
                    }}
                    &nbsp
                    <br>
                </button>
                {% endfor %}
                </div>
              </div>

</div>
            <div>
                <h2> 集成发布类</h2>
                <br>
                {% for item in Naming_List_name_nuber2 %}
                <button onclick="window.location.href='{{item[1]}}'" type="button" class="btn btn-danger">{{
                    item[0]}}
                </button>
                {% endfor %}
            </div>

</div>
    </div>

</div>
    </body>

3.数据层;

(1).数据层处理代码;

# -*- coding: utf-8 -*-
import MySQLdb
def get_conn():
    host = "192.168.xx.xx"
    port = 3306
    db = "Scier"
    user = "root"
    password = "123456"
    conn = MySQLdb.connect(host, user, password, db, port, charset='utf8')
    return conn

class User(object):

def save(self,type, name, url, create_time, create_founder):
            self.type = type
            self.name = name
            self.url = url
            self.create_time = create_time
            self.create_founder = create_founder
            conn = get_conn()
            cursor = conn.cursor()
            sql = ("insert into naming (type,name,url,create_time,create_founder) VALUES (%s,%s,%s,%s,%s)")
            data = (self.type, self.name, self.url, self.create_time, self.create_founder)
            try:
                cursor.execute(sql, data)
                conn.commit()
                cursor.close()
                conn.close()
            except:
                cursor.close()
                conn.close()
                return "Error: unable to table namin"

def Query_naming(self,type1):
           conn = get_conn()
           cursor = conn.cursor()
           self.type1 = type1
           # SQL 查询语句命名规范名称和url地址字段#######
           sql = "SELECT NAME,url FROM naming WHERE TYPE='%s'" % self.type1
           try:
                 # 执行SQL语句
                 cursor.execute(sql)
                 # 获取所有记录列表
                 results = cursor.fetchall()
                 cursor.close()
                 conn.close()
                 return  results
           except:
                 cursor.close()
                 conn.close()
                 return "Error: unable to fecth data"

(2).数据表结构; (和sql语句):

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `naming`
-- ----------------------------
DROP TABLE IF EXISTS `naming`;
CREATE TABLE `naming` (
  `create_time` datetime NOT NULL,
  `id` int(111) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(20) COLLATE utf8mb4_bin NOT NULL,
  `name` varchar(20) COLLATE utf8mb4_bin NOT NULL,
  `url` varchar(100) COLLATE utf8mb4_bin NOT NULL,
  `create_founder` varchar(20) COLLATE utf8mb4_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

4.视图页面效果;

原文地址:http://blog.51cto.com/breaklinux/2135271

时间: 2024-11-12 20:08:07

Python Flask+Bootstrap+Jinja2 构建轻量级企业内部系统平台框架的相关文章

Python Flask+Gentelella+Jinja2 快速完成企业内部系统平台快速布局;

1.最近公司运维需求,学习python flask 满足环境治理系统的开发 原生前端Bootstrap 也能满足需求,但是需要前端功基本功(html,css,js)等,折腾了2周发现 实在是太麻烦: 而且布局样式特别low 很难看 各种 按钮和样式效果实现特麻烦(哈哈,原谅我初学者吐槽下,Bootstrap 社区开发人别喷我,谢谢) 2.githup 意外发现一个 gentelella 这套后台模板; (非常强大和适用且美观,不用说立马拿下;) 源码获取地址:https://github.com

Spring MVC、Mybatis、Hibernate、Bootstrap、HTML5、jQuery、Spring Security安全权限、Lucene全文检索、Ehcache分布式缓存 、高性能、高并发【Java企业通用开发平台框架】

功能特点: 1.适配所有设备(PC.平板.手机等),兼容所有浏览器(Chrome.Firefox.Opera.Safari.IE6~IE11等),适用所有项目(MIS管理信息系统.OA办公系统.ERP企业资源规划系统.CRM客户关系管理系统.网站.管理后台等). 2.快速开发,敏捷的数据持久层解决方案. 2.1.事务自动处理. 2.2.O/R Mapping基于注解,零配置XML,便于维护,学习成本低. 2.3.接口和实现分离,不需写数据持久层代码,只需写接口,自动生成添加.修改.删除.排序.分

恩布企业IM 1.7 版本,企业内部通讯平台

恩布企业IM,开源企业IM,免费企业即时通讯,企业内部通讯平台,Entboost发布v1.7版本,主要版本更新内容: 增加实现一个帐号能同时登录PC和手机客户端,支持聊天内容同步显示功能: 增加离线文件存入我的云盘,邀请用户进入群组消息通知等功能: 修正部分BUG,如个人用户不能打开找群找人.我的消息应用:部分转义字符不能正常保存漫游消息等: 完善PC端开源产品,如聊天内容显示格式,增加气泡模式和经典模式,调整字体大小:休眠重启自动登录等: 恩布企业IM私有云下载:(带服务端.PC端.安装文档.

003:Python flask引入jinja2.exceptions.TemplateNotFound出错

代码 1 #_*_coding:utf-8_*_ 2 from flask import Flask 3 from flask import render_template 4 app=Flask(__name__) 5 @app.route('/hello') 6 @app.route('/hello/<name>') 7 def hello(name=None): 8 return render_template('hello.html',name=name) 9 10 if __name

Spring MVC、Mybatis、Hibernate、Bootstrap、jQuery、HTML5、Spring Security安全权限、Lucene全文检索、Ehcache分布式缓存 、高性能、高并发【Java企业通用开发平台框架】

获取[下载地址]   QQ: 313596790   [免费支持更新] A 代码生成器(开发利器);    B 阿里巴巴数据库连接池druid;   数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势 C 安全权限框架shiro ;  D ehcache 自定义二级缓存; E 微信接口开发(后续会加入Activiti5 工作流 )免费升级 -------------------------------------------------------

恩布企业IM 1.8 版本,企业内部通讯软件

恩布企业IM,开源企业IM,免费企业即时通讯,企业内部通讯平台,Entboost发布v1.8版本,主要版本更新内容: 管理中心增加系统监控,集群管理二大功能模块:增加云盘空间.离线消息.文件大小等参数配置: 解决部分BUG,如相同帐号同时登录多个终端,有时会收不到消息问题等: PC IM客户端产品增加位置记忆,靠边自动伸缩隐藏:表情增加文字描述等功能: PC IM客户端完善视频会议.视频通话.文件传输描述:解决某些路由器,传输P2P文件失败等问题: 恩布企业IM私有云下载:(带服务端.PC端.安

企业内部报修现状分析与解决方案

目前,通过走访调查,企业内部报修平台尚不完善,还是采取传统行业死板的呼叫网管等报修,存在很多问题. 存在如下弊端:为进一步改善报修方式,青鸟报修系统诞生,已为3000多家企业解决报修存在的问题,提高了企业报修方式,通过扫描微信二维码即可完成报修,后台有完善的统计功能与派单流程,全程高效,进度实时知晓,用过青鸟报修系统的用户比较依赖于它.今天简单跟大家介绍一下系统的主要功能. 由于时间关系就展示这么多,如有兴趣可通过青鸟报修官网进行了解,http://www.qnbaoxiu.com 原文地址:h

构建企业内部的Yum服务器

企业内部如果使用自己的Yum服务器,不但占用带宽少.速度更快,而且可以更加灵活方便的自定义配置,能有效提升日常工作效率. 一.基本概念 1. RPM 全称是The RPM Package Manager.用于在CentOS系统中安装/卸载软件. 2. Yum 全称是Yellow Dog Updater Modified.用于管理RPM包,完成安装/卸载/升级,重要的是能够处理包之间的依赖关系. 二.同步外部yum源 第一步当然是建立内网的yum源,基本上yum源就是一个静态的http服务,yum

Python Flask 快速构建高性能大型web网站项目实战

Python Flask 快速构建高性能大型web网站项目实战视频[下载地址:https://pan.baidu.com/s/1cUggNbUvptYz5vvwBhsdrg ] 作为最最流行的Python Web开发的微框架,Flask独树一帜.它不会强迫开发者遵循预置的开发规范,为开发者提供了自由度和创意空间.突然发现这个对自动化运维开发非常有用,发上来,给大家! Python Flask 快速构建高性能大型web网站项目实战视频 project.zip 第1章 课程介绍1.1-1.2课程导学