运行参数

参数说明
debug是否开始调试模式,开启后修改过python代码会自动重启
threaded是否开启多线程
port启动指定服务器端口号
host主机,默认127.0.0.1,指定0.0.0.0代表本机所有ip

参数

  1. 路径参数
    • 位置参数
    • 关键字参数
  2. 请求参数
    • 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请求的客户端地址
argsGET请求参数
formPOST请求参数
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对象

  1. 直接返回Response对象
  2. 通过make_response(data,code)
    • -data 返回的数据内容
    • -code 状态码
  3. 返回文本内容,状态码
  4. 返回模板(本质和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天

发表回复