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

Commitfe07a5e

Browse files
authored
Merge pull request#6 from zhangchunlin/master
add apijson delete support and example; change 'tag' to '@tag'
2 parents1700110 +ecdf07a commitfe07a5e

File tree

3 files changed

+142
-17
lines changed

3 files changed

+142
-17
lines changed

‎demo/apps/apijson_demo/templates/index.html

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<tab-panelabel="apijson get"name="tab_get"></tab-pane>
1010
<tab-panelabel="apijson post"name="tab_post"></tab-pane>
1111
<tab-panelabel="apijson put"name="tab_put"></tab-pane>
12+
<tab-panelabel="apijson delete"name="tab_delete"></tab-pane>
1213
</tabs>
1314
<Row>
1415
<i-colspan="3"><divalign="center">login user</div></i-col>
@@ -49,14 +50,27 @@
4950
<i-colspan="3"><divalign="center">PUT URL</div></i-col>
5051
<i-colspan="8"><i-inputvalue="/apijson/put"readonly/></i-col>
5152
</Row>
52-
<Rowv-if="tab_current==='tab_put'">
53-
<i-colspan="3"><divalign="center"><strong>apijson put</strong> request examples</div></i-col>
54-
<i-colspan="8">
55-
<i-selectv-model="request_data">
56-
<i-optionv-for="item in request_put":value="item.value":key="item.value">{ item.label }</i-option>
57-
</i-select>
58-
</i-col>
59-
</Row>
53+
<Rowv-if="tab_current==='tab_put'">
54+
<i-colspan="3"><divalign="center"><strong>apijson put</strong> request examples</div></i-col>
55+
<i-colspan="8">
56+
<i-selectv-model="request_data">
57+
<i-optionv-for="item in request_put":value="item.value":key="item.value">{ item.label }</i-option>
58+
</i-select>
59+
</i-col>
60+
</Row>
61+
62+
<Rowv-if="tab_current==='tab_delete'">
63+
<i-colspan="3"><divalign="center">DELETE URL</div></i-col>
64+
<i-colspan="8"><i-inputvalue="/apijson/delete"readonly/></i-col>
65+
</Row>
66+
<Rowv-if="tab_current==='tab_delete'">
67+
<i-colspan="3"><divalign="center"><strong>apijson delete</strong> request examples</div></i-col>
68+
<i-colspan="8">
69+
<i-selectv-model="request_data">
70+
<i-optionv-for="item in request_delete":value="item.value":key="item.value">{ item.label }</i-option>
71+
</i-select>
72+
</i-col>
73+
</Row>
6074

6175
<Row>
6276
<i-colspan="3"><divalign="center">request data</div></i-col>
@@ -76,14 +90,16 @@
7690
request_get :{{=request_get_json}},
7791
request_post :{{=request_post_json}},
7892
request_put :{{=request_put_json}},
93+
request_delete :{{=request_delete_json}},
7994
request_data :"",
8095
can_post :true,
8196
response_data :"",
8297
tab_current :"tab_get",
8398
tab2url :{
8499
"tab_get":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.get')}}",
85100
"tab_post":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.post')}}",
86-
"tab_put":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.put')}}"
101+
"tab_put":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.put')}}",
102+
"tab_delete":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.delete')}}"
87103
}
88104
},
89105
methods:{
@@ -120,6 +136,9 @@
120136
elseif(n=="tab_put"){
121137
vm.request_data=vm.request_put[0].value
122138
}
139+
elseif(n=="tab_delete"){
140+
vm.request_data=vm.request_delete[0].value
141+
}
123142
vm.response_data=""
124143
}
125144
}

‎demo/apps/apijson_demo/views.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def index():
7979
"moment_id": 1,
8080
"content": "new test comment"
8181
},
82-
"tag": "comment"
82+
"@tag": "comment"
8383
}''',
8484
},
8585
]
@@ -92,7 +92,19 @@ def index():
9292
"id": 1,
9393
"content": "modify moment content"
9494
},
95-
"tag": "moment"
95+
"@tag": "moment"
96+
}''',
97+
},
98+
]
99+
100+
request_delete= [
101+
{
102+
"label":"Delete moment",
103+
"value":'''{
104+
"moment": {
105+
"id": 1
106+
},
107+
"@tag": "moment"
96108
}''',
97109
},
98110
]
@@ -102,4 +114,5 @@ def index():
102114
"request_get_json":dumps(request_get),
103115
"request_post_json":dumps(request_post),
104116
"request_put_json":dumps(request_put),
117+
"request_delete_json":dumps(request_delete),
105118
}

‎uliweb_apijson/apijson/views.py

Lines changed: 99 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ def _filter_owner(self,model,model_setting,q):
254254

255255
defpost(self):
256256
tag=self.request_data.get("@tag")
257+
ifnottag:
258+
returnjson({"code":400,"msg":"'tag' parameter is needed"})
257259
forkeyinself.request_data:
258260
ifkey[0]!="@":
259261
rsp=self._post_one(key,tag)
@@ -265,7 +267,6 @@ def post(self):
265267
returnjson(self.rdict)
266268

267269
def_post_one(self,key,tag):
268-
tag=tagorkey
269270
modelname=key
270271
params=self.request_data[key]
271272
params_role=params.get("@role")
@@ -282,12 +283,12 @@ def _post_one(self,key,tag):
282283
request_setting_model=request_setting_tag.get(modelname,{})
283284
request_setting_POST=request_setting_model.get("POST",{})
284285
ADD=request_setting_POST.get("ADD")
285-
permission_check_ok=False
286286
ifADD:
287287
ADD_role=ADD.get("@role")
288288
ifADD_roleandnotparams_role:
289289
params_role=ADD_role
290290

291+
permission_check_ok=False
291292
POST=model_setting.get("POST")
292293
ifPOST:
293294
roles=POST.get("roles")
@@ -349,6 +350,8 @@ def _post_one(self,key,tag):
349350

350351
defput(self):
351352
tag=self.request_data.get("@tag")
353+
ifnottag:
354+
returnjson({"code":400,"msg":"'tag' parameter is needed"})
352355
forkeyinself.request_data:
353356
ifkey[0]!="@":
354357
rsp=self._put_one(key,tag)
@@ -361,7 +364,6 @@ def put(self):
361364
returnjson(self.rdict)
362365

363366
def_put_one(self,key,tag):
364-
tag=tagorkey
365367
modelname=key
366368
params=self.request_data[key]
367369
params_role=params.get("@role")
@@ -377,7 +379,6 @@ def _put_one(self,key,tag):
377379

378380
request_setting_model=request_setting_tag.get(modelname,{})
379381
request_setting_PUT=request_setting_model.get("PUT",{})
380-
permission_check_ok=False
381382

382383
ADD=request_setting_PUT.get("ADD")
383384
ifADD:
@@ -393,7 +394,10 @@ def _put_one(self,key,tag):
393394
exceptValueErrorase:
394395
returnjson({"code":400,"msg":"id '%s' cannot convert to integer"%(params.get("id"))})
395396
obj=model.get(id_)
397+
ifnotobj:
398+
returnjson({"code":400,"msg":"cannot find record id '%s'"%(id_)})
396399

400+
permission_check_ok=False
397401
PUT=model_setting.get("PUT")
398402
ifPUT:
399403
roles=PUT.get("roles")
@@ -419,8 +423,6 @@ def _put_one(self,key,tag):
419423
ifnotpermission_check_ok:
420424
returnjson({"code":400,"msg":"no permission"})
421425

422-
ifnotobj:
423-
returnjson({"code":400,"msg":"cannot find record id '%s'"%(id_)})
424426
kwargs= {}
425427
forkinparams:
426428
ifk=="id":
@@ -445,4 +447,95 @@ def _put_one(self,key,tag):
445447
self.rdict[key]=obj_dict
446448

447449
defdelete(self):
450+
tag=self.request_data.get("@tag")
451+
ifnottag:
452+
returnjson({"code":400,"msg":"'tag' parameter is needed"})
453+
forkeyinself.request_data:
454+
ifkey[0]!="@":
455+
rsp=self._delete_one(key,tag)
456+
ifrsp:
457+
returnrsp
458+
else:
459+
#only accept one table
460+
returnjson(self.rdict)
448461
returnjson(self.rdict)
462+
463+
def_delete_one(self,key,tag):
464+
modelname=key
465+
params=self.request_data[key]
466+
params_role=params.get("@role")
467+
468+
try:
469+
model=getattr(models,modelname)
470+
model_setting=settings.APIJSON_MODELS.get(modelname,{})
471+
request_setting_tag=settings.APIJSON_REQUESTS.get(tag,{})
472+
user_id_field=model_setting.get("user_id_field")
473+
exceptModelNotFoundase:
474+
log.error("try to find model '%s' but not found: '%s'"%(modelname,e))
475+
returnjson({"code":400,"msg":"model '%s' not found"%(modelname)})
476+
477+
request_setting_model=request_setting_tag.get(modelname,{})
478+
request_setting_DELETE=request_setting_model.get("DELETE",{})
479+
480+
ADD=request_setting_DELETE.get("ADD")
481+
ifADD:
482+
ADD_role=ADD.get("@role")
483+
ifADD_roleandnotparams_role:
484+
params_role=ADD_role
485+
486+
try:
487+
id_=params.get("id")
488+
ifnotid_:
489+
returnjson({"code":400,"msg":"id param needed"})
490+
id_=int(id_)
491+
exceptValueErrorase:
492+
returnjson({"code":400,"msg":"id '%s' cannot convert to integer"%(params.get("id"))})
493+
obj=model.get(id_)
494+
ifnotobj:
495+
returnjson({"code":400,"msg":"cannot find record id '%s'"%(id_)})
496+
497+
permission_check_ok=False
498+
DELETE=model_setting.get("DELETE")
499+
ifDELETE:
500+
roles=DELETE.get("roles")
501+
ifparams_role:
502+
ifnotparams_roleinroles:
503+
returnjson({"code":401,"msg":"'%s' not accessible by role '%s'"%(modelname,params_role)})
504+
roles= [params_role]
505+
ifroles:
506+
forroleinroles:
507+
ifrole=="OWNER":
508+
ifrequest.user:
509+
ifuser_id_field:
510+
ifobj.to_dict().get(user_id_field)==request.user.id:
511+
permission_check_ok=True
512+
break
513+
else:
514+
returnjson({"code":400,"msg":"need login user"})
515+
else:
516+
iffunctions.has_role(request.user,role):
517+
permission_check_ok=True
518+
break
519+
520+
ifnotpermission_check_ok:
521+
returnjson({"code":400,"msg":"no permission"})
522+
523+
try:
524+
obj.delete()
525+
ret=True
526+
exceptExceptionase:
527+
log.error("remove %s %s fail"%(modelname,id_))
528+
ret=False
529+
530+
obj_dict= {"id":id_}
531+
ifret:
532+
obj_dict["code"]=200
533+
obj_dict["message"]="success"
534+
obj_dict["count"]=1
535+
else:
536+
obj_dict["code"]=400
537+
obj_dict["message"]="fail"
538+
obj_dict["count"]=0
539+
self.rdict["code"]=400
540+
self.rdict["message"]="fail"
541+
self.rdict[key]=obj_dict

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp