向烧瓶添加oDesk API支持

Flask-oDesk的Python项目详细描述


要求

  • flask
  • python-odesk
  • python-oauth2

授权

快速启动

在使用odesk api之前,您需要获取一对api密钥。 访问oDesk API Center documentation 详细情况请注意,flask odesk通过oauth使用授权,它需要auth类型为“oauth”的密钥。

请确保会话所需的基于安全cookies的密钥已在设置中指明。py

SECRET_KEY = '(your random secret key)'

您需要在settings.py中存储一对odesk api密钥:

ODESK_KEY = '(your oDesk public key)'
ODESK_SECRET = '(your oDesk secret key)'

您还可以在settings.py中设置团队列表,该列表将能够授权。 如果不指定此选项或将列表保留为空,则所有ODEK用户都可以授权:

ODESK_AUTH_TEAMS = ('odesk:odeskpsbootcamp',)

请确保您已在app.py中正确注册了odesk模块。 请记住,url前缀可以是您喜欢的任何前缀:

from flask import Flask
from flaskext.odesk import odesk

app = Flask(__name__)
app.config.from_pyfile('settings.py')
app.register_module(odesk, url_prefix='/odesk')

使用授权

请使用decorator所需的登录名关闭匿名用户对网站某些部分的访问:

@app.route('/only/for/odesk/users')
@odesk.login_required
def admin():
    return "Welcome, oDesk user!"

如果您想在模板中指明登录或注销链接,则可以使用url_for函数和odesk_is_authorized变量:

{% if odesk_is_authorized %}
  <a href="{{ url_for('odesk.logout') }}">Log out</a>
{% else %}
  <a href="{{ url_for('odesk.login') }}">oDesk log in</a>
{% endif %}

要检查当前用户的授权,您可以使用已授权的方法:

@app.route('/test')
def test():
    if odesk.is_authorized():
        return "You are authorized."
    else:
        return "You are not authorized yet."

如果需要,可以从代码中手动启动授权过程:

if not odesk.is_authorized():
    return odesk.login()

您还可以使用next参数来指示URL,在授权过程结束后将重定向到哪里:

if not odesk.is_authorized():
    return odesk.login(next='/blah/blah')

您可以使用注销方法来注销用户。 请注意,与登录不同,此方法不会返回大量重定向。 它只是删除oauth会话。您应该手动返回响应:

if odesk.is_authorized():
    odesk.logout()
    return redirect('/')

如果要展开自动调整过程,可以在登录后使用decorator, 表示您的函数,在成功授权后将调用该函数:

@odesk.after_login
def save_session():
    # Getting current user's data. Please, see below how to use the Client.
    session['user'] = odesk.get_client().hr.get_user('me')

如果您在登录后使用了并将某些内容保存到会话中,请, 注销后不要忘记删除此会话,请在注销后使用decorator

@odesk.after_logout
def delete_session():
    if 'user' in session:
        del session['user']

使用客户端

您可以使用获取访问令牌方法获取当前访问令牌和访问令牌机密, 可存储在数据库中,用于以后访问客户端(如果需要):

if odesk.is_authorized():
    access_token, access_token_secret = odesk.get_access_token()

您可以使用get client方法获取客户端:

if odesk.is_authorized():
    c = odesk.get_client()
    c.team.get_teamrooms()

或者,即使当前用户未经授权,也可以使用客户端, 但是您有访问令牌和访问令牌密钥:

if not odesk.is_authorized():
    c = odesk.get_client(access_token, access_token_secret)
    c.team.get_teamrooms()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
mongodb通过分页从最后一个java程序读取到第一个java程序   当java在默认包中包含类时,它无法从jython中的jar导入打包的类文件   java问题与循环转发   java EditText(文本字段)在报警应用程序中不工作?   java从不同的双精度数计算   来自用户输入的带有验证的java数组列表   java在maven中,添加一个文件夹作为源文件夹,但不要将其包含在源jar中   与两个MySQL数据库的java Spring启动连接   java如何在Windows上使SWT按钮、文本和标签具有相同的高度?   java公共无效按钮。是否为我的情况启用了if语句?   数组如何从java中的路径获取目录和子目录中的文件数?   java避免空值、不变性、对象状态   算法当用户输入有字符串时如何调用方法?(爪哇)   java在使用resultSet进行JDBC导航时出现问题。next();   java Spring启动测试无法识别servlet   java改进构建时teamcity/maven fat jar   java轻量级、可折叠的执行器实现?   404 HTTP响应代码的Java URL检查   LDAP使用Java连接并搜索重复的配置文件