运行参数
参数 | 说明 |
debug | 是否开始调试模式,开启后修改过python代码会自动重启 |
threaded | 是否开启多线程 |
port | 启动指定服务器端口号 |
host | 主机,默认127.0.0.1,指定0.0.0.0代表本机所有ip |
参数
- 路径参数
- 位置参数
- 关键字参数
- 请求参数
- get参数在路径?之后
- post参数在请求体
route中参数
- 都是关键字参数
- 默认标识是尖括号<name>
- name需要和对应的视图函数的参数名保持一致
- 参数允许有默认值
- 如果有默认值,那么在路由中可以不传输参数
- 没有的话参数在路由中必须传递
- 默认参数类型是字符串
- 参数语法<converter:var>
- converter类型
- string类型
route规则
- 语法
- <converter:variable_name>
converter类型
类型 | 说明 |
string | 接收任何没有斜杠的(默认) |
int | 接收整形 |
float | 接收浮点型 |
path | 接收路径,可接收斜线 |
uuid | 只接受uuid字符串,唯一码,一种生成规则 |
any | 允许列出元组种的任意一个(类似枚举) |
@app.route('/get/<string:name>/') def get(name): print(name) print(type(name)) return '获取参数' @app.route('/any/<any(a,b,c):word>/') def any(word): print(word) print(type(word)) return 'Any'
# 网页请求
http://127.0.0.1:5000/get/nihao/
# 输出结果
nihao
<class 'str'>
# 网页请求
http://127.0.0.1:5000/any/a/
# 输出结果
Any
<class 'str'>
请求方法
@app.route('/rule/',methods=['GET','POST']) def hello(): return 'HH'
- methods种指定请求方法
- GET、POST、HEAD、PUT、DELETE
- url_for
- 语法:url_for(‘函数名’,参数名=value)
- 反向解析,根据函数名字,获取反向路径 可以在模板中直接使用
- 使用在app中
- url_for(‘endpoint’)
- endpoint默认是函数的名字
- 使用在蓝图中
- url_for(‘bluename.endpoint’)
- 蓝图名字.函数名
- 获取静态资源路径
- url_for(‘static’,filename=’path’)
- static 资源
- path 相对于资源的路径
# url_for反响解析 # 1.在视图内 # view.py @app.route('/test/') def test(): return 'Test' @app.route('/url/') def url(): print(url_for('test')) return '反向解析' # 2.或在模板中 # view.py @app.route('/hello/') def hello(): return render_template('hello.html') # html文件 <body> <a href="{{url_for('url')}}">反向解析</a> </body>
Request
服务器在接收到客户端的请求后,会自动创建Request对象
由Flask框架构建,Request对象不可修改
属性
属性 | 说明 |
url | 完整请求地址 |
base_url | 去掉GET参数的URL |
host_url | 只有主机和端口号的URL |
path | 路由中的路径 |
method | 请求方法 |
remote_addr | 请求的客户端地址 |
args | GET请求参数 |
form | POST请求参数 |
files | 文件上传 |
headers | 请求头 |
cookies | 请求中的cookie |
from flask import request @app.route('/request/') def req(): print(request.url) print(request.data) print(request.headers) print(request.method) print(request.form) print(request.cookies) print(request.args) print(request.user_agent) return 'request请求' # 允许结果 http://127.0.0.1:5000/request/ b'' Host: 127.0.0.1:5000 Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 GET ImmutableMultiDict([]) {} ImmutableMultiDict([])
ImmutableMultiDict类字典数据结构
- 与字典的区别:可以存在相同的键
- args和form都是ImmutableMultiDict的对象
- ImmutableMultiDict种数据获取方式
- dict[‘name’]或dict.get(‘name’)
- 获取指定key对应的所有值
- dict.getlist(‘name’)
Response
服务器返回给客户端的数据
由程序员创建,返回Response对象
- 直接返回Response对象
- 通过make_response(data,code)
- -data 返回的数据内容
- -code 状态码
- 返回文本内容,状态码
- 返回模板(本质和3一样)
重定向
- redirect()
- url_for(‘函数名’,参数=value)
- 终止执行
- 主动终止 abort(code)
- json响应
- flask.json.jsonify(json) 将数据格式化为json格式,同时设置返回类型为application/json
- json.dumps 将数据格式化为json格式,没有设置返回的数据类型,默认为text/html
- 捕获异常
from flask import make_response from werkzeug.wrappers import Response # response @app.route('/response/') def resp(): response = make_response('你好',404) # 或 response = Response('你好',403) print(response) print(type(response)) return response # 重定向 from flask import redirect @app.route('/redirect/') def redir(): return redirect(url_for('resp')) # 终止执行 from flask import abort @app.route('/abort/') def abor(): abort(403) # json响应 from flask.json import jsonify @app.route('/json/') def pr_json(): result = jsonify({'name':'Susan'}) return result # 或 @app.route('/json/') def pr_json(): result = '{"name":"Susan"}' response = Response(response=result,content_type='application/json') return response
Cookie
- 客户端的会话技术
- 数据都是存储在浏览器中
- 支持过期
- 不能跨域名
- 不能跨浏览器
- flask中的cookie可以直接支持中文
- flask对cookie中的内容做了编码
cookie本身由浏览器保存,通过Response将cookie写到浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来。
Session
- 服务端会话技术
- 对数据进行安全操作
- 默认在内存中
- 不容易管理
- 容易丢失
- 不能多台电脑协作
- flask-session默认有效期31天