用户注册

在本文例子中,一个客户端可以使用 POST 请求到 /api/users 上注册一个新用户。请求的主体必须是一个包含 username 和 password 的 JSON 格式的对象。

Flask 中的路由的实现如下所示:

  1. @app.route('/api/users', methods = ['POST'])
    def new_user():
    username = request.json.get('username')
    password = request.json.get('password')
    if username is None or password is None:
    abort(400) # missing arguments
    if User.query.filter_by(username = username).first() is not None:
    abort(400) # existing user
    user = User(username = username)
    user.hash_password(password)
    db.session.add(user)
    db.session.commit()
    return jsonify({ 'username': user.username }), 201, {'Location': url_for('get_user', id = user.id, _external = True)}

这个函数是十分简单地。参数 username 和 password 是从请求中携带的 JSON 数据中获取,接着验证它们。

如果参数通过验证的话,新的 User 实例被创建。username 赋予给 User,接着使用 hash_password 方法散列密码。用户最终被写入数据库中。

响应的主体是一个表示用户的 JSON 对象,201 状态码以及一个指向新创建的用户的 URI 的 HTTP 头信息:Location。

注意:get_user 函数可以在 github 上找到完整的代码。

这里是一个用户注册的请求,发送自 curl:

  1. $ curl -i -X POST -H "Content-Type: application/json" -d '{"username":"miguel","password":"python"}' http://127.0.0.1:5000/api/users
  2. HTTP/1.0 201 CREATED
  3. Content-Type: application/json
  4. Content-Length: 27
  5. Location: http://127.0.0.1:5000/api/users/1
  6. Server: Werkzeug/0.9.4 Python/2.7.3
  7. Date: Thu, 28 Nov 2013 19:56:39 GMT
  8.  
  9. {
  10. "username": "miguel"
  11. }

需要注意地是在真实的应用中这里可能会使用安全的的 HTTP (譬如:HTTPS)。如果用户登录的凭证是通过明文在网络传输的话,任何对 API 的保护措施是毫无意义的。