Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
108 changes: 108 additions & 0 deletions flask-server-todo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

.idea/

migrations/
logs/

.DS_Store


12 changes: 12 additions & 0 deletions flask-server-todo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
本demo为flask简要示例,可正常运行,只提供 `/api/jsapi-oauth` `/api/get-user-info` `/api/get` 三个接口
详细 django 示例 请参考 https://github.com/007gzs/dingtalk-django-example

### 安装依赖
`pip install -U flask dingtalk-sdk`

### 修改配置
打开工程的demo.py文件,填入企业的CORP_ID和SECRET(CORP_ID和SECRET可以在企业OA后台找到)
`client = SecretClient('your CORP_ID', 'your CORP_SECRET')`

### 运行DEMO
`python demo.py`
31 changes: 31 additions & 0 deletions flask-server-todo/demo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#! /usr/bin/env python
import json
from flask import Flask, request
from dingtalk import SecretClient, DingTalkException

app = Flask(__name__)
client = SecretClient('your CORP_ID', 'your CORP_SECRET')

def generate_response(run):
try:
ret = run()
if 'errcode' not in ret:
ret['errcode'] = 0
except DingTalkException as e:
ret = {'errcode': e.errcode}
return json.dumps(ret), 200, {'Content-Type': 'application/json', "Access-Control-Allow-Origin": "*"}

@app.route("/api/jsapi-oauth")
def jsapi_oauth():
return generate_response(lambda: client.get_jsapi_params(request.args['href']))

@app.route("/api/get-user-info")
def get_user_info_by_code():
return generate_response(lambda: client.user.getuserinfo(request.args['code']))

@app.route("/api/get")
def get_user_info_by_id():
return generate_response(lambda: client.user.get(request.args['userid']))

if __name__ == '__main__':
app.run(host='0.0.0.0')
108 changes: 108 additions & 0 deletions tornado-server-todo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

.idea/

migrations/
logs/

.DS_Store


12 changes: 12 additions & 0 deletions tornado-server-todo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
本demo为tornado简要示例,可正常运行,只提供 `/api/jsapi-oauth` `/api/get-user-info` `/api/get` 三个接口
详细 django 示例 请参考 https://github.com/007gzs/dingtalk-django-example

### 安装依赖
`pip install -U tornado dingtalk-sdk`

### 修改配置
打开工程的demo.py文件,填入企业的CORP_ID和SECRET(CORP_ID和SECRET可以在企业OA后台找到)
`client = SecretClient('your CORP_ID', 'your CORP_SECRET')`

### 运行DEMO
`python demo.py`
40 changes: 40 additions & 0 deletions tornado-server-todo/demo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#! /usr/bin/env python
import json
import tornado.ioloop
import tornado.web
from dingtalk import SecretClient, DingTalkException

client = SecretClient('your CORP_ID', 'your CORP_SECRET')

class BaseHandler(tornado.web.RequestHandler):
def generate_response(self):
raise NotImplementedError
def get(self):
try:
ret = self.generate_response()
if 'errcode' not in ret:
ret['errcode'] = 0
except DingTalkException as e:
ret = {'errcode': e.errcode}
self.set_header('Content-Type', 'application/json')
self.set_header('Access-Control-Allow-Origin', '*')
self.write(json.dumps(ret))

class JsapiOauth(BaseHandler):
def generate_response(self):
return client.get_jsapi_params(self.get_query_arguments('href'))
class GetUserInfoByCode(BaseHandler):
def generate_response(self):
return client.user.getuserinfo(self.get_query_arguments('code'))
class GetUserInfoById(BaseHandler):
def generate_response(self):
return client.user.get(self.get_query_arguments('userid'))

if __name__ == "__main__":
app = tornado.web.Application([
(r"/api/jsapi-oauth", JsapiOauth),
(r"/api/get-user-info", GetUserInfoByCode),
(r"/api/get", GetUserInfoById),
])
app.listen(5000)
tornado.ioloop.IOLoop.current().start()