#sora#实验2

140149_KFCh_987833.jpg

昨天还是差不多12点半才睡,今天下午回去上自修肯定会困。。。


稍微试了下把flask应用中的类写在不同的python文件中。


实验目的:把flask应用中的类写成独立的模块,避免在主程序中写太多的class

源码:

flaskrr.py:

__author__ = 'hochikong'
from flask import Flask,request
from flask.ext.restful import Resource,Api,reqparse
from users import Users


app = Flask(__name__)
api = Api(app)

todos = {'task':'get the list of docker'}

parser = reqparse.RequestParser()
parser.add_argument('name',type=str,help='get the name')
parser.add_argument('auth-token',type=str,help='put the token here',location='headers')


class TodoSimple(Resource):
    def get(self,todo_id):
        args = parser.parse_args()
        if args['auth-token'] == 'thisismytoken':
            return {todo_id:todos[todo_id]}
        else:
            return {'error':'token error'},401

    def put(self,todo_id):
        args = parser.parse_args()
        if args['auth-token'] == 'thisismytoken':
            todos[todo_id] = request.json.get('data')
            return todos,201
        else:
            return {'status':'error'},401



class GetName(Resource):
    def post(self):
        args = parser.parse_args()
        name = args['name']
        #name = {}
        #name['ac'] = args['name']
        #name = request.json.get('name')
        return {'yourame':name}



api.add_resource(TodoSimple,'/todo/<string:todo_id>')
api.add_resource(GetName,'/getname')
api.add_resource(Users,'/users/','/users/<string:user_id>')

if __name__ == '__main__':
    app.run(debug=True)


users.py:

__author__ = 'hochikong'
from flask import request
from flask.ext.restful import Resource,reqparse

parser = reqparse.RequestParser()
parser.add_argument('auth-token',type=str,help='put the token here',location='headers')

class Users(Resource):
    users = {"admin":"hochikong"}
    def get(self):
        args = parser.parse_args()
        if args['auth-token'] == 'thisismytoken':
            return self.users
        else:
            return {"status":"error","reason":"token error"}

    def post(self,user_id):
        args = parser.parse_args()
        if args['auth-token'] == 'thisismytoken':
            self.users[user_id] = request.json.get('username')
            return self.users
        else:
            return {"status":"error","reason":"token error"}


测试的是users.py中的Users类,实现了get和post方法,可以创建或查询用户

设计要求:避免把所有类写在主程序里,代码模块化,提高可读性


代码分析:

每个独立的模块,应该导入并继承flask-restful的Resource类:

from flask.ext.restful import Resource,reqparse
class Users(Resource):

当方法中存在需要reqparse处理的参数,你也要导入reqparse和定义解析参数:

parser = reqparse.RequestParser()
parser.add_argument('auth-token',type=str,help='put the token here',location='headers')

在这里解析发送来的json文档是直接依靠request.json.get()解析的:

self.users[user_id] = request.json.get('username')

在这个例子中,用户数据只是保存在内存中,在sora的实际开发中,还得用sqlalchemy处理。

要使用这个类,只要在主程序中import User类,并添加为资源即可:

from users import Users
api.add_resource(Users,'/users/','/users/<string:user_id>')

这里为Users资源配置了多个url,/users是使用GET获取用户信息时访问的url,而加了user_id变量的是用于创建新的用户。


测试过程:

自然要先启动flaskrr.py

用昨天安装的REST client测试:

先测试get方法:

142410_QImi_987833.png

可以看到数据的正确输出


测试下post方法:

142738_96Ik_987833.png

:),用了全蛋哥的名字了


使用错误的token:

142908_g5Ms_987833.png


基本测试完毕,现在就差实际开发了

转载于:https://my.oschina.net/hochikong/blog/403525

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值