WEB后端服务第8天-Tornado第一天

WEB后端服务第8天

一、Tornado请求与响应

1.1 请求的参数如何获取

1.1.1 参数的来源
  • RequestHandler对象中提供的方法来获取

  • RequestHandler对象中的request对象的字典来获取

    request 是HTTPServerRequest类对象

    reuqest所有的信息以字典格式存储的, 且value的数据类型都是字节类型

    • arguments
    • query_arguments
    • body_arguements
1.1.2 读取参数据方式

根据不同的请求方式来获取不同的请求参数。

  • self.get_argument()/get_arguments() 可以获取任何请求方式的请求参数
  • self.get_query_argument()/get_query_arguments() 可以get请求的查询参数
  • self.get_body_argument()/get_body_arguments() 可以获取put/post方法的表单参数

1.2 请求对象中包含哪些信息

  • 字典类型:

    • arguments(query_arguments/body_arguments)
    • headers
    • cookies
    • files
  • 普通类型

    • remote_ip
    • path
    • method
    • host
    • host_name

1.3 Cookie和Header如何读取与设置

  • Cookie的设置和读取

    • self.get_cookie(name, path, domain)
    • self.set_cookie(name, value, path, domain)
    • self.request.cookies 获取所有的cookie
    • self.clear_cookie(name, path, domain) 删除
  • Header的设置和读取

    • self.set_header(name, value)
    • self.request.headers
    • self.clear_header()

1.4 响应的信息如何设置

  • self.write()
  • self.set_status(code)
  • self.set_header(name, value)
  • self.set_cookie(name, value)
1.5 重定向
  • self.redirect(’/’)

中午默写:

1. Flask如何删除默认的日志处理器
from flask.logging import default_handler

app.logger.removeHandler(default_handler)
2. 在flask的视图函数内,从request.files读取上传文件的对象有哪些属性和方法。
file = request.files.get('photo')
file.name
file.content_type
file.content_length
file.save(path)
3. 日志处理器HTTPHandler创建时,需要指定哪些参数,举例说明
from logging.handlers import HTTPHandler
handler = HTTPHandler(host, url, method)

二、 路由规则

路由则表示为url, 在url中可以使用正则向后端服务处理函数传入变量参数。类传于flask的path的变量。

在Application的handlers中指定的路由url可以配置变量,必须是一个分组。

return tornado.web.Application([
        (r'/order/(\d+)', OrderHandler),

    ], default_host=tornado.options.options.host)
class OrderHandler(tornado.web.RequestHandler):
	  def get(self, code):
	  		self.write('查询')

在指定方法处理函数中,必须提供接收url路径中的变量值的参数。如get()方法的code参数。

如果url路由中存在多个变量,在方法的参数列表也应该是多个,且由左到右依次对应接收。

但是,如果正则分组中声明了分组名, 则按名称传值。即分组名就是函数的参数名。

(r'/order/(?P<action_code>\d+)/(?P<order_id>\d+)', OrderHandler),
   def get(self, order_id, action_code):

三、请求切入点 【了解】

说明: 每次请求都会创建新的RequestHandler子类的对象。

  1. initialize()

    在调用对应的行为方法(get, post)之前都会调用它(RequestHandler子类对象)的initialize()方法来进行初始化。

  2. prepare() 【建议选择】

    预处理的方法,在initialize()之后, 行为方法之前调用的。

    主要用于验证参数、权限、读取缓存等。

  3. on_finish()

    请求处理完成后,释放资源的方法,在行为方法完成后调用。

四、API接口设计

任务: 通过api接口可以实现用户登录、用户的注册, 用户信息的变更和口令修改,及用户的注销

接口: /user

  1. 用户登录

    请求方法: GET

    请求参数(要求json格式):

    参数名类型是否必选
    nameString必须
    pwdString必须
    mobile_typeint可选; 手机OS类型,如android: 1, iOS: 2, Pc: 3

    响应数据(json格式):

    {
        "msg": "success",
        "token": "adkdkaid1k1k1ka00"
    }
    
  2. 用户注册

    请求方法: POST

  3. 信息变更(用户名、手机号、城市)

    请求方法: PUT

  4. 修改口令

    请求方法: PUT

  5. 用户注销

    请求方法: Delete

4.1 接收json数据

import json

json_str = self.request.body.decode()

content_type = self.request.headers.get('Content-Type')
if content_type.startswith('application/json'):
		json_data = json.loads(json_str)

4.2 返回json数据

self.write({
    'msg': 'success'
})
# 设置响应的头,Content-Type为application/json 表示响应数据是json格式
self.set_header('Content-Type', 'application/json')

4.3 解决跨域请求问题

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Referrer" content="no-referrer">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>用户登录</title>
</head>
<body>

<button onclick="login()">登录</button>
<div id="result">

</div>
<script>
    function $(id) {
        return document.getElementById(id)
    }
    function login() {
        let headers = new Headers();
        headers.append('Content-Type', 'application/json');
        let options = {
            method: 'post',
            mode: 'no-cors',
            headers: headers,
            data:JSON.stringify({
                name: 'disen',
                pwd: '123'
            }),
        };
        request = new Request('http://10.36.174.2:8000/user', options)
        fetch(request).then(response => response.json())
        .then(data=>{
            $('result').innerHTML = data.msg
        });

    }
</script>

</body>
</html>

五、模板语法

六、数据模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值