Flask 请求与响应

request:请求

response:响应

# http一次前后端交互:先请求,后响应

Request:客户端向服务器发送的请求

服务器在接收到客户端的请求后,会自动创建Request对象

由Flask框架创建,Request对象不可修改

url   完整请求地址  
base_url   去掉GET参数的URL  
host_url   只有主机和端口号的URL  
path   路由中的路径  
method *   请求方法  
remote_addr   请求的客户端地址  
args *   GET请求参数  
form *   POST请求参数  
files   文件上传,接受二进制文件  
headers   请求头  
cookies   请求中的cookie  
     
# 重要属性
print(request.method)  # 请求方式, 'GET'或'POST'


# GET 请求的参数
# ImmutableMultDict:类字典对象,打印出来是列表套元组的形式
print(request.args) # ImmutableMultDict[('name', 'lisi'),('name','wangwu'),('age', '33')] 跟字典用法一样,可以用中括号取他的Key对应的值,也可以用。get方式,区别是它可以允许有重复的Key
print(request.args.get('name')  # lisi 33    中括号的方式取值,如果key不存在就会报错
print(request.args['name'], request.args['age'])  # lisi 33
print(request.args.get('name')) #  lisi    在有多个name的情况下使用。get只会获取到第一个,在django中是获取到最后一个
print(request.args.getlist('name'))  # ['lisi', 'wangwu']   在有多个name的情况下要用getlist
      
# POST 请求的参数
print(request.form)  # ImmtableMultDict([('name','lucy'),('age','33')])
print(request.form.get('name'))  # lucy
      
# cookie
print(request.cookies)  # ImmtableMultDict(['name','hello'])
      
      
# 路径
res = request.get('http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=33',cookies={'name':'hello'})
      print(res.text)
      
print(request.path)  # /request/  路由
print(request.url)  # http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=33  完整的路径
print(request.base_url)  # http://127.0.0.1:5000/request/  去掉参数的路径
print(request.host_url)  # http://127.0.0.1:5000/  去掉参数、路径,只剩下ip和端口
print(request.remote_addr)  # 127.0.0.1 ,客户端的ip
      
print(request.files)  # 文件内容, ImmtableMultDict([])
print(request.headers)  # 请求头
print(request.user_agent)  # 用户代理,包括浏览器和操作系统的信息
      



      
      
      

app/views.py

from flask import Blueprint, request
from .models import *

# 蓝图
blue = Blueprint('user', __name__)


@blue.route('/request/', methods=['GET','POST'])
def get_request():
    pass
    print(request)  # <Request 'http://127.0.0.1:5000/request/' [GET]> 包括:大写的Request对象、网址、请求方式
    
    # 重要属性

 

# Response: 服务器端向客户端发送的响应
@blue.route('/response/')
def get_response():
    pass

# 响应的几种方式

# 1.返回字符串(不常用)
return 'response OK'

# 2.模版渲染(前后端不分离)
return render_tamplate('index.html', name='张三', age=33)

# 3.返回json数据(前后端分离)
data = {'name': '李四','age': 44}
return data

# jsonify(): 序列化, 字典=》字符串
return jsonify(data)

# 4.自定义Response对象
html = render_template('index_html', name='张三',age=33)
print(html,type(html))  # <class 'str'>

## 第一种写法
res = make_response(html,200)  # 需要导入make_response的包
## 另外一种写法
res = Response(html)  # 需要导入Response包
return res

 

# Redirect:重定向
@blue.route('/redirect/')
def make_redirect():
    pass

# 重定向的几种方式
    # 第一种:
    return redirect('http://www.qq.com')
    # 第二种:
    return redirect('/response/')  # 在项目内使用,它通过重新找路由,进到对应的视图函数中
    # 第三种:
    # 反向解析,通过视图函数名反过来找到路由器
    # url_for('蓝图名称.视图函数名')
    ret = url_for('user.get_response')
    print('ret', ret)  # /response/
    return redirect(ret)

    # url_for传参
    ret2 = url_for('user.get_request', name = '李四', age=66)
    return redirect(ret2)

 

posted @ 2023-05-31 10:29  ji哩咕噜  阅读(20)  评论(0编辑  收藏  举报