路由系统,请求,响应

路由系统

1.1路由经典写法

@app.route('/index',methods=['GET'],endpoint='index')
def index():
    return 'hello'

'''
	methods:能接受的请求方式
	endpoint:路由的别名
'''

1.2默认转换器

'default':          UnicodeConverter,
'string':           UnicodeConverter,
'any':              AnyConverter,
'path':             PathConverter,
'int':              IntegerConverter,
'float':            FloatConverter,
'uuid':             UUIDConverter,   

1.3本质

# 源码分析
'''
#1 装饰器   @route  python特殊语法糖,会把下面的函数当参数传入  order=route(order)  以后调用order本质就是在执行route(order)()                                                                                        
#2 route的内层函数---->本质是self.add_url_rule(rule, endpoint, f, **options)
def decorator(f):
    endpoint = options.pop("endpoint", None)
    self.add_url_rule(rule, endpoint, f, **options)
    return f

#3 self是app对象,add_url_rule 其实就Flask类的add_url_rule方法

#4 所以我们可以不使用装饰器来注册路由,而自己写
app.add_url_rule('/order/<string:pk>',view_func=order)
app.add_url_rule('/index',view_func=index)
'''

1.4cbv源码

'''
#1 cbv写法,继承MethodView,跟django一样

#2 as_view中的name是别名,在fbv中,endpoint是别名,在cbv中name最终会变成endpoint
app.add_url_rule方法中:	
    if endpoint is None:
        endpoint = _endpoint_from_view_func(view_func)  # type: ignore
        options["endpoint"] = endpoint
     view_func就是我们传入的视图函数
     
#3 app.add_url_rule('/index', view_func=index),路由有个别名,如果不写endpoint,会以函数名作为endpoint
# 如果是cbv,as_view(name='home') name就是路径的别名,endpoint name是必填参数,不传入会报错

#4 cbv加装饰器  在类中写一个类属性decorators: t.List[t.Callable] = []; decorators是一个列表类型。
   第一个位置的会放在最下层,多个装饰器执行顺序是从【上往下执行】
   
#5 cbv只允许某个请求方式或者几个请求方式   methods=['POST','GET','DELETE']
'''

1.5add_url_rule方法参数

### 参数
	-rule:请求的路径,可以使用转换器
    -endpoint:别名-->反向解析
    -view_func:视图类.as_view(name='xx')(视图函数内存地址)
    -methods:允许的请求方式
    # ---------以下不重要-----
    -defaults:字典,给视图函数传默认值
    -strict_slashes:对URL最后的 / 符号是否严格要求
    -redirect_to   # 308重定向

请求

from flask import request

request.method  请求方式
request.args    get请求参数
request.form    post请求参数
request.values	get,post提交的数据总和

request.cookie	cookie
request.headers	请求头

request.path	路径
request.full_path全路径
request.url		带服务器地址的全路径 
request.base_url 不带地址的全路径
request.url_root 域名+端口
request.host_url 域名+端口
request.host	 不带http的域名+端口

响应

1.向浏览器中写入cookie,都可以使用make_response包裹一下变成响应对象
from flask import make_response
res = make_response(render_tamplate('home.html'))
res.set_cookie('name','春游去动物园')
return res


2.向浏览器中写响应头
from flask import make_response
res = make_response(render_tamplate('home.html'))
res.headers['USER_AGENT'] = 'values'
return res
posted @ 2022-08-08 21:27  春游去动物园  阅读(32)  评论(0编辑  收藏  举报