当前位置:网站首页>[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 .
边栏推荐
- IP storage and query in MySQL
- Xunrui CMS plug-in automatically collects fake original free plug-ins
- [机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
- Leetcode 剑指 Offer 59 - II. 队列的最大值
- [solved] how to generate a beautiful static document description page
- Threedposetracker project resolution
- How does Huawei enable debug and how to make an image port
- Condition and AQS principle
- Une image! Pourquoi l'école t'a - t - elle appris à coder, mais pourquoi pas...
- 【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
猜你喜欢
Cookie concept, basic use, principle, details and Chinese transmission
1791. Find the central node of the star diagram / 1790 Can two strings be equal by performing string exchange only once
【SSRF-01】服务器端请求伪造漏洞原理及利用实例
3D视觉——4.手势识别(Gesture Recognition)入门——使用MediaPipe含单帧(Singel Frame)和实时视频(Real-Time Video)
【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件
NLP第四范式:Prompt概述【Pre-train,Prompt(提示),Predict】【刘鹏飞】
XSS learning XSS lab problem solution
Idea sets the default line break for global newly created files
【Flask】官方教程(Tutorial)-part1:项目布局、应用程序设置、定义和访问数据库
VMware Tools installation error: unable to automatically install vsock driver
随机推荐
记一个 @nestjs/typeorm^8.1.4 版本不能获取.env选项问题
Daily practice - February 13, 2022
Remember that a version of @nestjs/typeorm^8.1.4 cannot be obtained Env option problem
2022 Guangxi Autonomous Region secondary vocational group "Cyberspace Security" competition and its analysis (super detailed)
[detailed] several ways to quickly realize object mapping
Une image! Pourquoi l'école t'a - t - elle appris à coder, mais pourquoi pas...
[pat (basic level) practice] - [simple mathematics] 1062 simplest fraction
Unity | 实现面部驱动的两种方式
leetcode刷题_平方数之和
500 lines of code to understand the principle of mecached cache client driver
DOM introduction
Xunrui CMS plug-in automatically collects fake original free plug-ins
Hcip---ipv6 experiment
【Flask】响应、session与Message Flashing
【Flask】官方教程(Tutorial)-part1:项目布局、应用程序设置、定义和访问数据库
A picture to understand! Why did the school teach you coding but still not
Ordinary people end up in Global trade, and a new round of structural opportunities emerge
Condition and AQS principle
Spir - V premier aperçu
Leetcode 208. Implement trie (prefix tree)