python tornado(4)路由传参

Tornado合集

本文章使用的Tornado目录结构

一、基础传参

需要修改:

  1. application中的映射
  2. views/index中的接口

1.1 application

在路由映射中添加了字典,内部传递了两个参数。

import tornado.web
from views import index
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r'/',index.IndexHandler,{"userid":"1","username":"gtd"})
        ]
        # 调用父类Application,传递handlers,传递配置
        super(Application,self).__init__(handlers,**config.settings)

1.2 views/index

添加了def initialize(self,userid,username): 函数并接收两个参数。

from tornado.web import RequestHandler

# 业务处理类
class IndexHandler(RequestHandler):
    # 传参,该方法会在HTTP方法前调用
    def initialize(self,userid,username):
        self.userid = userid
        self.username = username

    # 处理get请求
    def get(self,*args,**kwargs):
        print(self.username,self.userid)
        self.write("hello world")

二、服务器传参

2.1 提取url的特定部分

2.1.1 在application中添加指定路由,在路由中做正则匹配.

如下所示
(r’/send_parameter/(\w+)/(\w+)',index.SendParameterUrlHandler)
完整代码如下:

import tornado.web
from views import index
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r'/',index.IndexHandler,{"userid":"1","username":"gtd"}),
            # 将参数融入地址
            (r'/send_parameter/(\w+)/(\w+)',index.SendParameterUrlHandler)
        ]
        # 调用父类Application,传递handlers,传递配置
        super(Application,self).__init__(handlers,**config.settings)

2.1.2还需要在index中添加对应接口

# 从url中获取参数
class SendParameterUrlHandler(RequestHandler):
    def get(self,name,id,*args,**kwargs):
        print(f"SendParameterUrlHandler : {name}--{id}")
        self.write("厉害")

完整代码如下:

from tornado.web import RequestHandler

# 业务处理类
class IndexHandler(RequestHandler):
    # 传参,该方法会在HTTP方法前调用
    def initialize(self,userid,username):
        self.userid = userid
        self.username = username

    # 处理get请求
    def get(self,*args,**kwargs):
        print("IndexHandler : ",self.username,self.userid)
        self.write("hello world")

# 从url中获取参数
class SendParameterUrlHandler(RequestHandler):
    def get(self,name,id,*args,**kwargs):
        print(f"SendParameterUrlHandler : {name}--{id}")
        self.write("厉害")

2.2 查询字符串(GET)

2.2.1 在application中添加指定路由,如下所示。

(r’/send_parameter_get’, index.SendParameterGetHandler)

完整代码:

import tornado.web
from views import index
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r'/',index.IndexHandler,{"userid":"1","username":"gtd"}),
            # 将参数融入地址
            (r'/send_parameter/(\w+)/(\w+)',index.SendParameterUrlHandler),
            # get参数传递
            (r'/send_parameter_get', index.SendParameterGetHandler)
        ]
        # 调用父类Application,传递handlers,传递配置
        super(Application,self).__init__(handlers,**config.settings)

2.2.2在index中编写对应接口,并接收参数

# get参数获取
class SendParameterGetHandler(RequestHandler):
    def get(self,*args,**kwargs):
        name = self.get_query_argument(name="name",default="NO NAME",strip=False)
        id = self.get_query_argument(name="id",default="NO ID",strip=True)
        print(f"SendParameterGetHandler : {name}--{id}")
        self.write("get参数获取")

完整代码:

from tornado.web import RequestHandler

# 业务处理类
class IndexHandler(RequestHandler):
    # 传参,该方法会在HTTP方法前调用
    def initialize(self,userid,username):
        self.userid = userid
        self.username = username

    # 处理get请求
    def get(self,*args,**kwargs):
        print("IndexHandler : ",self.username,self.userid)
        self.write("hello world")

# 从url中获取参数
class SendParameterUrlHandler(RequestHandler):
    def get(self,name,id,*args,**kwargs):
        print(f"SendParameterUrlHandler : {name}--{id}")
        self.write("url中参数获取")

# get参数获取
class SendParameterGetHandler(RequestHandler):
    def get(self,*args,**kwargs):
        name = self.get_query_argument(name="name",default="NO NAME",strip=False)
        id = self.get_query_argument(name="id",default="NO ID",strip=True)
        print(f"SendParameterGetHandler : {name}--{id}")
        self.write("get参数获取")

2.3 请求体携带(POST)

2.3.1 application编写路由

(r’/send_parameter_post’, index.SendParameterPostHandler)

2.3.2 ./templates/indx.html

简单编写前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a>POST请求页面</a>
<form action="http://127.0.0.1:8002/send_parameter_post" method="post" name="form_post">
    name:<input type="text" name="name">
    id:<input type="text" name="id">
    <input type="submit" value="button">
</form>
</body>
</html>

2.3.3 index接口编写

class SendParameterPostHandler(RequestHandler):
    # get请求
    def get(self,*args,**kwargs):
        # 返回页面
        self.render('index.html')

    def post(self,*args,**kwargs):
        name = self.get_body_argument("name",default="NO NAME")
        id = self.get_body_argument("id",default="NO NAME")
        print(f"SendParameterPostHandler : {name}--{id}")
        self.write("POST请求成功")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值