Flask(请求和响应 五)
路由设计
前后端不分离,模版渲染
建议:一个视图函数写一个url
- 获取所有的项目:
/projects
def list_projects()
- 获取单个项目内容:
/project/<id>
def get_project()
- 修改某个项目内容:
/project_edit/<id>
def edit_project()
前后端分离,通过method
/project
类的视图
GET
获取单个资源/project/<id>
GET
获取全部/projects
PUT
:修改资源POST
:创建资源DELETE
:删除资源
一个简单的ajax例子
html
1 |
|
python
1 | from flask import Flask, request, render_template |
使用ajax会返回X-Requested-With: XMLHttpRequest
可以在XHR
中找到
request
1 | from flask import request |
在request
中包含了全部的请求信息和环境信息
values
- form
- args
cookies
请求的cookies,dict类型
data
包含了请求数据,并转换成字符串,无法处理的mimetype则会转换成stream
stream
如果请求的表单无法解码,则会无改动的保存到这里。
当请求数据转换string时,使用data是最好的方式,这个stream只返回数据一次
headers
请求头,dict类型
files
通过POST或者PUT请求上传的文件
environ
WSGI隐含的环境配置
method
请求方式
remote_addr
远程IP
user-agent
提供反扒和恶意攻击
文件上传
增加文件类型限制,文件大小限制
1 | import os |
1 |
|
如果文件中存在空格,则可能出现问题
保存的时候需要添加secure_filename
1 | from werkzeug.utils import secure_filename |
响应头
为了返回一个json格式的内容,需要构造一个响应头信息
方式一
1 | import json |
方式二
1 | import json |
查看make_response
的源码:
1 | def make_response(*args): |
当没有入参的时候进入current_app.response_class()
进入之后可以看到response_class = Response
1 | class Response(ResponseBase, JSONMixin): |
所以默认的响应头就是"text/html"
方式三
1 | from flask import Flask, jsonify |
可以看一下jsonify
源码,其实也就是用的make_response
中的 current_app.response_class
1 | def jsonify(*args, **kwargs): |