Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbf6c2fd

Browse files
committed
add apijson get@query parameter support
1 parent89702f0 commitbf6c2fd

File tree

2 files changed

+94
-71
lines changed

2 files changed

+94
-71
lines changed

‎demo/apps/apijson_demo/views.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,25 @@ def index():
1414
"label":"Single record query: self user",
1515
"value":'''{
1616
"user":{
17-
"@role":"OWNER"
17+
"@role":"OWNER"
1818
}
1919
}''',
2020
},
2121
{
2222
"label":"Single record query: with id as parameter",
2323
"value":'''{
2424
"user":{
25-
"id":2,
26-
"@role":"ADMIN"
25+
"id":2,
26+
"@role":"ADMIN"
2727
}
2828
}''',
2929
},
3030
{
3131
"label":"Single record query: @column",
3232
"value":'''{
3333
"user":{
34-
"@column": "id,username,email",
35-
"@role":"OWNER"
34+
"@column": "id,username,email",
35+
"@role":"OWNER"
3636
}
3737
}''',
3838
},
@@ -43,23 +43,25 @@ def index():
4343
"@count":2,
4444
"@page":0,
4545
"user":{
46-
"@column":"id,username,nickname,email",
47-
"@order":"id-",
48-
"@role":"ADMIN"
46+
"@column":"id,username,nickname,email",
47+
"@order":"id-",
48+
"@role":"ADMIN"
4949
}
5050
}
5151
}''',
5252
},
5353
{
5454
"label":"Array query: moment",
5555
"value":'''{
56-
"[]":{
57-
"@count":10,
58-
"@page":0,
59-
"moment":{
60-
"@order":"id-"
61-
}
62-
}
56+
"moment[]":{
57+
"@count":10,
58+
"@page":0,
59+
"@query":2,
60+
"moment":{
61+
"@order":"id-"
62+
}
63+
},
64+
"total@":"/moment[]/total"
6365
}''',
6466
},
6567
]

‎uliweb_apijson/apijson/views.py

Lines changed: 77 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,33 @@ def __begin__(self):
1313
"code":200,
1414
"msg":"success"
1515
}
16+
self.vars= {}
1617

1718
try:
1819
self.request_data=loads(request.data)
1920
exceptExceptionase:
2021
log.error("try to load json but get exception: '%s', request data: %s"%(e,request.data))
2122
returnjson({"code":400,"msg":"not json data in the request"})
2223

24+
defapply_vars(self):
25+
forkeyinself.request_data:
26+
ifkey[-1]=="@":
27+
k=self.request_data[key]
28+
v=self.vars.get(k)
29+
ifv:
30+
self.rdict[key[:-1]]=v
31+
2332
defget(self):
2433
forkeyinself.request_data:
25-
ifkey[-2:]=="[]":
34+
ifkey[-1]=="@":
35+
#vars need to be applied later
36+
pass
37+
elifkey[-2:]=="[]":
2638
rsp=self._get_array(key)
2739
else:
2840
rsp=self._get_one(key)
2941
ifrsp:returnrsp
30-
42+
self.apply_vars()
3143
returnjson(self.rdict)
3244

3345
def_get_one(self,key):
@@ -95,35 +107,40 @@ def _get_one(self,key):
95107

96108
def_get_array(self,key):
97109
params=self.request_data[key]
98-
query_count=None
99-
query_page=None
100110
modelname=None
101111
model_param=None
102112
model_column_set=None
113+
114+
query_count=params.get("@count")
115+
ifquery_count:
116+
try:
117+
query_count=int(query_count)
118+
exceptValueErrorase:
119+
log.error("bad param in '%s': '%s'"%(n,params))
120+
returnjson({"code":400,"msg":"@count should be an int, now '%s'"%(params[n])})
121+
122+
query_page=params.get("@page")
123+
ifquery_page:
124+
#@page begin from 0
125+
try:
126+
query_page=int(params[n])
127+
exceptValueErrorase:
128+
log.error("bad param in '%s': '%s'"%(n,params))
129+
returnjson({"code":400,"msg":"@page should be an int, now '%s'"%(params[n])})
130+
ifquery_page<0:
131+
returnjson({"code":400,"msg":"page should >0, now is '%s'"%(query_page)})
132+
133+
#https://github.com/TommyLemon/APIJSON/blob/master/Document.md#32-%E5%8A%9F%E8%83%BD%E7%AC%A6
134+
query_type=params.get("@query",0)
135+
ifquery_typenotin [0,1,2]:
136+
returnjson({"code":400,"msg":"bad param 'query': %s"%(query_type)})
137+
103138
forninparams:
104-
ifn[0]=="@":
105-
ifnotquery_countandn=="@count":
106-
try:
107-
query_count=int(params[n])
108-
exceptValueErrorase:
109-
log.error("bad param in '%s': '%s'"%(n,params))
110-
returnjson({"code":400,"msg":"@count should be an int, now '%s'"%(params[n])})
111-
ifquery_count<=0:
112-
returnjson({"code":400,"msg":"count should >0, now is '%s' "%(query_count)})
113-
elifnotquery_pageandn=="@page":
114-
#@page begin from 0
115-
try:
116-
query_page=int(params[n])
117-
exceptValueErrorase:
118-
log.error("bad param in '%s': '%s'"%(n,params))
119-
returnjson({"code":400,"msg":"@page should be an int, now '%s'"%(params[n])})
120-
ifquery_page<0:
121-
returnjson({"code":400,"msg":"page should >0, now is '%s' "%(query_page)})
122-
123-
# TODO: support join in the future, now only support 1 model
124-
elifnotmodelname:
139+
ifn[0]!="@":
140+
# TODO: support join in the future, now only support 1 model
125141
modelname=n
126-
142+
break
143+
127144
ifnotmodelname:
128145
returnjson({"code":400,"msg":"no model found in array query"})
129146

@@ -174,37 +191,41 @@ def _get_array(self,key):
174191
ifnotowner_filtered:
175192
returnjson({"code":400,"msg":"'%s' cannot filter with owner"%(modelname)})
176193

177-
ifquery_count:
178-
ifquery_page:
179-
q=q.offset(query_page*query_count)
180-
q=q.limit(query_count)
181-
ifmodel_order:
182-
forkinmodel_order.split(","):
183-
ifk[-1]=="+":
184-
sort_key=k[:-1]
185-
sort_order="asc"
186-
elifk[-1]=="-":
187-
sort_key=k[:-1]
188-
sort_order="desc"
189-
else:
190-
sort_key=k
191-
sort_order="asc"
192-
column=getattr(model.c,sort_key)
193-
q=q.order_by(getattr(column,sort_order)())
194-
195-
def_get_info(i):
196-
d=i.to_dict()
197-
ifsecret_fields:
198-
forkinsecret_fields:
199-
deld[k]
200-
ifmodel_column_set:
201-
keys=list(d.keys())
202-
forkinkeys:
203-
ifknotinmodel_column_set:
194+
ifquery_typein [1,2]:
195+
self.vars["/%s/total"%(key)]=q.count()
196+
197+
ifquery_typein [0,2]:
198+
ifquery_count:
199+
ifquery_page:
200+
q=q.offset(query_page*query_count)
201+
q=q.limit(query_count)
202+
ifmodel_order:
203+
forkinmodel_order.split(","):
204+
ifk[-1]=="+":
205+
sort_key=k[:-1]
206+
sort_order="asc"
207+
elifk[-1]=="-":
208+
sort_key=k[:-1]
209+
sort_order="desc"
210+
else:
211+
sort_key=k
212+
sort_order="asc"
213+
column=getattr(model.c,sort_key)
214+
q=q.order_by(getattr(column,sort_order)())
215+
216+
def_get_info(i):
217+
d=i.to_dict()
218+
ifsecret_fields:
219+
forkinsecret_fields:
204220
deld[k]
205-
returnd
206-
l= [_get_info(i)foriinq]
207-
self.rdict[key]=l
221+
ifmodel_column_set:
222+
keys=list(d.keys())
223+
forkinkeys:
224+
ifknotinmodel_column_set:
225+
deld[k]
226+
returnd
227+
l= [_get_info(i)foriinq]
228+
self.rdict[key]=l
208229

209230
def_filter_owner(self,model,model_setting,q):
210231
owner_filtered=False

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp