当前位置:网站首页>[flask] obtain request information, redirect and error handling
[flask] obtain request information, redirect and error handling
2022-07-06 01:28:00 【Coriander Chrysanthemum】
Preface article :
- 【Flask】Web Departure and implementation are based on Flask The smallest application
- 【Flask】 Static file and template rendering
Get request data
We know , about Web Applications , It is important to respond to the data sent by the client to the server . stay Flask in , This information is determined by the overall situation request The object provides .
request object
The first step in using it is from flask Import in module :
from flask import request
In the previous article, I introduced , stay httpt Agreement , There are many possibilities for a request , Such as GET,POST etc. . We can go through request.method
To get . stay html Sometimes we use form Forms (POST,PUT Method will make data request ) To submit data , Then the server gets form The way of data in the form is through form Property acquisition . A simple case is as follows :
@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)
When key Not in the form In the middle of the day , Will pack KeyError It's abnormal . Then align according to the specific situation try except Operation to capture .
about html End in URL In the middle of the transmission (?key=value), We can use args Get parameters for properties of :
searcgword=request.args.get('key', '')
Upload files
Another data type is file . Use Flask It's also more convenient . We just need to guarantee form Set... In the form enctype='multipart/form-data'
, Otherwise, the file cannot be transferred .
The uploaded files are stored in transit or temporary files in the file system . This data is obtained using request Of files attribute . Every uploaded file will be saved in that dictionary . Its behavior is Python Of file object , But with save()
Method to allow you to store data in the file system of the server . A simple case is as follows :
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')
...
If you want to know how files are named on the client before uploading to your application , You can visit filename
attribute . But remember , This value can be forged , So never believe that value . If you want to use the file name of the client to store the file on the server , adopt Werkzeug For you secure_filename()
The function passes it , as follows :
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(file.filename)}")
...
Cookies
If you want to visit cookies Data in , We can go through cookies
attribute . If you want to set cookies
, We need to borrow set_cookie
Method . Again cookies
The attribute is request A dictionary of objects . If you want to use Session, Please do not use it directly cookie, But use Flask Medium Session, It will be cookie Add some security to it .
Read cookies Cases in :
from flask import request
@app.route('/')
def index():
username = request.cookies.get('username')
# use cookies.get(key) instead of cookies[key] to not get a
# KeyError if the cookie is missing.
Storage cookies Content case :
from flask import make_response
@app.route('/')
def index():
resp = make_response(render_template(...))
resp.set_cookie('username', 'the username')
return resp
Please note that ,cookie Is set on the response object . Because you usually only return strings from view functions , therefore Flask They will be converted into response objects for you . If you clearly want to do this , You can use make_response()
function , It is then modified . Sometimes you may want to set in a location where the response object does not already exist cookie. This can be achieved by using the deferred request callback pattern . For these things , You need to know more about the official documents .
Redirection and error handling
To redirect the user to another endpoint , Please use redirect()
function ; To abort a request in advance with an error code , Please use abort()
function :
from flask import abort, redirect, url_for
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login')
def login():
abort(401)
this_is_never_executed()
This is a rather pointless example , Because users will redirect from the index to pages they cannot access (401 Access denied ), But it shows how it works .
By default , Each error code will display a black and white error page . If you want to customize the error page , have access to errorhandler() Decorator :
from flask import render_template
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404
Be careful render_template()
After calling 404. This tells Flask The status code of this page should be 404, This means that no . By default, it is assumed to be 200, It means : Deo gratias .
边栏推荐
- 记一个 @nestjs/typeorm^8.1.4 版本不能获取.env选项问题
- Basic operations of database and table ----- delete data table
- Opinions on softmax function
- DOM introduction
- [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
- Some features of ECMAScript
- Force buckle 9 palindromes
- JMeter BeanShell的基本用法 一下语法只能在beanshell中使用
- VMware Tools installation error: unable to automatically install vsock driver
- A glimpse of spir-v
猜你喜欢
【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件
WordPress collection plug-in automatically collects fake original free plug-ins
Superfluid_ HQ hacked analysis
干货!通过软硬件协同设计加速稀疏神经网络
[技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
Maya hollowed out modeling
Force buckle 9 palindromes
yii中console方法调用,yii console定时任务
Threedposetracker project resolution
NLP第四范式:Prompt概述【Pre-train,Prompt(提示),Predict】【刘鹏飞】
随机推荐
You are using pip version 21.1.1; however, version 22.0.3 is available. You should consider upgradin
Kotlin basics 1
Mysql--- query the top 5 students
JMeter BeanShell的基本用法 一下语法只能在beanshell中使用
2022年广西自治区中职组“网络空间安全”赛题及赛题解析(超详细)
DOM introduction
Unity | two ways to realize facial drive
Leetcode 208. 实现 Trie (前缀树)
C web page open WinForm exe
The basic usage of JMeter BeanShell. The following syntax can only be used in BeanShell
Crawler request module
Leetcode daily question solution: 1189 Maximum number of "balloons"
MCU lightweight system core
[solved] how to generate a beautiful static document description page
VMware Tools installation error: unable to automatically install vsock driver
GNSS terminology
Huawei Hrbrid interface and VLAN division based on IP
Force buckle 1020 Number of enclaves
Mathematical modeling learning from scratch (2): Tools
Hcip---ipv6 experiment