- 作者简介:大家好,我是阿牛,全栈领域新星创作者。
- 博主的个人网站:阿牛的博客小屋
- 支持我:点赞+收藏⭐️+留言
- 系列专栏:flask框架快速入门
- 格言:迄今所有人生都大写着失败,但不妨碍我继续向前!
目录
- 个人简介
- 前言
- flask处理请求之request对象
- 处理响应
- 1.返回模板 render_template
- 2.重定向 redirect
- 3.返回JSON
- 4.自定义状态吗和响应头
- 结语
上一节我写了flask获取路径参数以及转换器的使用,这节我们来讲如何获取其他地方的参数以及flask如何处理响应。
flask处理请求之request对象如果想要获取其他地方的参数,可以通过Flask提供的request对象来读取,
不同位置的参数都存放在request的不同属性中,可以看下面的表格:
| 属性 | 说明 | 类型 |
|---|---|---|
| data | 记录请求的数据,并转换为字符串 | * |
| form | 记录请求中的表单数据 | MultDict |
| args | 记录请求中的查询参数 | MultDict |
| cookies | 记录请求中的cookies信息 | Dict |
| headers | 记录请求中的报文头 | EnvironHeaders |
| method | 记录请求使用的http方法 | GET/POST |
| url | 记录请求的URL地址 | string |
| files | 记录请求上传的文件 | * |
例如,想要获取请求/articles?channel_id 的参数,可以按如下方式使用:
#导入Flask类和request对象
from flask import Flask,request
app = Flask(__name__)
@app.route('/articles')
def get_articles():
channel_id = request.args.get('channel_id')
return 'you want get articles of channel {}'.format(channel_id)
不同于django,django的requset对象必须是视图函数的第一个参数,而Flask不同,我们需要用 from flask import request,并且不需要在视图函数参数中写request。
上传图片
客户端上传图片,并保存到服务器中
@app.route('/upload',methods=['POST'])
def upload_files():
f = request.files['pic'] # pic为文件名
# with open('./demo.png','wb') as new_file:
# new_file.write(f.read())
f.save('./demo.png') # 保存图片 save()方法是框架自带的快速保存文件的方法
return 'ok'
这个是存储上传的文件的路由和视图,还可以写一个提交文件的form表单对应的html,然后后端给个返回这个html文件的路由和视图,表单将文件提交到上面这个路由就行,这里先不写这个实现,大家可以用postman这款软件自己提交图片到这个路径测试一下就可以了,当你在做前后端结合的项目的时候这些东西都会慢慢掌握!
处理响应 1.返回模板 render_template使用 render_template 方法渲染模板并返回
例如,新建一个模板index.html,放在templates目录下:
Document
{{ my_str }}
{{ my_int }}
代码中的{{ }}为jinja2模板语法。
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
mystr = "hello aniu"
mint = 20
return render_template('index.html',my_str=mystr,my_int=mint)
跟django不同的是,返回到前端的参数是直接放到 render_template 方法中的,而django是封装成字典,当然,利用python 的语法,我们也可以将其封装成字典。
@app.route('/')
def index():
data = {
'my_str':'hello aniu',
'my_int':20
}
return render_template('index.html',**data)
**data会将字典转换成独立的参数,相当于下面这行代码:
return render_template('index.html',my_str='hello aniu',my_int=20)
2.重定向 redirect
from flask import Flask,redirect
app = Flask(__name__)
app.route('/demo1')
def demo1():
return redirect("https://www.aniu.space/")
3.返回JSON
from flask import Flask,jsonify
app = Flask(__name__)
@app.route('/demo2')
def demo2():
json_dict = {
"user_id":10,
"user_name":"aniu"
}
return jsonify(json_dict)
jsonify()跟json模块中的json.dumps()的区别:
4.自定义状态吗和响应头1.json.dumps()只是将字典转换成了json字符串,并没有改变HTTP响应报文中的Content-Type。
2.jsonify()不仅将字典转换为json字符串,而且将HTTP响应报文中的Content-Type值改为了application/json.
1.元组方式
可以返回一个元组,这样的元组必须是(response,status,headers)的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。
@app.route('/demo3')
def demo2():
return ('状态码666',666,{'aniu':'hahaha'})
2.make _ response 方式
from flask import Flask,make_response
app = Flask(__name__)
@app.route('/demo4')
def demo4():
resp = make_response("make_response测试")
resp.headers['aniu'] = 'hahaha'
resp.status = "404 not found"
return resp
结语
如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。
系列专栏
软磨 css
硬泡 javascript
前端实用小demo
更多专栏请移步博主主页查看! 博主的个人网站也很有趣,可以光顾一下哦:阿牛的博客小屋



