精华内容
下载资源
问答
  • 下面的实验主要来自[1][2],但是实验2的代码进行了修改,修改过程参考了[3] #---------------------------------------------------实验1------------------------------------------------------------------- ...

    下面的实验主要来自[1][2],但是对实验2的代码进行了修改,修改过程参考了[3]

    #---------------------------------------------------实验1-------------------------------------------------------------------

    from tornado.web import Application, RequestHandler
    from tornado.ioloop import IOLoop
    
    class HelloHandler(RequestHandler):
      def get(self):
        self.write({'message': 'hello world'})
    
    def make_app():
      urls = [("/", HelloHandler)]
      return Application(urls, debug=True)
      
    if __name__ == '__main__':
        app = make_app()
        app.listen(3000)
        IOLoop.instance().start()

    python test1.py

    **************************************************************

    GET请求测试:

    浏览器打开http://127.0.0.1:3000/

    GET请求结果:

    #---------------------------------------------------实验2-----------------获取post请求中的json数据--------------------------------------------------

    from tornado.web import Application, RequestHandler
    from tornado.ioloop import IOLoop
    import json
    items = ['csdn']
    
    class TodoItems(RequestHandler):
      def get(self):
        self.write({'items': items})
    
    
    class TodoItem(RequestHandler):
      def post(self):
        # items.append(self.request.body)
        print("-----------------进入post----------------")
        print(self.request)
        print("--------------self.write之前------------------")
    
        jsonbyte = self.request.body
        jsonstr = jsonbyte.decode('utf8')  #解码,二进制转为字符串
        print('Json字符串:', jsonstr)
        jsonobj = json.loads(jsonstr)  #将字符串转为json对象
        
        # self.write({'message': self.request.body})
        self.write(jsonobj)
    
    def make_app():
      urls = [
        ("/", TodoItems),
        ("/api/item/", TodoItem)
      ]
      return Application(urls, debug=True)
      
    if __name__ == '__main__':
      app = make_app()
      app.listen(3000)
      IOLoop.instance().start()

    python test2.py

    **************************************************************

    GET请求测试:

    浏览器打开:

    http://127.0.0.1:3000/

    GET请求结果:

    **************************************************************

    POST请求测试:

    curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://127.0.0.1:3000/api/item/"

    POST请求结果:

    {"user_id": "123", "coin": 100, "success": 1, "msg": "OK!"}

    #----------------------------------------实验3-----------------------------curl发送delete请求---------------------------------------------------------

    from tornado.web import Application, RequestHandler
    from tornado.ioloop import IOLoop
    import json
    
    items = []
    
    class TodoItems(RequestHandler):
      def get(self):
        self.write({'items': items})
    
    
    class TodoItem(RequestHandler):
      def post(self, _):
        items.append(json.loads(self.request.body))
        self.write({'message': 'new item added'})
    
      def delete(self, id):
        global items
        new_items = [item for item in items if item['id'] is not int(id)]
        items = new_items
        self.write({'message': 'Item with id %s was deleted' % id})
    
    
    def make_app():
      urls = [
        ("/", TodoItems),
        (r"/api/item/([^/]+)?", TodoItem)
      ]
      return Application(urls, debug=True)
      
    if __name__ == '__main__':
      app = make_app()
      app.listen(3000)
      IOLoop.instance().start()

    python test3.py

    ***********************************************

    GET请求测试:

    浏览器打开http://127.0.0.1:3000/

    GET请求测试结果:

    ***********************************************

    POST请求测试:

    curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://127.0.0.1:3000/api/item/342"

    POST请求测试结果:

    {"message": "new item added"}

    ***********************************************

    DELETE请求测试:

    curl -v -X DELETE 127.0.0.1:3000/api/item/342

    DELETE请求测试结果:

    {"message": "Item with id 342 was deleted"}

    #---------------------------------------------------------结束--------------------------------------------------------------------------

    Reference:

    [1]How to build a REST API in Python with Tornado (part 1)

    [2]How to build a REST API in Python with Tornado (part 2)

    [3]tornado获取客户端以json字符串提交的数据

    展开全文
  • 下面的实验主要来自[1][2],但是实验2的代码进行了修改,修改过程参考了[3]#---------------------------------------------------实验1-------------------------------------------------------------------from...

    下面的实验主要来自[1][2],但是对实验2的代码进行了修改,修改过程参考了[3]

    #---------------------------------------------------实验1-------------------------------------------------------------------

    from tornado.web import Application, RequestHandler

    from tornado.ioloop import IOLoop

    class HelloHandler(RequestHandler):

    def get(self):

    self.write({'message': 'hello world'})

    def make_app():

    urls = [("/", HelloHandler)]

    return Application(urls, debug=True)

    if __name__ == '__main__':

    app = make_app()

    app.listen(3000)

    IOLoop.instance().start()

    python test1.py

    **************************************************************

    GET请求测试:

    GET请求结果:

    6c16899dfd45152ab750c05bededd026.png

    #---------------------------------------------------实验2-----------------获取post请求中的json数据--------------------------------------------------

    from tornado.web import Application, RequestHandler

    from tornado.ioloop import IOLoop

    import json

    items = ['csdn']

    class TodoItems(RequestHandler):

    def get(self):

    self.write({'items': items})

    class TodoItem(RequestHandler):

    def post(self):

    # items.append(self.request.body)

    print("-----------------进入post----------------")

    print(self.request)

    print("--------------self.write之前------------------")

    jsonbyte = self.request.body

    jsonstr = jsonbyte.decode('utf8') #解码,二进制转为字符串

    print('Json字符串:', jsonstr)

    jsonobj = json.loads(jsonstr) #将字符串转为json对象

    # self.write({'message': self.request.body})

    self.write(jsonobj)

    def make_app():

    urls = [

    ("/", TodoItems),

    ("/api/item/", TodoItem)

    ]

    return Application(urls, debug=True)

    if __name__ == '__main__':

    app = make_app()

    app.listen(3000)

    IOLoop.instance().start()

    python test2.py

    **************************************************************

    GET请求测试:

    浏览器打开:

    http://127.0.0.1:3000/

    GET请求结果:

    c7ad123172bf274e3773fd772c71b794.png

    **************************************************************

    POST请求测试:

    curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://127.0.0.1:3000/api/item/"

    POST请求结果:

    {"user_id": "123", "coin": 100, "success": 1, "msg": "OK!"}

    #----------------------------------------实验3-----------------------------curl发送delete请求---------------------------------------------------------

    from tornado.web import Application, RequestHandler

    from tornado.ioloop import IOLoop

    import json

    items = []

    class TodoItems(RequestHandler):

    def get(self):

    self.write({'items': items})

    class TodoItem(RequestHandler):

    def post(self, _):

    items.append(json.loads(self.request.body))

    self.write({'message': 'new item added'})

    def delete(self, id):

    global items

    new_items = [item for item in items if item['id'] is not int(id)]

    items = new_items

    self.write({'message': 'Item with id %s was deleted' % id})

    def make_app():

    urls = [

    ("/", TodoItems),

    (r"/api/item/([^/]+)?", TodoItem)

    ]

    return Application(urls, debug=True)

    if __name__ == '__main__':

    app = make_app()

    app.listen(3000)

    IOLoop.instance().start()

    python test3.py

    ***********************************************

    GET请求测试:

    GET请求测试结果:

    a13aa20146301b8c7f7fe3f5f8c166ff.png

    ***********************************************

    POST请求测试:

    curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://127.0.0.1:3000/api/item/342"

    POST请求测试结果:

    {"message": "new item added"}

    ***********************************************

    DELETE请求测试:

    curl -v -X DELETE 127.0.0.1:3000/api/item/342

    DELETE请求测试结果:

    {"message": "Item with id 342 was deleted"}

    #---------------------------------------------------------结束--------------------------------------------------------------------------

    Reference:

    展开全文
  • makefile 使用举例

    2020-09-12 10:06:48
    甲. 让make 每次都执行特定的命令 例子: all: date 说明: all 是第一个目标,所以成为默认的目标.DEFAULT_GOAL 由于all文件不存在,所以...1.all依赖于(file),生成all的配方是空,所以"all"无需做任何事2.生成(fil

    甲. 让make 每次都执行特定的命令

    例子:

    all:
    	date
    

    说明:

    1. all 是第一个目标,所以成为默认的目标.DEFAULT_GOAL
    2. 由于all文件不存在,所以必须重新制作目标all,制作的方法是,执行date命令

    乙. 让make 每次都更新文件

    例子: 热热身.
    假如文件名是test.txt,
    每次执行make都更新test.txt
    最简单写法当然是:

    all:
    	date > test.txt
    

    但是, 为了增强功能,这里决定要使用宏, 例如把文件名用一个宏变量来表示.
    同时引入依赖, 这样更便于控制, 用以判断是否需要更新.

    file = test.txt
    all: $(file)
    
    $(file) :
    	date > $@
    

    分析: 上述写法,

    1. all依赖于$(file), 生成all的配方是空, 所以对"all"无需做任何事
    2. 生成$(file)的配方是执行date 命令.
    3. 如果$(file)已经存在, 则不必在执行配方命令.
    4. 如果想让$(file)每次都更新,可以让它依赖于一个伪目标,如下示例
    file = test.txt
    all: $(file)
    
    $(file) : FORCE
    	date > $@
    .PHONY FORCE
    

    说明:

    1. 由于FORCE是不存在的,所以必须重新制作FORCE,但FORCE 是伪目标,所以总是可以制作成功.
    2. FORCE 更新了,所以要更新$(file), 其处方是date 命令, 所以$(file)被更新.

    丙. 让make 每次都判断,更新版本文件version.h

    例子: 来源于linux Makefile, 有自己的更改,我们考察一些其中的一些概念.
    当makefile 中三个变量改变的时候,就会更新version.h, version.h 就是这三个变量的变体.
    如果3个变量没有改变,则不必更新version.h,保留旧的时间戳.

    VERSION = 2
    PATCHLEVEL = 3
    SUBLEVEL = 1
    
    # filechk is used to check if the content of a generated file is updated.
    # Sample usage:
    # define filechk_sample
    #	echo $KERNELRELEASE
    # endef
    # version.h : Makefile
    #	$(call filechk,sample)
    # The rule defined shall write to stdout the content of the new file.
    # The existing file will be compared with the new one.
    # - If no file exist it is created
    # - If the content differ the new file is used
    # - If they are equal no change, and no timestamp update
    define filechk
    	@set -e;				\
    	echo '  CHK     $@';		\
    	mkdir -p $(dir $@);			\
    	$(filechk_$(1)) > $@.tmp;		\
    	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
    	rm -f $@.tmp;			\
    	else					\
    	echo '  UPD     $@';	\
    	mv -f $@.tmp $@;		\
    	fi
    endef
    
    define filechk_version.h
    (echo \#define LINUX_VERSION_CODE $(shell \
    	expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
    	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
    endef
    
    .PHONY: FORCE
    version.h: FORCE
    	$(call filechk,version.h)
    

    说明,

    1. 定义了2个函数,filechk, filechk_version.h
    2. filechk_version.h 只是简单的向控制台输出两行 define 字符串. 可被重定向生成version.h
    3. filechk 函数, 比较两个文件是否相同并决定是否替换文件.
      set -e 表示执行出错时立即退出
      调用了filechk_version.h 并把输出重定向到文件
      调用了cmp 程序,比较两个文件的内容,相同则保留旧的,不同则替换旧的.

    当你把主版本号, 或次版本号,build 号一改, 生成的文件与原文件不同,就替换原来的文件了.
    Makefile 中命令语句就是tab 开头的 shell 命令.

    另一种写法,供参考

    VERSION = 2
    PATCHLEVEL = 3
    SUBLEVEL = 1
    VERSTR=$(shell printf "0x%x" $$((($(VERSION)<<16)+($(PATCHLEVEL)<<8)+$(SUBLEVEL))))
    
    define filechk
    	@set -e;				\
    	echo '  CHK     $@';		\
    	$(filechk_$(1)) > $@.tmp;		\
    	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
    	rm -f $@.tmp;			\
    	else					\
    	echo '  UPD     $@';	\
    	mv -f $@.tmp $@;		\
    	fi
    endef
    
    define filechk_version.h
    (echo '#define KERNEL_VERSION(a,b,c) (a << 16) + (b << 8) + (c))'; \
    echo '#define KERNEL_VERSION' $(VERSTR); \
    )
    endef
    
    .PHONY: FORCE
    version.h: FORCE
    	$(call filechk,version.h)
    
    
    展开全文
  • 本博客原文来自:http://www.cnblogs.com/xiexiaoxiao/p/7772441.html,原作者... else写法 # 语法 if CONDITION: STATEMENTS else: STATEMENTS # 举例:a和b中的较大数赋值给c a, b, c = 1, 2, 3 i...

    本博客原文来自:http://www.cnblogs.com/xiexiaoxiao/p/7772441.html,对原作者表示感谢,此处个人转载。

    1. 常用 if ... else写法

    # 语法
    if CONDITION:
        STATEMENTS
    else:
        STATEMENTS
    
    # 举例:a和b中的较大数赋值给c
    a, b, c = 1, 2, 3
    if a>b:
        c = a
    else:
        c = b

    2. if ... else 一行表达式

    # 当if为真时,VAR = VALUE1, 否则VAR=VALUE2
    VAR = VALUE1 if CONDITION else VALUE2
    
    # 举例:a和b中的较大的数值赋值给c
    c = a if a>b else b

    3. 列表

    # 利用True、False的值等于1、0,列表索引通过比较表达式生成
    c = [b, a][a > b]

    4. 使用逻辑运算

    # 当a>b为真时,则取a, 否则取b
    c = (a>b and a or b)

     

    转载于:https://www.cnblogs.com/zhubiao/p/9359282.html

    展开全文
  • 网上找到很多写法,有些有些不对,自己摸索,找到一些可以通过测试的写法,总结如下(均以hr schema举例)。 1. 普通的select返回 1 declare 2 v_name employees.last_name%type; 3 v_salary number; 4...
  • SQL行转列举例

    2012-10-12 14:11:59
    很好的行转列SQL写法SQL的拼装和拆分有很好的描述,可以帮助解析SQL的重组。
  • 众多设计模式中,单例模式比较常见的...2. 提供该实例的全局访问点。 如果系统有类似的实体(有且只有一个,且需要全局访问),那么就可以将其实现为一个单例。实际工作中常见的应用举例 日志类,一个应用往往只
  • 本文档NP完全问题详细解释,举了很多的例子 NP完全问题(NP-C问题),是世界七大数学难题之一。 NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就...
  • 下面就将教您计算某列的字符串相加sql语句写法,希望您学习sql语句使用有所启迪。 一个表两列:column1char(12) column2int 举例:要求:以column2为聚合标准,把column1所有字符串相加 计...
  • 表现手法也叫写作方法是指在文学...另一种描述:衬托,是指不直接地主要的人物或事物进行描写,而是其背景、与之相关的人或事物加以描绘,使其形象突出,这种写法除了利用反差对比使主要形象更加鲜明外,还会使文章...
  • order by 的几种写法

    2009-06-18 08:48:00
    ORDER BY "栏位一" [ASC, DESC], "栏位二" [ASC, DESC] 若我们这两个栏位都选择由小往大的话,那这个子句就会造成结果是依据 "栏位一" 由小往大排。若有好几笔资料 "栏位一" 的值相等,那这几笔资料就...
  • 以JSON编码格式提交表单数据是...大家应该如何用表单上传一个文件的写法很熟悉,它需要在HTML中form标记上添加 enctype="multipart/form-data" 声明,就是告诉浏览器要按上传文件模式发送表单数据。而JSON格式提交
  • OR1200数据Cache的通写、回写应用举例

    千次阅读 2014-06-19 12:50:34
    通过使用DCache各种情景的分析以实现DCache模块的剖析,使用到DCache的情景有如下几种: (1)l.mtspr指令写DCache中的特殊寄存器(分通写法、回写法) (2)存储指令执行阶段DCache失靶(分通写法、回写法...
  • 工厂方法模式(Factory Method)工厂方法模式分为三种:1、普通工厂模式,就是建立一个工厂类,实现了同一接口的一些类进行实例的创建。首先看下关系图:举例如下:(我们举一个发送邮件和短信的例子)首先,创建二者...
  • union 是数据进行并集操作,不包括重复行,同时进行默认排序union all 也是数据进行并集操作,包括重复行,并且不进行排序以下进行举例说明,创建两张表demo1和demo2,然后通过union和union all...
  • Java基础 Java ...修饰符:方法的修饰,public static暂且认为是固定写法 返回值类型:方法执行后的返回值类型,如果没有返回值则指定为void 方法名:采用驼峰命名法,一般使用动词 参数:执行方法时
  • =)解析的时候会经常出问题,导致编译报错,所以就需要其进行转译才能通过。 符号 mybatis对应替换符号 中文释义 举例 > &gt;或者 大于 A &gt; B >= &gt;= 或者 <![CDATA[>=...
  • 之前一直数据库里面的外连接有些疑惑,理解的不是很透彻,今天总算自己建了个表,详细地对照了几种写法,总算彻底搞清楚了。 基本概念 左连接、右连接就是数据库里面的关键字 left join 和 right join, 当然在...
  • 大部分开发者来说,都是用order by rand()来随机调用文章,这种方法很简单,相信只要稍微了解帝国cms的读者都会使用。另外,WC曾发表了一个高效的调用方法:先用php随机出信息ID,然后SQL调用用id in (php随机的ID...
  • 好吧,让我来告诉你一种比较lazy的写法,你也许就不会表单验证那么头大了……  原理: 表单验证无非是要要收集每一条信息进行验证,也就是要写一个名为frmValid的javascript函数,在其...
  • 一domain的写法就是一一多一domain的写法也是一一4、mybatis中的多表查询 表之间的关系有几种: 一多 多一 一一 多举例: 用户和订单就是一多 订单和用户就是多一 一个用户可以下...
  • 完成拍我们需要新建一个文件夹 里面有这些文件 bf是暴力写法 gen是随机生成数据用的 std是理论上的正解 ...下面我们以a + bproblem举例 1.我们的bf.cpp 1 #include <bits/stdc+...
  • JAVA_HOMEtomcat的影响

    2009-07-03 08:30:00
    如果在环境变量中没设置 java_home 或 java_home 设置错的话: 启动 tomcat5.0 的时候,就会出现这样错误:windows 找不到文件 "-djava.... 正确写法举例:java_home=C:/Program Files/Java/jdk1.5.0 注:如果
  • 写法: sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填)); 本人认为sort函数强大之处在于十分灵活,它提供了一个比较函数,能让程序员自定义一些比较方式,完成更多地灵活比较,...
  • Qt5.5中OpenGL着色器程序编写

    千次阅读 2016-01-15 14:19:00
    Qt5中包含了OpenGL模块,并且其进行了一些封装,下面就Qt5中OpenGL的程序写法举例

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 218
精华内容 87
关键字:

对写法举例