Flask-User使用REST而不使用本地数据库

时间:2016-05-16 15:56:14

标签: python rest flask flask-sqlalchemy

我正在构建服务,我希望通过其他服务进行用户身份验证和用户连接,而无需在演示服务器上安装数据库。

我是Flask的新手,发现这个Flask User用于管理,这似乎很方便我的需要,但需要数据库的映射。我一直在尝试创建一个SQLAlchemyAdapter来模拟这个但没有成功但没有成功。此外,它似乎不是一个合适的解决方案,因为SQLAlchemy用于数据库使用。

是否可以使用REST接口而不是数据库进行某种用户管理?

谢谢!

1 个答案:

答案 0 :(得分:1)

这很容易做到,你可以使用另一个提供REST API来让用户使用他们的用户名和密码进行身份验证(facebook,google等等...) 例如:

让用户使用其API进行身份验证:

def authenticate(username, password):
    """
    Example of
    function that manages authentication
    """
    global headers
    separator   = (':').encode('utf-8')
    auth_user    = username+separator+password
    headers     =   {'Authorization': 'Basic %s' % user}
    connect     = httplib.HTTPSConnection("uri")
    connect.request('GET', '/rest/auth/', headers=headers)

    response = connect.getresponse()

    statusCode = response.status

    return statusCode

使用flask.request,您可以从用户/登录页面请求数据:

<body>
        <div id="page-content-wrapper">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-lg-12">
                        <h1>Login</h1>
                        <form action="" method="post">
                                <input type="text" size="30" placeholder="Username" name="username" value="{{
                                  request.form.username }}"></br>
                                 <input type="password" size="30" placeholder="Password" name="password" value="{{
                                  request.form.password }}"></br>

                                <input class="btn btn-default" width="55" id="btn-login" type="submit" value="Login">
                            </form>
                                {% if error %}
                            <p class="error"><strong>Error:</strong> {{ error }}</p>
                                {% endif %}

                    </div>
                </div>
            </div>
        </div>

</body>

以下是获取表单数据的python函数:

@app.route('/', methods=['GET', 'POST'])
@app.route('/login', methods=['GET', 'POST'])
def login():

    global username
    global password
    e = None
    try:
        if flask.request.method == 'POST':

            username    =(flask.request.form['username']).encode('utf-8')
            password    =(flask.request.form['password']).encode('utf-8')

            auth = authenticate(username, password)

            if auth == 200:
                return flask.render_template('index.html')
            else:
                print('no ooo')
    except Exception as e:
        print(e)

    return flask.render_template('login.html', error=e)