创建待办事件
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)
# 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)
数据库数据示例: