我想从应用程序访问API。这些API有装饰器@auth.requires_login()
。
我正在使用
从控制器调用apidemo_app /控制器/ plugin_task /任务
url = request.env.http_origin + URL('api', 'bind_task')
page = urllib2.Request(url)
page.add_header('cookie', request.env.http_cookie)
response = urllib2.urlopen(page)
演示API
api.py
@auth.requires_login()
@request.restful()
def bind_task():
response.view = 'generic.json'
return dict(GET=_bind_task)
def _bind_task(**get_params):
return json.dumps({'status': '200'})
上面的代码给出了错误:HTTPError: HTTP Error 401: UNAUTHORIZED
如何解决这个问题?我需要添加任何其他标题吗?
目录结构 -
Demo_app
|
|-controllers
|
|-api.py
|-plugin_task.py
控制器plugin_task.py
调用bind_task()
api.py
修改
应用.w2p文件 - Download
答案 0 :(得分:0)
看来 this 是在 Web2py 中指定 REST API 端点的正确方法:
auth.settings.allow_basic_login = True
@auth.requires_login()
@request.restful()
def api():
response.view = 'generic.json'
def GET(tablename, id):
if not tablename == 'person':
raise HTTP(400)
return dict(person = db.person(id))
def POST(tablename, **fields):
if not tablename == 'person':
raise HTTP(400)
return db.person.validate_and_insert(**fields)
return locals()
根据this answer,@auth.requires_login()
装饰器使用 HTTPBasicAuth,即 python -m pip install requests
之后的 easy to use:
import requests
requests.get('http://127.0.0.1:8000/myapp/default/api/person/1.json', auth=('user', 'pass'))