创建待办事件

1. url 的配置

main.py代码中修改如下:

POST(CREATE):在服务器新建一个资源。

import web urls = ( '/', 'index', '/TodoLists', 'todo.TD', ) class index(object): def GET(self): return "Hello, world!" def POST(self): i = web.input() print i from pymongo import MongoClient # Making a Connection with MongoClient client = MongoClient('localhost', 27017) # Getting a Database db = client.todo_db # Getting a Collection collection = db['TodoLists'] if __name__ == "__main__": app = web.application(urls, globals()) app.run()

2. 编写todo.TD类增加POST方法

新建文件名为todo.py

HTTP请求

POST /zoos:新建一个动物园

返回结果

POST /collection:返回新生成的资源对象

# coding: utf-8 import web import json import datetime from main import collection class TD(object):#针对待办事件列表 处理类 def POST(self): ''' 新建待办事件 :return: ''' i = web.input() print i title = i.get('title', None) if not title: return json.dumps({'error':'标题让你吃了吗?'}) post_data={ 'title':title, 'post_date':datetime.datetime.now() } collection.insert_one(post_data) return json.dumps(post_data)

关于 web.input()

i = web.input() # get、post 提交的数据通收。

title = i.get('title', None) 这是什么意思?

从 i 中取 title,如果没有取到则将 title 赋值 None。不然,你直接 title = i.title 如果前面的表单中没有这一项会报错。

关于 程序老是报编码错误

数据库、程序文件等,请全部使用 utf-8 编码。

经常遇到程序编码错误?web.py 内部默认使用 unicode,经过 web.py 处理过的都是 unicode,所以你如果有中文,尝试转为 unicode,比如 a = u'中文啊'。大部分情况下可能解决。

2.1 python datetime.datetime is not JSON serializable 报错问题解决

Python自带的json.dumps方法序列化数据时候如果格式化的数据中有datetime类型数据时候会提示错误TypeError: datetime.datetime(2012, 12, 12, 15, 47, 15) is not JSON serializable

格式化输出时间格式如下:

yourdatetimeobj.strftime('%Y-%m-%d %H:%M:%S')

参考:

http://www.au92.com/archives/resove-python-can-not-serialize-datetime.html

2.2 TypeError: ObjectId('57edd0a41d41c893c1d9f89b') is not JSON serializable

str(post_data['_id'])

ObjectId转化格式字符串

3. 服务器指定返回数据MIME类型

web.header('Content-Type', 'application/json')

文件todo.py完整代码如下:

# coding: utf-8 import web import json import datetime from main import collection class TD(object): # 针对待办事件列表 处理类 def POST(self): ''' 新建待办事件 :return: ''' i = web.input() web.header('Content-Type', 'application/json') print i title = i.get('title', None) if not title: return json.dumps({'error': '标题让你吃了吗?'}) post_data = { 'title': title, 'post_date': datetime.datetime.now() } collection.insert_one(post_data) post_data['post_date'] = post_data['post_date'].strftime('%Y-%m-%d %H:%M:%S') post_data['_id'] = str(post_data['_id']) return json.dumps(post_data)

数据库数据示例: