0 - python 用自带的 wgsi 也可以创建 web 服务
1)建立 hello.py 内容如下
# hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return '<h1>Hello, web!</h1>'
2)建立 server.py
# -*- coding:utf-8 -*-
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数:
from hello import application
# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print "Serving HTTP on port 8000..."
# 开始监听HTTP请求:
httpd.serve_forever()

缺点:貌似只能创建一个访问地址,不同 url 路由不好控制

1 - flask 建立一个 web server

1、pip install Flask
2、建立一个 test_flask.py 的文件,加入代码如下:

# -*- coding:utf-8 –*-
from flask import Flask, request, make_response, current_app
from functools import wraps
import json
import sys
import datetime

# 一个 app 是一个 Flask 文件 
app = Flask(__name__)
def jsonp(func):
  """Wraps JSONified output for JSONP requests."""
  @wraps(func)
  def decorated_function(*args, **kwargs):
    callback = request.args.get('callback', False)
    if callback:
      data = str(func(*args, **kwargs).data)
      content = str(callback) + '(' + data + ')'
      mimetype = 'application/javascript'
      return current_app.response_class(content, mimetype=mimetype)
    else:
      return func(*args, **kwargs)
    return decorated_function

# 有route

@app.route('/test', methods=['GET'])
def test():
  resp = make_response(
    (
      json.dumps({'key':'value'}),
      200,
      {'Content-Type': 'application/json'}
    )
  )
  return resp

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=8899)

2 - 安装mysql 

1、使用 brew 安装 mysql 服务
brew install mysql
2、启动 mysql 服务
mysql.server start
3、使用 root 用户免密登录
mysql -uroot
4、修改 root 密码
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
5、登录 mysql 数据库 建立测试表格
create table tb_dept(
id int primary key auto_increment,#部门编号 整形 主键 自增长
name varchar(18),#部门名称
description varchar(100)#描述
);

3 - 安装 MySQL-python

pip install MySQL-python

4 - 手写数据库连接代码

# -*- coding:utf-8 –*-
from flask import Flask, request, make_response, current_app
from functools import wraps
import MySQLdb as mysql
import json
import sys
import datetime
app = Flask(__name__)

def MysqlInit():
  #connect to mysql
  hostaddress = 'localhost'
  username = 'root'
  password = '*****'
  database = 'test'
  try:
    conn = mysql.connect(
      host=hostaddress,
      user=username,
      passwd=password,
      db=database,
      charset="utf8")
      print 'connect to mysql db success'
      return conn
    except Exception, e:
      print e
      sys.exit('init mysql failed!')

def CheckConnect(conn):
  try:
    conn.ping()
    return conn
  except:
    print 'mysql coonect has been closed now reconnect'
    cur_conn = MysqlInit()
  return cur_conn

def QueryClusterInfo(conn):
  print "\ncoming QueryClusterInfo!!!"
  try:
    conn = CheckConnect(conn)
    cursor = conn.cursor()
  except:
    conn = CheckConnect(conn)
    cursor = conn.cursor()
    response_dict = {'ret_code':0,'ret_msg':'ok'}

    sql_cmd = 'select * from tb_dept'

  try:
    cursor.execute(sql_cmd)
    cluster_result = cursor.fetchall()
  except:
    cursor.close()
    response_dict['ret_code'] = 1
    response_dict['ret_msg'] = 'sql_select_error_in_queryClusterInfo'
    return json.dumps(response_dict)
  response_dict['res'] = []

  if cluster_result is not None:
    for items in cluster_result:
      res = {}
      res['id'] = items[0]
      res['name'] = items[1]
      res['description'] = items[2]
      response_dict['res'].append(res)
    cursor.close()
    return json.dumps(response_dict)

def jsonp(func):
  """Wraps JSONified output for JSONP requests."""
  @wraps(func)
  def decorated_function(*args, **kwargs):
    callback = request.args.get('callback', False)
    if callback:
      data = str(func(*args, **kwargs).data)
      content = str(callback) + '(' + data + ')'
      mimetype = 'application/javascript'
      return current_app.response_class(content, mimetype=mimetype)
    else:
      return func(*args, **kwargs)
    return decorated_function

@app.route('/test_mysql', methods=['GET'])
def test():
  conn = MysqlInit()
  resp = make_response(
    (
      QueryClusterInfo(conn),
      200,
      {'Content-Type': 'application/json'}
    )
  )
  return resp

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=8989)

flask + MySQL-python 创建 webapp 应用的更多相关文章

  1. python操作三大主流数据库(4)python操作mysql④python服务端flask和前端bootstrap框架结合实现新闻展示

    python操作mysql④python服务端flask和前端bootstrap框架结合实现新闻展示 参考文档http://flask.pocoo.org/docs/0.11/http://flask ...

  2. 前端和后端的数据交互(jquery ajax+python flask+mysql)

    上web课的时候老师布置的一个实验,要求省市连动,基本要求如下: 1.用select选中一个省份. 2.省份数据传送到服务器,服务器从数据库中搜索对应城市信息. 3.将城市信息返回客户,客户用sele ...

  3. 个人学期总结及Python+Flask+MysqL的web建设技术过程

    一个学期即将过去,我们也迎来了2018年.这个学期,首次接触了web网站开发建设,不仅是这门课程,还有另外一门用idea的gradle框架来制作网页. 很显然,用python语言的flask框架更加简 ...

  4. Python+Flask+MysqL的web建设技术过程

    一.前言(个人学期总结) 个人总结一下这学期对于Python+Flask+MysqL的web建设技术过程的学习体会,Flask小辣椒框架相对于其他框架而言,更加稳定,不会有莫名其妙的错误,容错性强,运 ...

  5. Python+Flask+MysqL的web技术建站过程

    1.个人学期总结 时间过得飞快,转眼间2017年就要过去.这一年,我学习JSP和Python,哪一门都像一样新的东西,之前从来没有学习过. 这里我就用我学习过的Python和大家分享一下,我是怎么从一 ...

  6. 在 Windows Azure 网站上使用 Django、Python 和 MySQL:创建博客应用程序

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 根据您编写的应用程序,Windows Azure 网站上的基本Python 堆 ...

  7. python创建MySQL多实例-1

    python创建MySQL多实例-1 前言 什么是多实例 多实例就是允许在同一台机器上创建另外一套不同配置文件的数据库,他们之间是相互独立的,主要有以下特点, 1> 不能同时使用一个端口 2&g ...

  8. 实战接口开发:python + flask + mysql + redis(根据反馈,持续细化更新。。。)

    前言 自动化已经成为测试的必备技能之一了,所以,很多想跳槽的测试朋友都在自学,特别是最实用的接口自动化, 但是很多人因为没有可以练手的项目而苦恼,最终导致缺乏实战经验,其实,完全可以自己开发个简单项目 ...

  9. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  10. Flask+MySQL+Redis的Docker配置

    Docker配置了好多天,昨天晚上终于把碎遮项目的Docker打包完成了,后面会继续完善项目代码,把稳定版本打包后推送到DockerHub上. 网上关于Docker配置的文章很多,但大部分都是复制粘贴 ...

随机推荐

  1. create-react-app中添加less支持

    前言 使用 create-react-app 脚手架创建项目后,默认是不支持 less 的.所以我们需要手动添加. 第一步 暴露webpack配置文件 使用 create-react-app 创建的项 ...

  2. 【C#】判断字符串中是否包含指定字符串,contains与indexof方法效率问题

    #方法一:使用string.Contains方法 string.Contains是大小写敏感的,如果要用该方法来判断一个string是否包含某个关键字keyword,需要把这个string和这个key ...

  3. mui选择器的坑

    mui框架最近比较火,因为在移动端的页面展示效果太好了,web页面相当于APP的效果.连二年级的小明同学都知道了..你别说你不知道哦 但是这毕竟是一个不成熟的框架,维护和解决方案都跟不上,因此新手入坑 ...

  4. How to learn PDE (怎么学偏微分方程)

    To learn PDE, you need some knowledge of physics (to build up the intuition), solid training of anal ...

  5. Nginx虚拟主机 子文件单独配置

    上一篇所有的server 全都配置在nginx.conf配置文件里,其实每个server 都可以单独做一个子文件 删除nginx.conf配置文件中的server及其余内容,加上如下图 创建保存每个虚 ...

  6. Mysq登陆后执行命令提示You must SET PASSWORD before executing this statement

    mysql  安装完成后,在输入命令行时,提示:You must SET PASSWORD before executing this statement 提示必须设置密码,我想不是已经设置了密码吗? ...

  7. Java CAS 比较并且更换值

    原文:Java中CAS详解 作者:jayxu无捷之径 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会 ...

  8. topshelf 服务启动运行

    topshlf 服务启动运行方式 安装:servicename.exe install 启动:servicename.exe start 卸载:servicename.exe uninstall

  9. 报文段、协议、MAC地址

  10. 可变与不可变类型数据,列表的copy方法

    我们先来了解一下可变与不可变类型的数据 (1)可变类型:列表,字典(内存中的数据允许被修改) 不可变类型:数字,字符串,元组(内存中的数据不允许被修改) 接着我们通过一个实例来看一看可变与不可变类型数 ...