在 Flask 里面导入 request
套件包
from flask import request
通过前面提过的 method 属性可以操作当前的请求方法
藉由 form 属性处理POST
或是PUT
方法传来的表单资料
@app.route('/login', methods=['POST', 'GET'])
def login():
error = None
if request.method == 'POST':
if valid_login(request.form['username'],
request.form['password']):
return log_the_user_in(request.form['username'])
else:
error = 'Invalid username/password'
# the code below is executed if the request method
# was GET or the credentials were invalid
return render_template('login.html', error=error)
如果传入的 form 属性中不存在指定的键值时会发生什麽事情呢?会引发 KeyError
如果没有捕捉这个 KeyError 错误,则会显示一个 HTTP 400 Bad Request 的错误页面
要操作 URL 中提交的参数,例如:?key=value
。可以使用「args」属性
from flask import request
@app.route('/banana/')
def banana():
return request.args.get('key', 'defult value')
因为使用者可能会透过改变网址而造成指定键值不存在
这时候建议通过捕捉 KeyError 或是利用判断式:
from flask import request
@app.route('/banana/')
def banana():
searchword = request.args.get('key')
if searchword:
return searchword
else:
return 'nothing'
或是设定 request.args.get 方法预设值的方式来解决这个问题:
from flask import request
@app.route('/banana/')
def banana():
searchword = request.args.get('key', 'hey Moona')
return searchword
只要在 HTML 表单中设定enctype="multipart/form-data"
属性,浏览器就会传送档案了
上传的文件会被储存在记忆体或是档案系统中的临时位置,可以透过file
属性来取得上传的档案
每个上传的文件会被存在这个 Dictionary 属性中,这个属性基本上和 Python 原生的file
物件一样
只是额外多了一个save()
方法,可以让你把上传的档案存到服务器的档案系统中
from flask import request
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
f.save('/var/www/uploads/uploaded_file.txt')
...
如果想取得档案在使用者端上传时候的档名,可以使用 filename 属性
但是这个值视可以被伪造的!,所以永远不要信任这个值
如果真的想要把使用者端的档名作为服务器上的档案名称
可以通过Werkzeug
提供的 secure_filename() 函数
from werkzeug.utils import secure_filename
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['the_file']
file.save(f"/var/www/uploads/{secure_filename(f.filename)}")
...
更多关於档案上传的说明可以参考:上传文件
<<: Leetcode: 210. Course Schedule II | 含C++笔记
>>: 每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day5
在探讨如何将API应用在金融之前,我们势必要先来了解一下什麽是金融? 所谓的「金融」简单来说就是资本...
根据很多网路上的教学,需要两个主要档案 php_imagick.xxx.zip ImageMagic...
现在我们会使用基本的伪类选择器做效果了,但看到变化过程一闪而过、冷冰冰的,想增添更多渐变效果,让动...
前言 今天要完成的项目 k8s Task: Memory-default-namesapce 这个 ...
同样是网路,昨天是基础篇,今天进阶篇~ 其实,我自己网路没有很熟XD 而且我都是从攻击者角度去看,今...