Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
E
evm-store
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanli
evm-store
Commits
31c45ef7
Commit
31c45ef7
authored
Jun 15, 2021
by
wanli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
æ优化model定义时有其他非表中的字段
parent
b91e4e41
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
250 additions
and
82 deletions
+250
-82
tools/build_out/application/signal_manager.py
tools/build_out/application/signal_manager.py
+1
-0
tools/build_out/controllers/__init__.py
tools/build_out/controllers/__init__.py
+1
-0
tools/build_out/logs/running.log
tools/build_out/logs/running.log
+11
-0
tools/build_out/manager.py
tools/build_out/manager.py
+13
-13
tools/build_out/models/area.py
tools/build_out/models/area.py
+60
-4
tools/build_out/views/area.py
tools/build_out/views/area.py
+11
-11
tools/build_out/webcreator/webscoket.py
tools/build_out/webcreator/webscoket.py
+2
-2
tools/config.json
tools/config.json
+71
-29
tools/gen_code.py
tools/gen_code.py
+11
-3
tools/templates/README.md
tools/templates/README.md
+14
-0
tools/templates/model.tpl
tools/templates/model.tpl
+37
-5
tools/templates/view.tpl
tools/templates/view.tpl
+18
-15
No files found.
tools/build_out/application/signal_manager.py
View file @
31c45ef7
...
@@ -6,6 +6,7 @@ from webcreator.event import PySignal
...
@@ -6,6 +6,7 @@ from webcreator.event import PySignal
class
SignalManager
(
object
):
class
SignalManager
(
object
):
actionPostArea
=
PySignal
()
actionPostArea
=
PySignal
()
actionDeleteArea
=
PySignal
()
actionDeleteArea
=
PySignal
()
actionGetListArea
=
PySignal
()
actionGetArea
=
PySignal
()
actionGetArea
=
PySignal
()
actionPutArea
=
PySignal
()
actionPutArea
=
PySignal
()
...
...
tools/build_out/controllers/__init__.py
View file @
31c45ef7
...
@@ -7,6 +7,7 @@ from .area import areaManager
...
@@ -7,6 +7,7 @@ from .area import areaManager
def
initConnect
():
def
initConnect
():
signalManager
.
actionPostArea
.
connect
(
areaManager
.
post
)
signalManager
.
actionPostArea
.
connect
(
areaManager
.
post
)
signalManager
.
actionDeleteArea
.
connect
(
areaManager
.
delete
)
signalManager
.
actionDeleteArea
.
connect
(
areaManager
.
delete
)
signalManager
.
actionGetListArea
.
connect
(
areaManager
.
getList
)
signalManager
.
actionGetArea
.
connect
(
areaManager
.
get
)
signalManager
.
actionGetArea
.
connect
(
areaManager
.
get
)
signalManager
.
actionPutArea
.
connect
(
areaManager
.
put
)
signalManager
.
actionPutArea
.
connect
(
areaManager
.
put
)
...
...
tools/build_out/logs/running.log
View file @
31c45ef7
...
@@ -544,3 +544,14 @@
...
@@ -544,3 +544,14 @@
[2021-06-11 22:11:53,811][ INFO] [ _internal.py _log 225] 127.0.0.1 - - [11/Jun/2021 22:11:53] "GET /api/v1/area HTTP/1.1" 200 -
[2021-06-11 22:11:53,811][ INFO] [ _internal.py _log 225] 127.0.0.1 - - [11/Jun/2021 22:11:53] "GET /api/v1/area HTTP/1.1" 200 -
[2021-06-11 22:11:54,441][ ERROR] [ area.py get 69] {'id': ['Unknown field.']}
[2021-06-11 22:11:54,441][ ERROR] [ area.py get 69] {'id': ['Unknown field.']}
[2021-06-11 22:11:54,442][ INFO] [ _internal.py _log 225] 127.0.0.1 - - [11/Jun/2021 22:11:54] "GET /api/v1/area HTTP/1.1" 200 -
[2021-06-11 22:11:54,442][ INFO] [ _internal.py _log 225] 127.0.0.1 - - [11/Jun/2021 22:11:54] "GET /api/v1/area HTTP/1.1" 200 -
[2021-06-12 11:03:45,272][ INFO] [ _internal.py _log 225] * Restarting with stat
[2021-06-12 11:03:46,709][WARNING] [ _internal.py _log 225] * Debugger is active!
[2021-06-12 11:03:46,773][ INFO] [ _internal.py _log 225] * Debugger PIN: 182-666-074
[2021-06-12 11:03:47,052][ INFO] [ _internal.py _log 225] * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
[2021-06-12 11:03:49,177][ INFO] [ _internal.py _log 225] 127.0.0.1 - - [12/Jun/2021 11:03:49] "[35m[1mGET /api/v1/area HTTP/1.1[0m" 500 -
[2021-06-12 11:03:50,878][ INFO] [ _internal.py _log 225] 127.0.0.1 - - [12/Jun/2021 11:03:50] "[35m[1mGET /api/v1/area HTTP/1.1[0m" 500 -
[2021-06-12 11:25:52,890][ INFO] [ _internal.py _log 225] * Detected change in 'D:\\projects\\scriptiot\\evm-store\\tools\\build_out\\webcreator\\__init__.py', reloading
[2021-06-12 11:25:53,025][ INFO] [ _internal.py _log 225] * Restarting with stat
[2021-06-15 10:51:14,114][ INFO] [ _internal.py _log 225] * Restarting with stat
[2021-06-15 10:51:15,218][WARNING] [ _internal.py _log 225] * Debugger is active!
[2021-06-15 10:51:15,280][ INFO] [ _internal.py _log 225] * Debugger PIN: 182-666-074
tools/build_out/manager.py
View file @
31c45ef7
...
@@ -23,26 +23,26 @@ def run():
...
@@ -23,26 +23,26 @@ def run():
生产模式启动命令函数
生产模式启动命令函数
To use: python3 manager.py run
To use: python3 manager.py run
"""
"""
app
.
logger
.
setLevel
(
app
.
config
.
get
(
'LOG_LEVEL'
,
logging
.
INFO
))
#
app.logger.setLevel(app.config.get('LOG_LEVEL', logging.INFO))
service_config
=
{
#
service_config = {
'bind'
:
app
.
config
.
get
(
'BIND'
,
'0.0.0.0:3000'
),
#
'bind': app.config.get('BIND', '0.0.0.0:3000'),
'workers'
:
app
.
config
.
get
(
'WORKERS'
,
cpu_count
()
*
2
+
1
),
#
'workers': app.config.get('WORKERS', cpu_count() * 2 + 1),
'worker_class'
:
'gevent'
,
#
'worker_class': 'gevent',
'worker_connections'
:
app
.
config
.
get
(
'WORKER_CONNECTIONS'
,
10000
),
#
'worker_connections': app.config.get('WORKER_CONNECTIONS', 10000),
'backlog'
:
app
.
config
.
get
(
'BACKLOG'
,
2048
),
#
'backlog': app.config.get('BACKLOG', 2048),
'timeout'
:
app
.
config
.
get
(
'TIMEOUT'
,
60
),
#
'timeout': app.config.get('TIMEOUT', 60),
'loglevel'
:
app
.
config
.
get
(
'LOG_LEVEL'
,
'info'
),
#
'loglevel': app.config.get('LOG_LEVEL', 'info'),
'pidfile'
:
app
.
config
.
get
(
'PID_FILE'
,
'run.pid'
),
#
'pidfile': app.config.get('PID_FILE', 'run.pid'),
}
#
}
http_server
=
HTTPServer
(
WSGIContainer
(
app
))
http_server
=
HTTPServer
(
WSGIContainer
(
app
))
http_server
.
listen
(
3000
)
http_server
.
listen
(
3000
,
address
=
'127.0.0.1'
)
# wsgi_app = WSGIContainer(app)
# wsgi_app = WSGIContainer(app)
# application = Application([
# application = Application([
# (r'.*', FallbackHandler, dict(fallback=wsgi_app))
# (r'.*', FallbackHandler, dict(fallback=wsgi_app))
# ], **service_config)
# ], **service_config)
# application.listen(3000
, address='127.0.0.1'
)
# application.listen(3000)
IOLoop
.
instance
()
.
start
()
IOLoop
.
instance
()
.
start
()
...
...
tools/build_out/models/area.py
View file @
31c45ef7
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
from
application.app
import
db
,
ma
from
application.app
import
db
,
ma
from
datetime
import
datetime
from
datetime
import
datetime
from
.base
import
PrimaryModel
from
.base
import
PrimaryModel
from
marshmallow
import
Schema
,
fields
,
INCLUDE
,
EXCLUDE
class
AreaModel
(
PrimaryModel
):
class
AreaModel
(
PrimaryModel
):
__tablename__
=
'area'
__tablename__
=
'area'
...
@@ -31,16 +32,71 @@ class AreaModel(PrimaryModel):
...
@@ -31,16 +32,71 @@ class AreaModel(PrimaryModel):
def
__repr__
(
self
):
def
__repr__
(
self
):
return
'<AreaModel
%
r>'
%
(
self
.
areaCode
)
return
'<AreaModel
%
r>'
%
(
self
.
areaCode
)
class
AreaSchema
(
ma
.
SQLAlchemySchema
):
class
PostAreaSchema
(
ma
.
SQLAlchemySchema
):
class
Meta
:
class
Meta
:
# unknown = INCLUDE # 未知字段默认包含
# unknown = EXCLUDE # 未知字段默认排除
model
=
AreaModel
model
=
AreaModel
areaCode
=
ma
.
auto_field
()
areaCode
=
ma
.
auto_field
()
areaName
=
ma
.
auto_field
()
areaName
=
ma
.
auto_field
()
level
=
ma
.
auto_field
()
level
=
ma
.
auto_field
()
cityCode
=
ma
.
auto_field
()
cityCode
=
ma
.
auto_field
()
center
=
ma
.
auto_field
()
center
=
ma
.
auto_field
()
postAreaSchema
=
PostAreaSchema
()
postAreasSchema
=
PostAreaSchema
(
many
=
True
)
class
DeleteAreaSchema
(
ma
.
SQLAlchemySchema
):
class
Meta
:
# unknown = INCLUDE # 未知字段默认包含
# unknown = EXCLUDE # 未知字段默认排除
model
=
AreaModel
deleteAreaSchema
=
DeleteAreaSchema
()
class
GetListAreaSchema
(
ma
.
SQLAlchemySchema
):
class
Meta
:
# unknown = INCLUDE # 未知字段默认包含
# unknown = EXCLUDE # 未知字段默认排除
model
=
AreaModel
page
=
fields
.
Integer
(
required
=
False
)
pageSize
=
fields
.
Integer
(
required
=
False
)
areaName
=
ma
.
auto_field
()
level
=
ma
.
auto_field
()
parentId
=
ma
.
auto_field
()
hasChildren
=
ma
.
auto_field
()
field
=
fields
.
String
(
required
=
False
,
length
=
None
)
getListAreaSchema
=
GetListAreaSchema
()
class
GetAreaSchema
(
ma
.
SQLAlchemySchema
):
class
Meta
:
# unknown = INCLUDE # 未知字段默认包含
# unknown = EXCLUDE # 未知字段默认排除
model
=
AreaModel
areaName
=
ma
.
auto_field
()
level
=
ma
.
auto_field
()
parentId
=
ma
.
auto_field
()
hasChildren
=
ma
.
auto_field
()
field
=
fields
.
String
(
required
=
False
,
length
=
None
)
getAreaSchema
=
GetAreaSchema
()
class
PutAreaSchema
(
ma
.
SQLAlchemySchema
):
class
Meta
:
# unknown = INCLUDE # 未知字段默认包含
# unknown = EXCLUDE # 未知字段默认排除
model
=
AreaModel
areaName
=
ma
.
auto_field
()
level
=
ma
.
auto_field
()
parentId
=
ma
.
auto_field
()
parentId
=
ma
.
auto_field
()
hasChildren
=
ma
.
auto_field
()
hasChildren
=
ma
.
auto_field
()
field
=
fields
.
String
(
required
=
False
,
length
=
None
)
area_schema
=
AreaSchema
()
putAreaSchema
=
PutAreaSchema
()
areas_schema
=
AreaSchema
(
many
=
True
)
\ No newline at end of file
tools/build_out/views/area.py
View file @
31c45ef7
...
@@ -3,7 +3,7 @@ from flask_restful import Resource
...
@@ -3,7 +3,7 @@ from flask_restful import Resource
from
flask_restful.reqparse
import
RequestParser
from
flask_restful.reqparse
import
RequestParser
from
flask_jwt_extended
import
(
jwt_required
,
get_jwt_identity
)
from
flask_jwt_extended
import
(
jwt_required
,
get_jwt_identity
)
from
application.signal_manager
import
signalManager
from
application.signal_manager
import
signalManager
from
models.area
import
area_s
chema
from
models.area
import
postAreaSchema
,
deleteAreaSchema
,
getListAreaSchema
,
getAreaSchema
,
putAreaS
chema
from
webcreator.response
import
ResponseCode
,
response_result
from
webcreator.response
import
ResponseCode
,
response_result
class
AreaResource
(
Resource
):
class
AreaResource
(
Resource
):
...
@@ -23,9 +23,9 @@ class AreaResource(Resource):
...
@@ -23,9 +23,9 @@ class AreaResource(Resource):
try
:
try
:
json_payload
=
request
.
json
json_payload
=
request
.
json
print
(
"========>"
,
json_payload
)
print
(
"========>"
,
json_payload
)
data
=
area_s
chema
.
load
(
json_payload
)
data
=
getListAreaS
chema
.
load
(
json_payload
)
result
=
signalManager
.
actionGetArea
.
emit
(
**
data
)
result
=
signalManager
.
actionGetArea
.
emit
(
**
data
)
json_dumps
=
area_s
chema
.
dump
(
result
)
json_dumps
=
getListAreaS
chema
.
dump
(
result
)
return
jsonify
(
json_dumps
),
200
return
jsonify
(
json_dumps
),
200
except
Exception
as
e
:
except
Exception
as
e
:
current_app
.
logger
.
error
(
e
)
current_app
.
logger
.
error
(
e
)
...
@@ -36,9 +36,9 @@ class AreaResource(Resource):
...
@@ -36,9 +36,9 @@ class AreaResource(Resource):
def
post
(
self
):
def
post
(
self
):
try
:
try
:
json_payload
=
request
.
json
json_payload
=
request
.
json
data
=
area_s
chema
.
load
(
json_payload
)
data
=
postAreaS
chema
.
load
(
json_payload
)
result
=
signalManager
.
actionPostArea
.
emit
(
**
data
)
result
=
signalManager
.
actionPostArea
.
emit
(
**
data
)
json_dumps
=
area_s
chema
.
dump
(
result
)
json_dumps
=
postAreaS
chema
.
dump
(
result
)
return
jsonify
(
json_dumps
),
200
return
jsonify
(
json_dumps
),
200
except
Exception
as
e
:
except
Exception
as
e
:
current_app
.
logger
.
error
(
e
)
current_app
.
logger
.
error
(
e
)
...
@@ -61,9 +61,9 @@ class AreaResourceList(Resource):
...
@@ -61,9 +61,9 @@ class AreaResourceList(Resource):
try
:
try
:
json_payload
=
request
.
json
json_payload
=
request
.
json
print
(
"========>"
,
json_payload
)
print
(
"========>"
,
json_payload
)
data
=
area_s
chema
.
load
(
json_payload
)
data
=
getAreaS
chema
.
load
(
json_payload
)
result
=
signalManager
.
actionGetArea
.
emit
(
**
data
)
result
=
signalManager
.
actionGetArea
.
emit
(
**
data
)
json_dumps
=
area_s
chema
.
dump
(
result
)
json_dumps
=
getAreaS
chema
.
dump
(
result
)
return
jsonify
(
json_dumps
),
200
return
jsonify
(
json_dumps
),
200
except
Exception
as
e
:
except
Exception
as
e
:
current_app
.
logger
.
error
(
e
)
current_app
.
logger
.
error
(
e
)
...
@@ -74,9 +74,9 @@ class AreaResourceList(Resource):
...
@@ -74,9 +74,9 @@ class AreaResourceList(Resource):
def
put
(
self
):
def
put
(
self
):
try
:
try
:
json_payload
=
request
.
json
json_payload
=
request
.
json
data
=
area_s
chema
.
load
(
json_payload
)
data
=
putAreaS
chema
.
load
(
json_payload
)
result
=
signalManager
.
actionPutArea
.
emit
(
**
data
)
result
=
signalManager
.
actionPutArea
.
emit
(
**
data
)
json_dumps
=
area_s
chema
.
dump
(
result
)
json_dumps
=
putAreaS
chema
.
dump
(
result
)
return
jsonify
(
json_dumps
),
200
return
jsonify
(
json_dumps
),
200
except
Exception
as
e
:
except
Exception
as
e
:
current_app
.
logger
.
error
(
e
)
current_app
.
logger
.
error
(
e
)
...
@@ -87,9 +87,9 @@ class AreaResourceList(Resource):
...
@@ -87,9 +87,9 @@ class AreaResourceList(Resource):
def
delete
(
self
):
def
delete
(
self
):
try
:
try
:
json_payload
=
request
.
json
json_payload
=
request
.
json
data
=
area_s
chema
.
load
(
json_payload
)
data
=
deleteAreaS
chema
.
load
(
json_payload
)
result
=
signalManager
.
actionDeleteArea
.
emit
(
**
data
)
result
=
signalManager
.
actionDeleteArea
.
emit
(
**
data
)
json_dumps
=
area_s
chema
.
dump
(
result
)
json_dumps
=
deleteAreaS
chema
.
dump
(
result
)
return
jsonify
(
json_dumps
),
200
return
jsonify
(
json_dumps
),
200
except
Exception
as
e
:
except
Exception
as
e
:
current_app
.
logger
.
error
(
e
)
current_app
.
logger
.
error
(
e
)
...
...
tools/build_out/webcreator/webscoket.py
View file @
31c45ef7
...
@@ -28,12 +28,12 @@ def pushmessage(func):
...
@@ -28,12 +28,12 @@ def pushmessage(func):
try
:
try
:
if
isinstance
(
msg
,
WebsocketResponse
)
or
isinstance
(
msg
,
dict
):
if
isinstance
(
msg
,
WebsocketResponse
)
or
isinstance
(
msg
,
dict
):
self
.
write_message
(
json
.
dumps
(
msg
),
binary
)
self
.
write_message
(
json
.
dumps
(
msg
),
binary
)
elif
isinstance
(
msg
,
str
)
or
isinstance
(
msg
,
unicode
):
elif
isinstance
(
msg
,
str
)
or
isinstance
(
msg
,
str
):
self
.
write_message
(
msg
,
binary
)
self
.
write_message
(
msg
,
binary
)
else
:
else
:
self
.
write_message
(
repr
(
msg
),
binary
)
self
.
write_message
(
repr
(
msg
),
binary
)
except
WebSocketClosedError
as
e
:
except
WebSocketClosedError
as
e
:
logger
.
error
(
e
)
self
.
on_close
()
self
.
on_close
()
return
send
return
send
...
...
tools/config.json
View file @
31c45ef7
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
"database"
:
"app"
"database"
:
"app"
},
},
"sqlite"
:
{
"sqlite"
:
{
"file"
:
"
xxx
.db"
"file"
:
"
test
.db"
}
}
},
},
"apis"
:
[
"apis"
:
[
...
@@ -54,7 +54,7 @@
...
@@ -54,7 +54,7 @@
{
{
"name"
:
"cityCode"
,
"name"
:
"cityCode"
,
"dataType"
:
"Integer"
,
"dataType"
:
"Integer"
,
"default"
:
""
"default"
:
0
},
},
{
{
"name"
:
"center"
,
"name"
:
"center"
,
...
@@ -87,35 +87,35 @@
...
@@ -87,35 +87,35 @@
"params"
:
[
"params"
:
[
{
{
"name"
:
"areaCode"
,
"name"
:
"areaCode"
,
"dataType"
:
"
str
"
,
"dataType"
:
"
String
"
,
"location"
:
"json"
,
"location"
:
"json"
,
"default"
:
""
,
"default"
:
""
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"areaName"
,
"name"
:
"areaName"
,
"dataType"
:
"
str
"
,
"dataType"
:
"
String
"
,
"location"
:
"json"
,
"location"
:
"json"
,
"default"
:
""
,
"default"
:
""
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"level"
,
"name"
:
"level"
,
"dataType"
:
"
int
"
,
"dataType"
:
"
Integer
"
,
"location"
:
""
,
"location"
:
""
,
"default"
:
""
,
"default"
:
1
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"cityCode"
,
"name"
:
"cityCode"
,
"detaType"
:
"
str
"
,
"detaType"
:
"
String
"
,
"location"
:
""
,
"location"
:
""
,
"default"
:
""
,
"default"
:
""
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"center"
,
"name"
:
"center"
,
"dataType"
:
"
str
"
,
"dataType"
:
"
String
"
,
"location"
:
""
,
"location"
:
""
,
"default"
:
""
,
"default"
:
""
,
"required"
:
false
"required"
:
false
...
@@ -128,56 +128,98 @@
...
@@ -128,56 +128,98 @@
"endpoint"
:
""
,
"endpoint"
:
""
,
"params"
:
[]
"params"
:
[]
},
},
"get"
:
{
"get
List
"
:
{
"auth"
:
tru
e
,
"auth"
:
fals
e
,
"path"
:
"/area
/<string:uuid>
"
,
"path"
:
"/area"
,
"endpoint"
:
""
,
"endpoint"
:
""
,
"params"
:
[
"params"
:
[
{
{
"name"
:
"page
Num
"
,
"name"
:
"page"
,
"dataType"
:
"
int
"
,
"dataType"
:
"
Integer
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
1
,
"default"
:
1
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"pageSize"
,
"name"
:
"pageSize"
,
"dataType"
:
"
int
"
,
"dataType"
:
"
Integer
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
10
,
"default"
:
10
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"areaName"
,
"name"
:
"areaName"
,
"dataType"
:
"
str
"
,
"dataType"
:
"
String
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
null
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"level"
,
"name"
:
"level"
,
"dataType"
:
"
int
"
,
"dataType"
:
"
Integer
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
1
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"parentId"
,
"name"
:
"parentId"
,
"dataType"
:
"
int
"
,
"dataType"
:
"
String
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
""
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"hasChildren"
,
"name"
:
"hasChildren"
,
"dataType"
:
"bool"
,
"dataType"
:
"Boolean"
,
"location"
:
"args"
,
"default"
:
false
,
"required"
:
false
},
{
"name"
:
"field"
,
"dataType"
:
"String"
,
"location"
:
"args"
,
"default"
:
""
,
"required"
:
false
}
]
},
"get"
:
{
"auth"
:
true
,
"path"
:
"/area/<string:uuid>"
,
"endpoint"
:
""
,
"params"
:
[
{
"name"
:
"areaName"
,
"dataType"
:
"String"
,
"location"
:
"args"
,
"default"
:
""
,
"required"
:
false
},
{
"name"
:
"level"
,
"dataType"
:
"Integer"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
null
,
"required"
:
false
"required"
:
false
},
},
{
"name"
:
"parentId"
,
"dataType"
:
"String"
,
"location"
:
"args"
,
"default"
:
""
,
"required"
:
false
},
{
"name"
:
"hasChildren"
,
"dataType"
:
"Boolean"
,
"location"
:
"args"
,
"default"
:
false
,
"required"
:
false
},
{
{
"name"
:
"field"
,
"name"
:
"field"
,
"dataType"
:
"
str
"
,
"dataType"
:
"
String
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
null
,
"required"
:
false
"required"
:
false
...
@@ -191,35 +233,35 @@
...
@@ -191,35 +233,35 @@
"params"
:
[
"params"
:
[
{
{
"name"
:
"areaName"
,
"name"
:
"areaName"
,
"dataType"
:
"
str
"
,
"dataType"
:
"
String
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
""
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"level"
,
"name"
:
"level"
,
"dataType"
:
"
int
"
,
"dataType"
:
"
Integer
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
0
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"parentId"
,
"name"
:
"parentId"
,
"dataType"
:
"
int
"
,
"dataType"
:
"
String
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
null
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"hasChildren"
,
"name"
:
"hasChildren"
,
"dataType"
:
"
bool
"
,
"dataType"
:
"
Boolean
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
false
,
"required"
:
false
"required"
:
false
},
},
{
{
"name"
:
"field"
,
"name"
:
"field"
,
"dataType"
:
"
str
"
,
"dataType"
:
"
String
"
,
"location"
:
"args"
,
"location"
:
"args"
,
"default"
:
null
,
"default"
:
null
,
"required"
:
false
"required"
:
false
...
...
tools/gen_code.py
View file @
31c45ef7
...
@@ -44,8 +44,16 @@ def handleSignal(config):
...
@@ -44,8 +44,16 @@ def handleSignal(config):
def
handleModel
(
config
):
def
handleModel
(
config
):
# 将所有有默认值的字段分为一组,没有默认值的字段分为另一组
# 将所有有默认值的字段分为一组,没有默认值的字段分为另一组
# 生成模板代码时,无默认值的字段在前,有默认值的字段字在后
# 生成模板代码时,无默认值的字段在前,有默认值的字段字在后
# 收集表字段信息
fields
=
[]
extend
=
False
for
m
in
config
.
get
(
"model"
)
.
get
(
"fields"
):
fields
.
append
(
m
.
get
(
"name"
))
extend
=
True
print
(
m
)
target_file
=
os
.
sep
.
join
([
"models"
,
"{}.py"
.
format
(
config
.
get
(
"name"
))])
target_file
=
os
.
sep
.
join
([
"models"
,
"{}.py"
.
format
(
config
.
get
(
"name"
))])
handleRender
(
config
,
'model.tpl'
,
target_file
)
handleRender
(
config
,
'model.tpl'
,
target_file
,
fields
=
fields
,
extend
=
extend
)
def
handleView
(
config
):
def
handleView
(
config
):
target_file
=
os
.
sep
.
join
([
"views"
,
"{}.py"
.
format
(
config
.
get
(
"name"
))])
target_file
=
os
.
sep
.
join
([
"views"
,
"{}.py"
.
format
(
config
.
get
(
"name"
))])
...
@@ -56,11 +64,11 @@ def handleController(config):
...
@@ -56,11 +64,11 @@ def handleController(config):
target_file
=
os
.
sep
.
join
([
"controllers"
,
"{}.py"
.
format
(
config
.
get
(
"name"
))])
target_file
=
os
.
sep
.
join
([
"controllers"
,
"{}.py"
.
format
(
config
.
get
(
"name"
))])
handleRender
(
config
,
'controller.tpl'
,
target_file
)
handleRender
(
config
,
'controller.tpl'
,
target_file
)
def
handleRender
(
result
,
tpl
,
target_file
):
def
handleRender
(
result
,
tpl
,
target_file
,
**
kwargs
):
global
output_dir
global
output_dir
# print("=========>", result.get("name"), "{}.py".format(result.get("name")))
# print("=========>", result.get("name"), "{}.py".format(result.get("name")))
jinja_tpl
=
jinja_env
.
get_template
(
tpl
)
jinja_tpl
=
jinja_env
.
get_template
(
tpl
)
content
=
jinja_tpl
.
render
({
"config"
:
result
})
content
=
jinja_tpl
.
render
({
"config"
:
result
,
**
kwargs
})
# print("############", output_dir)
# print("############", output_dir)
target_file
=
os
.
sep
.
join
([
output_dir
,
target_file
])
target_file
=
os
.
sep
.
join
([
output_dir
,
target_file
])
if
not
os
.
path
.
exists
(
os
.
path
.
dirname
(
target_file
)):
if
not
os
.
path
.
exists
(
os
.
path
.
dirname
(
target_file
)):
...
...
tools/templates/README.md
0 → 100644
View file @
31c45ef7
# 模板文件定义标准
## model
### 字段类型
字段类型只能定义如下类型:
-
Integer
-
String
-
Boolean
## view
## controller
\ No newline at end of file
tools/templates/model.tpl
View file @
31c45ef7
...
@@ -3,6 +3,9 @@
...
@@ -3,6 +3,9 @@
from application.app import db, ma
from application.app import db, ma
from datetime import datetime
from datetime import datetime
from .base import PrimaryModel
from .base import PrimaryModel
{%- if extend %}
{
#
判断是否有扩展字段,也就是
model
对象不包含的字段,因为查询里面还有
page
和
pageSize
等这两种字段
#
}
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
{%- endif %}
class {{ config['model']['className'] }}(PrimaryModel):
class {{ config['model']['className'] }}(PrimaryModel):
__tablename__ = '{{ config['model']['tableName'] }}'
__tablename__ = '{{ config['model']['tableName'] }}'
...
@@ -28,16 +31,45 @@ class {{ config['model']['className'] }}(PrimaryModel):
...
@@ -28,16 +31,45 @@ class {{ config['model']['className'] }}(PrimaryModel):
def __repr__(self):
def __repr__(self):
return '
<
{{
config
['
model
']['
className
']
}}
%
r
>
' % (self.{{ config['model']['fields'][0]["name"] }})
return '
<
{{
config
['
model
']['
className
']
}}
%
r
>
' % (self.{{ config['model']['fields'][0]["name"] }})
class {{ config['name'] | letterUpper }}Schema(ma.SQLAlchemySchema):
{% for key, value in config["view"].items() %}
class {{ key |letterUpper }}{{ config['name'] | letterUpper }}Schema(ma.SQLAlchemySchema):
class Meta:
class Meta:
# unknown = INCLUDE # 未知字段默认包含
# unknown = EXCLUDE # 未知字段默认排除
model = {{ config['model']['className'] }}
model = {{ config['model']['className'] }}
{%- if config['model']['foreignKey'] %}
{%- if config['model']['foreignKey'] %}
include_fk = {{ config['model']['foreignKey'] }}
include_fk = {{ config['model']['foreignKey'] }}
{% endif %}
{% endif %}
{
#
这里需要判断下,如果是数据库表的字段,则使用
auto_field
()
,否则应该使用
json
配置中的字段信息
{%- for value in config['model']['fields'] %}
class
BandMembersSchema
(
Schema
):
{{ value.get("name") }} = ma.auto_field()
#
missing
用来指定反序列化时默认缺省值,
default
用来指定序列化时默认缺省值
#
在通常的
web
api
中,
dump_only
和
load_only
参数就类似于“
read
-
only
”和“
write
-
only
”字段
id
=
fields
.
UUID
(
missing
=
uuid
.
uuid1
)
name
=
fields
.
String
(
required
=
True
,
validate
=
validate
.
Length
(
min
=
1
))
#
更多校验类型,移步:
https
://
marshmallow
.
readthedocs
.
io
/
en
/
stable
/
api_reference
.
html
#
api
-
validators
email
=
fields
.
Email
(
data_key
=
"emailAddress"
)
#
解决序列化与反序列化字段不一致问题
birthdate
=
fields
.
DateTime
(
default
=
dt
.
datetime
(
2017
,
9
,
29
))
city
=
fields
.
String
(
required
=
True
,
error_messages
=
{
"required"
:
{
"message"
:
"City required"
,
"code"
:
400
}}
,
)
age
=
fields
.
Int
(
validate
=
validate
.
Range
(
min
=
18
,
max
=
40
))
permission
=
fields
.
Str
(
validate
=
validate
.
OneOf
([
"read"
,
"write"
,
"admin"
]))
password
=
fields
.
Str
(
load_only
=
True
)
#
password
is
"write-only"
created_at
=
fields
.
DateTime
(
dump_only
=
True
)
#
created_at
is
"read-only"
#
}
{%- for p in value['params'] %}
{%- if p.get("name") in fields %}
{{ p.get("name") }} = ma.auto_field()
{%- else %}
{{ p.get("name") }} = fields.{{ p.get("dataType") }}(required={{ p.get("required") }}{%- if p.get("dataType") == "String" %}, length={{ p.get("length") }}{%- endif %})
{%- endif %}
{%- endfor %}
{%- endfor %}
{{ config['name'] }}_schema = {{ config['name'] | letterUpper }}Schema()
{{ key }}{{ config['name'] | letterUpper }}Schema = {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema()
{{ config['name'] }}s_schema = {{ config['name'] | letterUpper }}Schema(many=True)
{%- if key == "post" %}
\ No newline at end of file
{{ key }}{{ config['name'] | letterUpper }}sSchema = {{ key | letterUpper }}{{ config['name'] | letterUpper }}Schema(many=True)
{%- endif %}
{% endfor %}
\ No newline at end of file
tools/templates/view.tpl
View file @
31c45ef7
...
@@ -3,7 +3,10 @@ from flask_restful import Resource
...
@@ -3,7 +3,10 @@ from flask_restful import Resource
from flask_restful.reqparse import RequestParser
from flask_restful.reqparse import RequestParser
from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from flask_jwt_extended import ( jwt_required, get_jwt_identity )
from application.signal_manager import signalManager
from application.signal_manager import signalManager
from models.{{ config['name'] }} import {{ config['name'] }}_schema
{%- set pipe = joiner(",") %}
from models.{{ config['name'] }} import {% for k, v in config["view"].items() -%}
{{ pipe() }}{{ k }}{{ config['name'] | letterUpper }}Schema
{%- endfor %}
from webcreator.response import ResponseCode, response_result
from webcreator.response import ResponseCode, response_result
class {{ config['controller']['className'] | letterUpper }}(Resource):
class {{ config['controller']['className'] | letterUpper }}(Resource):
...
@@ -12,7 +15,7 @@ class {{ config['controller']['className'] | letterUpper }}(Resource):
...
@@ -12,7 +15,7 @@ class {{ config['controller']['className'] | letterUpper }}(Resource):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
# self.parser = RequestParser()
# self.parser = RequestParser()
{% if config["view"]["
po
st"] %}
{% if config["view"]["
getLi
st"] %}
@jwt_required
@jwt_required
{%- endif %}
{%- endif %}
def get(self):
def get(self):
...
@@ -24,9 +27,9 @@ class {{ config['controller']['className'] | letterUpper }}(Resource):
...
@@ -24,9 +27,9 @@ class {{ config['controller']['className'] | letterUpper }}(Resource):
try:
try:
json_payload = request.json
json_payload = request.json
print("========>", json_payload)
print("========>", json_payload)
data =
{{ config['name'] }}_s
chema.load(json_payload)
data =
getList{{ config['name'] | letterUpper }}S
chema.load(json_payload)
result = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(**data)
result = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(**data)
json_dumps =
{{ config['name'] }}_s
chema.dump(result)
json_dumps =
getList{{ config['name'] | letterUpper }}S
chema.dump(result)
return jsonify(json_dumps), 200
return jsonify(json_dumps), 200
except Exception as e:
except Exception as e:
current_app.logger.error(e)
current_app.logger.error(e)
...
@@ -38,9 +41,9 @@ class {{ config['controller']['className'] | letterUpper }}(Resource):
...
@@ -38,9 +41,9 @@ class {{ config['controller']['className'] | letterUpper }}(Resource):
def post(self):
def post(self):
try:
try:
json_payload = request.json
json_payload = request.json
data =
{{ config['name'] }}_s
chema.load(json_payload)
data =
post{{ config['name'] | letterUpper }}S
chema.load(json_payload)
result = signalManager.actionPost{{ config["name"] | letterUpper }}.emit(**data)
result = signalManager.actionPost{{ config["name"] | letterUpper }}.emit(**data)
json_dumps =
{{ config['name'] }}_s
chema.dump(result)
json_dumps =
post{{ config['name'] |letterUpper }}S
chema.dump(result)
return jsonify(json_dumps), 200
return jsonify(json_dumps), 200
except Exception as e:
except Exception as e:
current_app.logger.error(e)
current_app.logger.error(e)
...
@@ -52,7 +55,7 @@ class {{ config['controller']['className'] | letterUpper }}List(Resource):
...
@@ -52,7 +55,7 @@ class {{ config['controller']['className'] | letterUpper }}List(Resource):
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
# 特殊参数,即不是从json获取参数的接口,可以将这个注释打开
# self.parser = RequestParser()
# self.parser = RequestParser()
{% if config["view"]["
pos
t"] %}
{% if config["view"]["
ge
t"] %}
@jwt_required
@jwt_required
{%- endif %}
{%- endif %}
def get(self):
def get(self):
...
@@ -64,37 +67,37 @@ class {{ config['controller']['className'] | letterUpper }}List(Resource):
...
@@ -64,37 +67,37 @@ class {{ config['controller']['className'] | letterUpper }}List(Resource):
try:
try:
json_payload = request.json
json_payload = request.json
print("========>", json_payload)
print("========>", json_payload)
data =
{{ config['name'] }}_s
chema.load(json_payload)
data =
get{{ config['name'] | letterUpper }}S
chema.load(json_payload)
result = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(**data)
result = signalManager.actionGet{{ config["name"] | letterUpper }}.emit(**data)
json_dumps =
{{ config['name'] }}_s
chema.dump(result)
json_dumps =
get{{ config['name'] | letterUpper }}S
chema.dump(result)
return jsonify(json_dumps), 200
return jsonify(json_dumps), 200
except Exception as e:
except Exception as e:
current_app.logger.error(e)
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.DB_ERROR)
{% if config["view"]["p
os
t"] %}
{% if config["view"]["p
u
t"] %}
@jwt_required
@jwt_required
{%- endif %}
{%- endif %}
def put(self):
def put(self):
try:
try:
json_payload = request.json
json_payload = request.json
data =
{{ config['name'] }}_s
chema.load(json_payload)
data =
put{{ config['name'] | letterUpper }}S
chema.load(json_payload)
result = signalManager.actionPut{{ config["name"] | letterUpper }}.emit(**data)
result = signalManager.actionPut{{ config["name"] | letterUpper }}.emit(**data)
json_dumps =
{{ config['name'] }}_s
chema.dump(result)
json_dumps =
put{{ config['name'] | letterUpper }}S
chema.dump(result)
return jsonify(json_dumps), 200
return jsonify(json_dumps), 200
except Exception as e:
except Exception as e:
current_app.logger.error(e)
current_app.logger.error(e)
return response_result(ResponseCode.DB_ERROR)
return response_result(ResponseCode.DB_ERROR)
{% if config["view"]["
post
"] %}
{% if config["view"]["
delete
"] %}
@jwt_required
@jwt_required
{%- endif %}
{%- endif %}
def delete(self):
def delete(self):
try:
try:
json_payload = request.json
json_payload = request.json
data =
{{ config['name'] }}_s
chema.load(json_payload)
data =
delete{{ config['name'] | letterUpper }}S
chema.load(json_payload)
result = signalManager.actionDelete{{ config["name"] | letterUpper }}.emit(**data)
result = signalManager.actionDelete{{ config["name"] | letterUpper }}.emit(**data)
json_dumps =
{{ config['name'] }}_s
chema.dump(result)
json_dumps =
delete{{ config['name'] | letterUpper }}S
chema.dump(result)
return jsonify(json_dumps), 200
return jsonify(json_dumps), 200
except Exception as e:
except Exception as e:
current_app.logger.error(e)
current_app.logger.error(e)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment