官网中有用的记录一下,太多只是记录了最简单的
官网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. AspectJ风格的Aop切点表达式

    execution(*com.aptech.jb.epet.dao.hibimpl.*.*(..)) 这样写应该就可以了,这是com.aptech.jb.epet.dao.hibimpl 包下所有的类 ...

  2. static 关键字的使用,静态和非静态类的区别

    直接以一个例子说明: using System; using System.Collections.Generic; using System.Diagnostics; using System.IO ...

  3. 使用svn 在 github上下载单个文件夹?

    事实上可以用svn checkout 下来的.(但就是速度不知道为啥那么慢) 第一步:输入你的仓库地址 第二步:选择thunk,然后仓库的内容尽收眼底.接下来就可以选择你想下载的任意文件夹了. (如果 ...

  4. PHP array_walk() 函数

    定义和用法 array_walk() 函数对数组中的每个元素应用用户自定义函数.在函数中,数组的键名和键值是参数. <?php function myfunction($value,$key,$ ...

  5. lua学习笔记(八)

      元表与元方法  基本概念         1.lua中每个值都有一个元表         2.table和userdata可以有各自独立的元表         3.其它类型的值共享其类型所属的单一 ...

  6. warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'.

    'matching'参数是 git 1.x 的默认行为,其意是如果你执行 git push 但没有指定分支,它将 push 所有你本地的分支到远程仓库中对应匹配的分支. 而 Git 2.x 默认的是 ...

  7. openWRT自学---对官方的开发指导文档的解读和理解 记录1:编译一个package

    针对的是:http://kamikaze.openwrt.org/docs/openwrt.html#x1-390002 1.If you want, you can also modify the ...

  8. Android Studio中常用设置

    参考资料: 1.http://blog.csdn.net/itdada/article/details/43375893 常用设置: 1.Tab不用4个空格Code Style->Java-&g ...

  9. python write file

    fileHandle = open ( 'test.txt', 'a' ) fileHandle.write ( '\n\nBottom line.' ) fileHandle.close() 转自: ...

  10. nginx(Window下安装 & 配置文件参数说明 & 实例)

    一.为什么需要对Tomcat服务器做负载均衡:  Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站 ...