web.py 的基本使用方法

最近要快速做一些DEMO,所以直接用了web.py做后台web服务,记录下最基本最简单使用方法,理解一下它的逻辑。

web.py的介绍就不说了,一搜就有,直接开始。

-------------------------------------

我的环境是这样的:

        系统:ubuntu 22.04

        python: 3.8 (conda环境)

如果大家用下来和我经历的不一样,那就再琢磨琢磨,总会解决的~

-------------------------------------

1、安装

        pip install web.py

        安装过程没出现什么麻烦

2、用法

       1) 在代码前面得导入:

                import web

        2)程序启动入口里这么写:

	if __name__ == "__main__":
	    
	    urls = (
	        '/index','Index',
	        '/(js|css|images)/(.*)', 'Static',
	        '/poststh', 'Process',    
	    )
	    app = web.application(urls, globals())
	    app.run()

       urls:就是指定路由是啥,然后每个路由对应哪个类。

                url的写法可以直接写对的字符串,也可以用正则表达式来匹配对应的字符串。

                注意的是url有多级路由的话,那么类里对应get或post的参数就得一一对应,比如:

                urls = (‘/first/second/third’, 'Test')

                这个url有3级,分别是first, second, third,那么Test里get和post对应的参数就得有三个,后面例子可以看到。

        最后的两行,这么写就行。

        3)对应的类

        比如上面例子里,前两个,获取静态的内容,类这么写,主要是用get方式获取:

	class Index:
	    def GET(self):
	        # 读取 index.html 文件内容
	        with open('index.html', 'r') as file:
	            html_content = file.read()
	            return html_content
	class Static:
		#这里的参数取决于url,有几级就必须写几个参数,一一对应
	    def GET(self, media, file):
	        with open(media+'/'+file, 'r') as file:
	            html_content = file.read()
	            return html_content

        这里注意的就是上面说的,url的几级对应这里的get或post的参数,比如例子里:

        url是 '/(js|css|images)/(.*)',  那对应到Static类的GET方法参数里,media就是(js|css|images),file就是(.*),GET方法里就能获得这两块的值,然后进行处理。

        

        要返回动态内容的话,需要获取传上来的参数,这里以POST方式请求为例,分别对不同的content-type有不同接收参数的方法:        

	class Test:
		def POST(self):
            #------------------------------------------------------------------
			#content-type 是form-data,传文件上来时,my_file是关键词
			upload = web.input(my_file={})
			file_value = upload['my_file'].value
			#保存文件
			file_path = f"/home/test/website/test.file"
			with open(file_path, 'wb') as f:
			    f.write(file_value)	

            #------------------------------------------------------------------
			# 和上面看情况选择的用
			#content-type  是 application/json时: web.data就是参数,用json.loads转换为字典
			data = json.loads(web.data())
			my_key_value = data['my_key']

            #------------------------------------------------------------------
			# 和上面看情况选择的用
			#content-type  是 x-www-form-urlencoded 时,: 
			data = web.input()
			my_key_value = data['my_key']

            #------------------------------------------------------------------
            #开始处理	
            #------------------------------------------------------------------		

            #返回给前端用json的话,要加上这句:    
			web.header('content-type','text/json')
			
			#最终返回
			 dict_res = {}
			 dict_res["res"] = 0
			 return json.dumps(dict_res, ensure_ascii=False)

        4)运行

                选择运行这个服务,只需要执行写的这个python入口文件(假设叫main.py):

                python mian.py 8888

                后面的8888 是端口号,想监听哪个端口就写哪个。

           

        OK,到此为止,应该就能很快的写一个web服务的应用DEMO啦。

  • 21
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值