官网中有用的记录一下,太多只是记录了最简单的
官网docs:http://flask.pocoo.org/docs/0.12/

跑起来一个程序

$ export FLASK_APP=hello.py
$ flask run
* Running on http://127.0.0.1:5000/
$ python -m flask run
* Running on http://127.0.0.1:5000/

#监听所有ip

flask run --host=0.0.0.0

# debug 永远不要用在生产环境

$ export FLASK_DEBUG=
$ flask run

#路径中有参数的使用

@app.route('/post/<int:post_id>')
@app.route('/user/<username>')

string accepts any text without a slash (the default)
int accepts integers
float like int but for floating point values
path like the default but also accepts slashes
any matches one of the items provided
uuid accepts UUID strings

#http.method

from flask improt request
@app.route('/user/<username>', methods=['GET', 'POST'])
if request.method == 'GET':......

#render render_template会找templates文件夹下的hello.html,把参数传过去

from flask import render_template
@app.route('/hello')
@app.route('/hello/<name>')
def greeting(name=None):
return render_template('hello.html', name=name)

#路径中?后的参数的获取
@app.route('/search', methods=['GET'])

def search():
word = request.args.get('key','')
return 'key word is: %s' % word
http://localhost:5000/search?key=value  #浏览器输入访问

#获取前台post请求发过来的json格式的数据

import json
@app.route('/login', methods=['POST'])
def login():
  return json.loads(request.data)['name']

#log

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', )
app.logger.error('An error occurred')

#错误处理

@app.errorhandler()
def page_notfound(error):
  return render_template('not_found.html'),
@app.errorhandler()
def not_found(error):
  resp = make_response(render_template('not_found.html'), )
  resp.headers['X-Something'] = 'A value'
  return resp

#捕获自定义异常处理

class RunException(RuntimeError):
def __init__(self, msg, code):
  self.msg = msg
  self.code = code
@app.errorhandler(RunException)
def exce(error):
  return 'ERROR[msg: %s, code: %d]' % (error.msg, error.code), error.code
@app.route('/exce', methods=['GET'])
def test_e():
  raise RunException('occur', )
  return 'no error'

#配置文件
#http://flask.pocoo.org/docs/0.12/config/

app = Flask(__name__)
app.config['DEBUG'] = True
app.debug = True
app.config.update(
DEBUG=True
SECRET_KEY='value'
)
app.config.from_object('yourapplication.default_settings_OR_class')
app.config.from_envvar('YOURAPPLICATION_SETTINGS') class Config(object):
  DEBUG = False
  TESTING = False
  DATABASE_URI = 'sqlite://:memory:'
class ProductionConfig(Config):
  DATABASE_URI = 'mysql://user@localhost/foo'
app.config.from_object('configmodule.ProductionConfig')

#命令行和执行代码里的方法
#http://flask.pocoo.org/docs/0.12/cli/

import click
@app.cli.command()
def initdb():
  """Initialize the database."""
  click.echo('Init the db')
$ flask initdb
Init the db
@app.cli.command(with_appcontext=False) #命令行失效
def example():
  pass

sqlacodegen:从已有的数据库中的表导出module(听这个官网说好像这个是sqlautocode的加强版,sqlautocode有bug)

pip install sqlacodegen
#使用方法    sqlacodegen --help查看使用方法
sqlacodegen --outfile /home/ito/workspace1/ZPyService/src/py_service/module.py mysql://root:root@localhost:3306/fzk

SQLAlchemy:orm
http://docs.sqlalchemy.org/en/rel_1_1/orm/tutorial.html

pip install SQLAlchemy             #安装
pip uninstall SQLAlchemy         #卸载
pip install SQLAlchemy==<version> #安装指定版本

使用

  db = create_engine(<DB_URI>, echo=True)
session = sessionmaker(bind=db)()
  #或者*******************************
  Session = sessionmaker()
  Session.configure(bind=engine)
  *************************************
session.query(module.User).filter_by(username='bar').first()
  session.add(a_user)
  session.commit()
 session.add_all([])
 session.dirty
session.new
 session.rollback()
 session.query(User).filter(User.name.in_(['ed', 'fakeuser'])).all()
  for instance in session.query(User).order_by(User.id):
  print(instance.name, instance.fullname)
  for name, fullname in session.query(User.name, User.fullname):
print(name, fullname)
 for row in session.query(User, User.name).all():
print(row.User, row.name)
 for row in session.query(User.name.label('name_label')).all():
print(row.name_label)
  from sqlalchemy.orm import aliased
user_alias = aliased(User, name='user_alias')
for row in session.query(user_alias, user_alias.name).all():
print(row.user_alias)
#分页
for u in session.query(User).order_by(User.id)[1:3]:  
print(u)
for name, in session.query(User.name).filter_by(fullname = 'Ed Jones'):
print(name)
for name, in session.query(User.name).filter(User.fullname == 'Ed Jones'):
print(name)
for user in session.query(User).filter(User.name=='ed').filter(User.fullname=='Ed Jones'):
query.filter(User.name.like('%ed%'))
query.filter(User.name.ilike('%ed%'))  #case-insensitive LIKE
query.filter(User.name.in_(['ed', 'wendy', 'jack']))
query.filter(User.name.in_(
session.query(User.name).filter(User.name.like('%ed%'))
))
# not in
query.filter(~User.name.in_(['ed', 'wendy', 'jack']))
# is null
query.filter(User.name == None)
query.filter(User.name.is_(None))
# is not null
query.filter(User.name != None)
query.filter(User.name.isnot(None))
#and
# use and_()    Make sure you use and_() and not the Python and operator!
from sqlalchemy import and_
query.filter(and_(User.name == 'ed', User.fullname == 'Ed Jones'))
# or send multiple expressions to .filter()
query.filter(User.name == 'ed', User.fullname == 'Ed Jones')
# or chain multiple filter()/filter_by() calls
query.filter(User.name == 'ed').filter(User.fullname == 'Ed Jones')
#or
from sqlalchemy import or_
query.filter(or_(User.name == 'ed', User.fullname == 'Ed Jones'))

.all() 
 .first()
  .one()  #多余一个或没有会报错
 .one_or_none()
  .scalar()       #i
nvokes the one() method, and upon success returns the first column of the row:

 #count
from sqlalchemy import func
session.query(func.count(User.name), User.name).group_by(User.name).all()
session.query(func.count('*')).select_from(User).scalar()
#join
for u, a in session.query(User, Address).\
... filter(User.id==Address.user_id).\
... filter(Address.email_address=='jack@google.com').\
... all():
session.query(User).join(Address).\
... filter(Address.email_address=='jack@google.com').\
... all()
query.join(Address, User.id==Address.user_id)    # explicit condition
query.join(User.addresses) # specify relationship from left to right
query.join(Address, User.addresses) # same, with explicit target
query.join('addresses')
query.outerjoin(User.addresses) # LEFT OUTER JOIN
#一对多  多条数据从一次查询获取
from sqlalchemy.orm import aliased
>>> adalias1 = aliased(Address)
>>> adalias2 = aliased(Address)
for username, email1, email2 in \
... session.query(User.name, adalias1.email_address, adalias2.email_address).\
... join(adalias1, User.addresses).\
... join(adalias2, User.addresses).\
... filter(adalias1.email_address=='jack@google.com').\
... filter(adalias2.email_address=='j25@yahoo.com'):
... print(username, email1, email2)
#exist() 
>>> from sqlalchemy.sql import exists
>>> stmt = exists().where(Address.user_id==User.id)
>>> for name, in session.query(User.name).filter(stmt):
 

flask-restful-swagger-2: https://github.com/swege/flask-restful-swagger-2.0flask-restful-swagger   : https://github.com/rantav/flask-restful-swagger

flask初次搭建rest服务笔记的更多相关文章

  1. Flask框架搭建REST-API服务

    一.目的 为了能够将测试工具部署成RESTful-API服务,这样就能通过接口的方式提供统一测试工具服务,使用人员就不用构建application而产生的各种环境问题.使用问题. 适合人群:Pytho ...

  2. CentOS搭建pptpd服务笔记

    pptpd.rpm 包下载.http://poptop.sourceforge.net/yum/stable/packages/ 参考资料:http://www.oschina.net/questio ...

  3. 《用OpenResty搭建高性能服务端》笔记

    概要 <用OpenResty搭建高性能服务端>是OpenResty系列课程中的入门课程,主讲人:温铭老师.课程分为10个章节,侧重于OpenResty的基本概念和主要特点的介绍,包括它的指 ...

  4. 搭建VPN服务器之PPTP

    搭建VPN服务器之PPTP 1. 查看系统是否支持PPP 一般自己的系统支持,VPS需要验证. [root@oldboyedu ~]# cat /dev/ppp cat: /dev/ppp: No s ...

  5. 树莓派+花生棒+leanote搭建自己的笔记服务器

    背景 对于一个程序猿来说.女朋友可以(暂时)没有,但是不能没有一个很好的记笔记的应用.因为记笔记可以帮助自己积累学习提升自己.每一次回头看自己记得笔记,你都会有新的理解. 也许有人会说,用有道云啊,有 ...

  6. 【转】在Win7的IIS上搭建FTP服务及用户授权

    [转]在Win7的IIS上搭建FTP服务及用户授权 [转]在Win7的IIS上搭建FTP服务及用户授权 FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属 ...

  7. 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)

    本文将以原理+实战的方式,首先对“微服务”相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程 ...

  8. 小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战

    笔记 6.服务注册和发现之Eureka Client搭建商品服务实战     简介:搭建用商品服务,并将服务注册到注册中心 1.创建一个SpirngBoot应用,增加服务注册和发现依赖     2.模 ...

  9. 基于Flask框架搭建视频网站的学习日志(一)

    ------------恢复内容开始------------ 基于Flask框架搭建视频网站的学习日志(一)2020/02/01 一.Flask环境搭建 创建虚拟环境 初次搭建虚拟环境 搭建完虚拟环境 ...

随机推荐

  1. Maven - error in opening zip file

    在一个maven工程中,有时执行mvn打包,部署,编译等命令,例如mvn clean install -DskipTests -U等命令时,会报类似(error in opening zip file ...

  2. 乐鑫esp8266的 基于Nonos移植红外线1883,实现遥控器控制

    代码地址如下:http://www.demodashi.com/demo/12613.html 一.前言. 距离上篇的8266进阶博文有那么一段时间了,那么本文带来的是基于Nonos的红外线H1838 ...

  3. java消息中间件之ActiveMQ初识

    目录 消息中间件简介 解耦合和异步 可靠性和高效性 JMS P2P Pub/Sub AMQP JMS和AMQP对比 常见消息中间件 ActiveMQ RabbitMQ Kafka 综合比较 标签(空格 ...

  4. 怎样在fastboot 里面加入新的命令

    fastboot 是android 默认的一种debug 方法.它的优点是在进入linux kernel 之前就可以操作. 默认fastboot 支持的命令: usage: fastboot [ &l ...

  5. Win7 设置、访问共享文件夹

    一.设置共享文件夹 右键点击文件夹,打开“属性”窗口,选择“共享”选项卡 点击“共享”按钮,打开“文件共享”窗口,在下拉列表中选择账户,点“添加”,最后点“共享”按钮. 二.访问 \\192.168. ...

  6. MHA安装配置

    1. 前言 MHA可以在较短的时间内实现自己主动故障检測和故障转移,通常在10-30秒以内;在复制框架中,MHA可以非常好地解决复制过程中的数据一致性问题,因为不须要在现有的replication中加 ...

  7. 成长这事儿,不可不说-------Day36

    事实上我一直都有一个观点,从我当年刚学抛物线那会就有:人生事实上就是一条轨迹,无非是一些点的集合.只是有些在低谷,有些在高峰,放形象了看,有些熠熠生辉,有些暗淡的几若消逝,有些人总喜欢回头数着过往的痕 ...

  8. 《TomCat与Java Web开发技术详解》(第二版) 第八章节的学习总结 -- 访问mysql

    终于学到如何访问Mysql了 1. 可以看看此章节提供的sql脚本,以后可以照着写了.此外,对于Mysql如何使用,最好的地方就是其官网介绍了.http://dev.mysql.com/doc/ref ...

  9. UML类图中的关系表示

    UML类图中的关系和表示方法 类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这 ...

  10. jq 获取页面中checkbox已经选中的checkbox

    var array={}; var arrChk=$("input[name='bike']:checked"); if(arrChk.length<=0){ alert(' ...