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

add apijson delete support and example; change 'tag' to '@tag'#6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
TommyLemon merged 1 commit intoAPIJSON:masterfromzhangchunlin:master
Dec 28, 2018
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 28 additions & 9 deletionsdemo/apps/apijson_demo/templates/index.html
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,6 +9,7 @@
<tab-pane label="apijson get" name="tab_get"></tab-pane>
<tab-pane label="apijson post" name="tab_post"></tab-pane>
<tab-pane label="apijson put" name="tab_put"></tab-pane>
<tab-pane label="apijson delete" name="tab_delete"></tab-pane>
</tabs>
<Row>
<i-col span="3"><div align="center">login user</div></i-col>
Expand DownExpand Up@@ -49,14 +50,27 @@
<i-col span="3"><div align="center">PUT URL</div></i-col>
<i-col span="8"><i-input value="/apijson/put" readonly/></i-col>
</Row>
<Row v-if="tab_current==='tab_put'">
<i-col span="3"><div align="center"><strong>apijson put</strong> request examples</div></i-col>
<i-col span="8">
<i-select v-model="request_data">
<i-option v-for="item in request_put" :value="item.value" :key="item.value">{ item.label }</i-option>
</i-select>
</i-col>
</Row>
<Row v-if="tab_current==='tab_put'">
<i-col span="3"><div align="center"><strong>apijson put</strong> request examples</div></i-col>
<i-col span="8">
<i-select v-model="request_data">
<i-option v-for="item in request_put" :value="item.value" :key="item.value">{ item.label }</i-option>
</i-select>
</i-col>
</Row>

<Row v-if="tab_current==='tab_delete'">
<i-col span="3"><div align="center">DELETE URL</div></i-col>
<i-col span="8"><i-input value="/apijson/delete" readonly/></i-col>
</Row>
<Row v-if="tab_current==='tab_delete'">
<i-col span="3"><div align="center"><strong>apijson delete</strong> request examples</div></i-col>
<i-col span="8">
<i-select v-model="request_data">
<i-option v-for="item in request_delete" :value="item.value" :key="item.value">{ item.label }</i-option>
</i-select>
</i-col>
</Row>

<Row>
<i-col span="3"><div align="center">request data</div></i-col>
Expand All@@ -76,14 +90,16 @@
request_get : {{=request_get_json}},
request_post : {{=request_post_json}},
request_put : {{=request_put_json}},
request_delete : {{=request_delete_json}},
request_data : "",
can_post : true,
response_data : "",
tab_current : "tab_get",
tab2url : {
"tab_get":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.get')}}",
"tab_post":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.post')}}",
"tab_put":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.put')}}"
"tab_put":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.put')}}",
"tab_delete":"{{=url_for('uliweb_apijson.apijson.views.ApiJson.delete')}}"
}
},
methods: {
Expand DownExpand Up@@ -120,6 +136,9 @@
else if (n=="tab_put") {
vm.request_data = vm.request_put[0].value
}
else if (n=="tab_delete") {
vm.request_data = vm.request_delete[0].value
}
vm.response_data = ""
}
}
Expand Down
17 changes: 15 additions & 2 deletionsdemo/apps/apijson_demo/views.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -79,7 +79,7 @@ def index():
"moment_id": 1,
"content": "new test comment"
},
"tag": "comment"
"@tag": "comment"
}''',
},
]
Expand All@@ -92,7 +92,19 @@ def index():
"id": 1,
"content": "modify moment content"
},
"tag": "moment"
"@tag": "moment"
}''',
},
]

request_delete = [
{
"label":"Delete moment",
"value":'''{
"moment": {
"id": 1
},
"@tag": "moment"
}''',
},
]
Expand All@@ -102,4 +114,5 @@ def index():
"request_get_json":dumps(request_get),
"request_post_json":dumps(request_post),
"request_put_json":dumps(request_put),
"request_delete_json":dumps(request_delete),
}
105 changes: 99 additions & 6 deletionsuliweb_apijson/apijson/views.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -254,6 +254,8 @@ def _filter_owner(self,model,model_setting,q):

def post(self):
tag = self.request_data.get("@tag")
if not tag:
return json({"code":400,"msg":"'tag' parameter is needed"})
for key in self.request_data:
if key[0]!="@":
rsp = self._post_one(key,tag)
Expand All@@ -265,7 +267,6 @@ def post(self):
return json(self.rdict)

def _post_one(self,key,tag):
tag = tag or key
modelname = key
params = self.request_data[key]
params_role = params.get("@role")
Expand All@@ -282,12 +283,12 @@ def _post_one(self,key,tag):
request_setting_model = request_setting_tag.get(modelname,{})
request_setting_POST = request_setting_model.get("POST",{})
ADD = request_setting_POST.get("ADD")
permission_check_ok = False
if ADD:
ADD_role = ADD.get("@role")
if ADD_role and not params_role:
params_role = ADD_role

permission_check_ok = False
POST = model_setting.get("POST")
if POST:
roles = POST.get("roles")
Expand DownExpand Up@@ -349,6 +350,8 @@ def _post_one(self,key,tag):

def put(self):
tag = self.request_data.get("@tag")
if not tag:
return json({"code":400,"msg":"'tag' parameter is needed"})
for key in self.request_data:
if key[0]!="@":
rsp = self._put_one(key,tag)
Expand All@@ -361,7 +364,6 @@ def put(self):
return json(self.rdict)

def _put_one(self,key,tag):
tag = tag or key
modelname = key
params = self.request_data[key]
params_role = params.get("@role")
Expand All@@ -377,7 +379,6 @@ def _put_one(self,key,tag):

request_setting_model = request_setting_tag.get(modelname,{})
request_setting_PUT = request_setting_model.get("PUT",{})
permission_check_ok = False

ADD = request_setting_PUT.get("ADD")
if ADD:
Expand All@@ -393,7 +394,10 @@ def _put_one(self,key,tag):
except ValueError as e:
return json({"code":400,"msg":"id '%s' cannot convert to integer"%(params.get("id"))})
obj = model.get(id_)
if not obj:
return json({"code":400,"msg":"cannot find record id '%s'"%(id_)})

permission_check_ok = False
PUT = model_setting.get("PUT")
if PUT:
roles = PUT.get("roles")
Expand All@@ -419,8 +423,6 @@ def _put_one(self,key,tag):
if not permission_check_ok:
return json({"code":400,"msg":"no permission"})

if not obj:
return json({"code":400,"msg":"cannot find record id '%s'"%(id_)})
kwargs = {}
for k in params:
if k=="id":
Expand All@@ -445,4 +447,95 @@ def _put_one(self,key,tag):
self.rdict[key] = obj_dict

def delete(self):
tag = self.request_data.get("@tag")
if not tag:
return json({"code":400,"msg":"'tag' parameter is needed"})
for key in self.request_data:
if key[0]!="@":
rsp = self._delete_one(key,tag)
if rsp:
return rsp
else:
#only accept one table
return json(self.rdict)
return json(self.rdict)

def _delete_one(self,key,tag):
modelname = key
params = self.request_data[key]
params_role = params.get("@role")

try:
model = getattr(models,modelname)
model_setting = settings.APIJSON_MODELS.get(modelname,{})
request_setting_tag = settings.APIJSON_REQUESTS.get(tag,{})
user_id_field = model_setting.get("user_id_field")
except ModelNotFound as e:
log.error("try to find model '%s' but not found: '%s'"%(modelname,e))
return json({"code":400,"msg":"model '%s' not found"%(modelname)})

request_setting_model = request_setting_tag.get(modelname,{})
request_setting_DELETE = request_setting_model.get("DELETE",{})

ADD = request_setting_DELETE.get("ADD")
if ADD:
ADD_role = ADD.get("@role")
if ADD_role and not params_role:
params_role = ADD_role

try:
id_ = params.get("id")
if not id_:
return json({"code":400,"msg":"id param needed"})
id_ = int(id_)
except ValueError as e:
return json({"code":400,"msg":"id '%s' cannot convert to integer"%(params.get("id"))})
obj = model.get(id_)
if not obj:
return json({"code":400,"msg":"cannot find record id '%s'"%(id_)})

permission_check_ok = False
DELETE = model_setting.get("DELETE")
if DELETE:
roles = DELETE.get("roles")
if params_role:
if not params_role in roles:
return json({"code":401,"msg":"'%s' not accessible by role '%s'"%(modelname,params_role)})
roles = [params_role]
if roles:
for role in roles:
if role == "OWNER":
if request.user:
if user_id_field:
if obj.to_dict().get(user_id_field)==request.user.id:
permission_check_ok = True
break
else:
return json({"code":400,"msg":"need login user"})
else:
if functions.has_role(request.user,role):
permission_check_ok = True
break

if not permission_check_ok:
return json({"code":400,"msg":"no permission"})

try:
obj.delete()
ret = True
except Exception as e:
log.error("remove %s %s fail"%(modelname,id_))
ret = False

obj_dict = {"id":id_}
if ret:
obj_dict["code"] = 200
obj_dict["message"] = "success"
obj_dict["count"] = 1
else:
obj_dict["code"] = 400
obj_dict["message"] = "fail"
obj_dict["count"] = 0
self.rdict["code"] = 400
self.rdict["message"] = "fail"
self.rdict[key] = obj_dict

[8]ページ先頭

©2009-2025 Movatter.jp