create.py 文件说明
from kcweb.create import create
create("app","api") # 创建项目
├─./ 框架目录
├─app 公共方法目录
│ ├─common 公共函数目录
│ │ ├─__init__.py 函数文件
│ ├─config 配置目录
│ │ ├─__init__.py 配置文件
│ ├─api 模块目录
│ │ ├─common 该模块的公共函数目录
│ │ │ ├─__init__.py 函数文件
│ │ ├─controller 控制器目录
│ │ │ ├─__init__.py 版本初始化文件
│ │ │ ├─v1
│ │ │ │ ├─__init__.py 函数初始化文件
│ │ │ │ ├─index.py 控制器文件
│ │ │ ├─v2
│ │ │ │ ├─__init__.py 函数初始化文件
│ │ │ │ ├─index.py 控制器文件
│ │ ├─tpl 模板文件目录
│ │ │ ├─v1
│ │ │ │ ├─index
│ │ │ │ │ ├─index.html 模块文件
│ │ │ ├─v1
│ │ │ │ ├─index
│ │ │ │ │ ├─index.html 模块文件
│ │ ├─__init__.py 控制器初始化文件
│ ├─script 命令行脚本
│ │ ├─common 该模块的公共函数目录
│ │ │ ├─__init__.py 函数文件
│ │ │ ├─win.py 类文件
│ │ ├─test.py 脚本文件
│ ├─static 静态资源目录
│ ├─runtime 缓存目录
│ ├─__init__.py 自动导入模块文件
├─create.py
├─app.py 应用创建后生成的运行文件(应用创建时自动创建)
执行完上述文件在当前目录下执行python3 app.py。 通过访问127.0.0.1:39001
<li style="color:#000">核心配置:核心框架内置的配置文件,无需更改</li><li style="color:#000">公共配置:每个应用的全局配置文件</li><li style="color:#000">动态配置:主要是在视图中进行(动态)更改配置,该配置方式只在当前模块和当次请求有效,因为不会保存到配置文件中</li><li style="color:#000">方法配置:主要是通过特定的方法传入配置信息</li>
</ul>
# 应用配置
app['app_debug']=True #是否开启调试模式
app['tpl_folder']='./tpl' #设置模板文件目录名 注意:不能配置目录路径
app['before_request']='before_request' #设置请求前执行的函数
app['after_request']='after_request' #设置请求后执行的函数
app['staticpath']='app/static'
# redis配置
redis['host']='127.0.0.1' #服务器地址
redis['port']=6379 #端口
redis['password']='' #密码
redis['db']=0 #Redis数据库 注:Redis用0或1或2等表示
redis['pattern']=True # True连接池链接 False非连接池链接
redis['ex']=0 #过期时间 (秒)
#缓存配置
cache['type']='File' #驱动方式 支持 File Redis
cache['path']='runtime/cachepath' #缓存保存目录
cache['expire']=120 #缓存有效期 0表示永久缓存
cache['host']=redis['host'] #Redis服务器地址
cache['port']=redis['port'] #Redis 端口
cache['password']=redis['password'] #Redis登录密码
cache['db']=1 #Redis数据库 注:Redis用1或2或3等表示
# session配置
session['type']='File' #session 存储类型 支持 file、Redis
session['path']='runtime/session' #session缓存目录
session['expire']=86400 #session默认有效期 该时间是指session在服务的保留时间,通常情况下浏览器上会保留该值的10倍
session['prefix']="KCW" # SESSION 前缀
session['host']=redis['host'] #Redis服务器地址
session['port']=redis['port'] #Redis 端口
session['password']=redis['password'] #Redis登录密码
session['db']=2 #Redis数据库 注:Redis用1或2或3等表示
# 默认数据库配置
database['type']='mysql' # 数据库类型 目前支持mysql和sqlite
database['host']=['127.0.0.1']#服务器地址 [地址1,地址2,地址3...] 多个地址分布式(主从服务器)下有效
database['port']=[3306] #端口 [端口1,端口2,端口3...]
database['user']=['root'] #用户名 [用户名1,用户名2,用户名3...]
database['password']=['root'] #密码 [密码1,密码2,密码3...]
database['db']=['test'] #数据库名 [数据库名1,数据库名2,数据库名3...]
database['charset']='utf8' #数据库编码默认采用utf8
database['pattern']=False # True数据库长连接模式 False数据库短连接模式 注:建议web应用使用短连接,cli应用使用长连接
database['cli']=False # 是否以cli方式运行
database['dbObjcount']=1 # 连接池数量(单个数据库地址链接数量),数据库链接实例数量 mysql长链接模式下有效
database['deploy']=0 # 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) mysql数据库有效
database['master_num']=1 #主服务器数量 不能超过host服务器数量 (等于服务器数量表示读写不分离:主主复制。 小于服务器表示读写分离:主从复制。) mysql数据库有效
database['master_dql']=False #主服务器是否可以执行dql语句 是否可以执行select语句 主服务器数量大于等于host服务器数量时必须设置True
database['break']=0 #断线重连次数,0表示不重连。 注:cli模式下 10秒进行一次重连并且连接次数是当前配置的300倍
#sqlite配置
sqlite['db']='kcwdb' # 数据库文件存放地址
#mongodb配置
mongo['host']='127.0.0.1'
mongo['port']='27017'
mongo['user']=''
mongo['password']=''
mongo['db']='test'
#路由配置
route['default']=True #是否开启默认路由 默认路由开启后面不影响以下配置的路由,模块名/版本名/控制器文件名/方法名 作为路由地址 如:http://www.kcw.com/api/v1/index/index/
route['modular']=[{"www":"api"},{"127":"api"},{"192":"api"}] #配置域名模块 配置后地址为:http://www.kcw.com/v1/index/index/ 注意:如果使用的是代理服务器需要把代理名称设置为当前配置的域名,否则不生效
route['edition']='' #默认路由版本,配置后地址为 http://www.kcw.com/index/index/
route['files']='index' #默认路由文件
route['funct']='index' #默认路由函数
route['methods']=['POST','GET'] #默认请求方式
#email配置
email['sender']='' #发件人邮箱账号
email['pwd']='' #发件人邮箱密码(如申请的smtp给的口令)
email['sendNick']='' #发件人昵称
email['sendNick']='' #发件人昵称
email['theme']='' #默认主题
email['recNick']='' #默认收件人昵称
#其他配置 如:
other['aliyun']['AccessKey_ID']='' #配置阿里云账户id
other['aliyun']['AccessKey_Key']='' #配置阿里云账户key
mysql('test').connect({"host":"127.0.0.1"}).find()
config.database['host']=['127.0.0.1'] #服务器地址
config.database['port']=[3306] #端口
config.database['break']=1 #断线重连次数
动态配置不建议在web应用中使用,因为他是全局的,通常情况下,如果您的web应用需要部分接口需要修改配置信息应该使用方法配置,cli脚本可以使用动态配置
print(config.app) #获取app配置信息
print(config.database['host']) #获取数据库配置信息
print(config.other['aliyun']) #获取aliyun配置信息
...
app.py内容如下:
# #gunicorn -b 0.0.0.0:39010 app:app
from kcweb import web
import app as application
app=web(__name__,application)
if __name__ == "__main__":
#app 是当前文件名 host监听ip port端口
app.run("app",host="0.0.0.0",port="39001")
您可以根据上面的备注修改相关的信息
http://serverName/模块/版本/控制器/函数/[参数名/参数值...]
route['default']=True #是否开启默认路由 默认路由开启后面不影响以下配置的路由,模块名/版本名/控制器文件名/方法名 作为路由地址 如:http://www.kcw.com/api/v1/index/index/
route['modular']=[{"www":"api"},{"127":"api"},{"192":"api"}] #配置域名模块 配置后地址为:http://www.kcw.com/v1/index/index/ 注意:如果使用的是代理服务器需要把代理名称设置为当前配置的域名,否则不生效
route['edition']='v1' #默认路由版本,配置后地址为 http://www.kcw.com/index/index/
route['files']='index' #默认路由文件
route['funct']='index' #默认路由函数
route['methods']=['POST','GET'] #默认请求方式
所以您的URL访问规则是:
http://serverName/控制器/函数/[参数名/参数值...]
├─./
├─app 应用目录
│ ├─common 公共方法目录
│ │ ├─__init__.py 公共方法文件
from kcweb.common import *
from app import config
def returnjson(data=[],code=0,msg="成功",status='200 ok'):
"""在浏览器输出包装过的json
参数 data 结果 默认[]
参数 code body状态码 默认0
参数 msg body状态描述 默认 成功
参数 status http状态码 默认 200
返回 json字符串结果集
"""
res={
"code":code,
"msg":msg,
"time":times(),
"data":data
}
return json_encode(res),status,{"Content-Type":"application/json; charset=utf-8"}
├─./
├─app 应用目录
│ ├─api 模块目录(简称模块)
│ │ ├─common 当前模块方法目录
│ │ │ ├─__init__.py 当前模块方法文件
from app1.common import *
#下面的方法在当前模块中有效
G=globals.G
#下面的方法在当前模块中有效
def before_request():
G.userinfo=get_session("userinfo")
print('api模块在请求前执行,我是要在配置文件配置后才能生效哦!',G.userinfo)
def after_request():
print('api模块在请求后执行,我是要在配置文件配置后才能生效哦!')
def set_session(name,value,expire=None):
"设置session"
return session.set("app1api"+str(name),value,expire)
def get_session(name):
"获取session"
return session.get("app1api"+str(name))
def del_session(name):
"删除session"
return session.rm("app1api"+str(name))
def tpl(path,**context):
return Template("/api/tpl"+str(path),**context)
控制器文件通常放在[应用]/[模块]/controller/[版本]目录下面,文件名统一保持小写。一个视图文件格式应该是如下:returnjson方法的作用是在浏览器输出包装过的json,当然你也可以修改该方法的值
from [应用].[模块].common import *
def index1():
return returnjson("index")
def index2():
return returnjson("index")
...
访问的url是(在没有定义路由的情况下)
from . import index
# def error(err,data):
# "该函数在当前目录下无法匹配时被调用"
# return data,"200",{"Content-Type":"text/json; charset=utf-8"}
创建控制器文件后,您需要在当前版本目录下的______init__.py文件中导入控制器文件,____init.py文件也可以定义函数,但他不能调用common下的方法
更多文档参考 :http://intapp.kwebapp.cn/index/index/doc/docde/1