web开发中如何使用requestmethod过滤-创新互联

这篇文章将为大家详细讲解有关web开发中如何使用request method过滤,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联公司主要从事成都做网站、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务噶尔,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

request method过滤:

一般来说,即便是同一个url,因为请求方法不同,处理方式也不同;

如一url,GET方法返回网页内容,POST方法browser提交数据过来需要处理,并存入DB,最终返回给browser存储成功或失败;

即,需请求方法和正则同时匹配才能决定执行什么处理函数;

GET,请求指定的页面信息,并返回header和body;

HEAD,类似GET,只不过返回的响应中只有header没有body;

POST,向指定资源提交数据进行处理请求,如提交表单或上传文件,数据被包含在请求正文中,POST请求可能会导致新的资源的建立和已有资源的修改;

PUT,从c向s传送的数据取代指定的文档内容,MVC框架中或restful开发中常用;

DELETE,请求s删除指定的内容;

注:

s端可只支持GET、POST,其它HEAD、PUT、DELETE可不支持;

ver1:

例:

from wsgiref.simple_server import make_server

from webob import Request, Response, dec, exc

import re

class Application:

   # ROUTE_TABLE = {}

   ROUTE_TABLE = []  #[(method, re.compile(pattern), handler)]

   GET = 'GET'

   @classmethod

   def register(cls, method, pattern):

       def wrapper(handler):

           cls.ROUTE_TABLE.append((method, re.compile(pattern), handler))

           return handler

       return wrapper

   @dec.wsgify

   def __call__(self, request:Request) -> Response:

       for method, regex, handler in self.ROUTE_TABLE:

           if request.method.upper() != method:

               continue

           if regex.match(request.path):  #同if regex.search(request.path)

               return handler(request)

       raise exc.HTTPNotFound()

@Application.register(Application.GET, '/python$')  #若非要写成@Application.register('/python$'),看下例

def showpython(request):

   res = Response()

   res.body = '<h2>hello python</h2>'.encode()

   return res

@Application.register('post', '^/$')

def index(request):

   res = Response()

   res.body = '<h2>welcome</h2>'.encode()

   return res

if __name__ == '__main__':

   ip = '127.0.0.1'

   port = 9999

   server = make_server(ip, port, Application())

   try:

       server.serve_forever()

   except Exception as e:

       print(e)

   finally:

       server.shutdown()

       server.server_close()

VER2:

例:

from wsgiref.simple_server import make_server

from webob import Request, Response, dec, exc

import re

class Application:

   # ROUTE_TABLE = {}

   ROUTE_TABLE = []  #[(method, re.compile(pattern), handler)]

   GET = 'GET'

   @classmethod

   def route(cls, method, pattern):

       def wrapper(handler):

           cls.ROUTE_TABLE.append((method, re.compile(pattern), handler))

           return handler

       return wrapper

   @classmethod

   def get(cls, pattern):

       return cls.route('GET', pattern)

   @classmethod

   def post(cls, pattern):

       return cls.route('POST', pattern)

   @classmethod

   def head(cls, pattern):

       return cls.route('HEAD', pattern)

   @dec.wsgify

   def __call__(self, request:Request) -> Response:

       for method, regex, handler in self.ROUTE_TABLE:

           print(method, regex, handler)

           if request.method.upper() != method:

               continue

           matcher = regex.search(request.path)

           print(matcher)

           if matcher:  #if regex.search(request.path)

               return handler(request)

       raise exc.HTTPNotFound()

@Application.get('/python$')

def showpython(request):

   res = Response()

   res.body = '<h2>hello python</h2>'.encode()

   return res

@Application.post('^/$')

def index(request):

   res = Response()

   res.body = '<h2>welcome</h2>'.encode()

   return res

if __name__ == '__main__':

   ip = '127.0.0.1'

   port = 9999

   server = make_server(ip, port, Application())

   try:

       server.serve_forever()

   except Exception as e:

       print(e)

   finally:

       server.shutdown()

       server.server_close()

VER3:

例:

一个url可设置多个方法:

思路1:

如果什么方法都不写,相当于所有方法都支持;

@Application.route('^/$')相当于@Application.route(None,'^/$')

如果一个处理函数需要关联多个请求方法,这样写:

@Application.route(['GET','PUT','DELETE'],'^/$')

@Application.route(('GET','PUT','POST'),'^/$')

@Application.route({'GET','PUT','DELETE'},'^/$')

思路2:

调整参数位置,把请求方法放到最后,变成可变参数:

def route(cls,pattern,*methods):

methods若是一个空元组,表示匹配所有方法;

methods若是非空,表示匹配指定方法;

@Application.route('^/$','POST','PUT','DELETE')

@Application.route('^/$')相当于@Application.route('^/$','GET','PUT','POST','HEAD','DELETE')

例:

from wsgiref.simple_server import make_server

from webob import Request, Response, dec, exc

import re

class Application:

   # ROUTE_TABLE = {}

   ROUTE_TABLE = []  #[(method, re.compile(pattern), handler)]

   GET = 'GET'

   @classmethod

   def route(cls, pattern, *methods):

       def wrapper(handler):

           cls.ROUTE_TABLE.append((methods, re.compile(pattern), handler))

           return handler

       return wrapper

   @classmethod

   def get(cls, pattern):

       return cls.route(pattern, 'GET')

   @classmethod

   def post(cls, pattern):

       return cls.route(pattern, 'POST')

   @classmethod

   def head(cls, pattern):

       return cls.route(pattern, 'HEAD')

   @dec.wsgify

   def __call__(self, request:Request) -> Response:

       for methods, regex, handler in self.ROUTE_TABLE:

           print(methods, regex, handler)

           if not methods or request.method.upper() in methods:  #not methods,即所有请求方法

               matcher = regex.search(request.path)

               print(matcher)

               if matcher:

                   return handler(request)

       raise exc.HTTPNotFound()

@Application.get('/python$')

def showpython(request):

   res = Response()

   res.body = '<h2>hello python</h2>'.encode()

   return res

@Application.route('^/$')  #支持所有请求方法,结合__call__()中not methods

def index(request):

   res = Response()

   res.body = '<h2>welcome</h2>'.encode()

   return res

if __name__ == '__main__':

   ip = '127.0.0.1'

   port = 9999

   server = make_server(ip, port, Application())

   try:

       server.serve_forever()

   except Exception as e:

       print(e)

   finally:

       server.shutdown()

       server.server_close()

关于“web开发中如何使用request method过滤”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

新闻名称:web开发中如何使用requestmethod过滤-创新互联
网站地址:https://www.cdcxhl.com/article12/dhhdgc.html

成都网站建设公司_创新互联,为您提供品牌网站建设标签优化域名注册ChatGPTApp设计服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设