当前位置:网站首页>[flask] response, session and message flashing
[flask] response, session and message flashing
2022-07-06 01:27:00 【Coriander Chrysanthemum】
Preface article :
- 【Flask】Web Departure and implementation are based on Flask The smallest application
- 【Flask】 Static file and template rendering
- 【Flask】 Get request information 、 Redirect 、 Error handling
Respond to Response
The view function ( Request to process the corresponding function ) The return value of will be automatically converted into a response object for you . If the return value is a string , It will be converted into a response object , Where the string is the response body , One 200 OK Status code and a text/html mimetype. If the return value is a dict Data of type , We need to borrow jsonify()
To create a response.Flask The logic applied to convert the return value into a response object is as follows :
- If the correct type of response object is returned , Return directly from the view .
- If it's a string , Then use this data and default parameters to create a response object .
- If it is dict, Then use
jsonify
Create a response object . - If a tuple is returned , Then the items in the tuple can provide additional information . Such tuples must use (response, status)、(response, headers) or (response, status, headers) In the form of .
status
The status code will be overwritten , alsoheaders
It can be a list or dictionary with additional header values . - If none of this works ,Flask It will be assumed that the return value is valid WSGI Application and convert it into a response object .
If you want to get the result response object in the view , have access to make_response()
function .
Suppose we have the following view :
from flask import render_template
@app.errorhandler(404)
def not_found(error):
return render_template('error.html'), 404
You just need to use make_response()
Wrap the return expression and get the response object to modify it , Then go back to it :
from flask import make_response
@app.errorhandler(404)
def not_found(error):
resp = make_response(render_template('error.html'), 404)
resp.headers['X-Something'] = 'A value'
return resp
JSON Type of API
In the development of front and back separation , Most of the data interaction methods are using json Format data as a medium . Use Flask It's easy to start writing such API. If you return from the view dict, It will be converted to JSON Respond to .
@app.route("/me")
def me_api():
user = get_current_user()
return {
"username": user.username,
"theme": user.theme,
"image": url_for("user_image", filename=user.image),
}
According to your API Design , You may wish for dict Create a type other than JSON Respond to . under these circumstances , Use jsonify()
function , It will serialize any supported JSON data type . Or check out support for more complex applications Flask Community expansion .
from flask import jsonify
@app.route("/users")
def users_api():
users = get_all_users()
return jsonify([user.to_json() for user in users])
session
In addition to the request object , There's another one called session The object of , It allows you to store user specific information from one request to the next . This is cookie Above for you , And encrypt cookie To sign . This means that users can view your cookie But you can't modify it , Unless they know the key used for signing .
In order to use session, You must set a key . Here is how the conversation works :
from flask import session
# Set the secret key to some random bytes. Keep this really secret!
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
@app.route('/')
def index():
if 'username' in session:
return f'Logged in as {
session["username"]}'
return 'You are not logged in'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return ''' <form method="post"> <p><input type=text name=username> <p><input type=submit value=Login> </form> '''
@app.route('/logout')
def logout():
# remove the username from the session if it's there
session.pop('username', None)
return redirect(url_for('index'))
How to generate a good key : The key should be as random as possible . Your operating system has a way to generate fairly random data based on an encrypted random generator . Use the following command to quickly generate Flask.secret_key( or SECRET_KEY) Value :
python -c 'import secrets; print(secrets.token_hex())'
# '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
On the based on cookie Description of the conversation :Flask Will get the values you put into the session object and serialize them as cookie. If you find that some values will not persist in the request , It does enable cookie, And you don't receive a clear error message , Please check the page response cookie The size and Web Compared with the size supported by the browser .
In addition to the default client based session , If you want to handle the session on the server side , There are several Flask The extension supports this .
Message Flashing
Good applications and user interfaces are all about feedback . If users don't get enough feedback , They may end up hating the application .Flask Provides a very simple method , Feedback can be provided to the user through the flashing system . The blinking system can basically record a message at the end of the request and at the next ( And just next ) Access it on request . This is usually combined with layout templates to expose messages .
To flash a message , Please use flash()
Method , To get information , You can use the get_flashed_messages()
.
边栏推荐
- SPIR-V初窺
- Test de vulnérabilité de téléchargement de fichiers basé sur dvwa
- Gartner released the prediction of eight major network security trends from 2022 to 2023. Zero trust is the starting point and regulations cover a wider range
- 【全网最全】 |MySQL EXPLAIN 完全解读
- Superfluid_ HQ hacked analysis
- How to get the PHP version- How to get the PHP Version?
- 3D model format summary
- Daily practice - February 13, 2022
- Format code_ What does formatting code mean
- Alibaba-Canal使用详解(排坑版)_MySQL与ES数据同步
猜你喜欢
基於DVWA的文件上傳漏洞測試
关于softmax函数的见解
General operation method of spot Silver
Force buckle 9 palindromes
Loop structure of program (for loop)
Cookie concept, basic use, principle, details and Chinese transmission
NLP第四范式:Prompt概述【Pre-train,Prompt(提示),Predict】【刘鹏飞】
Mlsys 2020 | fedprox: Federation optimization of heterogeneous networks
A picture to understand! Why did the school teach you coding but still not
1791. Find the central node of the star diagram / 1790 Can two strings be equal by performing string exchange only once
随机推荐
【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
ORA-00030
ORA-00030
网易智企逆势进场,游戏工业化有了新可能
yii中console方法调用,yii console定时任务
JMeter BeanShell的基本用法 一下语法只能在beanshell中使用
Gartner released the prediction of eight major network security trends from 2022 to 2023. Zero trust is the starting point and regulations cover a wider range
Daily practice - February 13, 2022
Blue Bridge Cup embedded stm32g431 - the real topic and code of the eighth provincial competition
Mongodb problem set
Remember that a version of @nestjs/typeorm^8.1.4 cannot be obtained Env option problem
Code review concerns
Docker compose配置MySQL并实现远程连接
Code Review关注点
Recommended areas - ways to explore users' future interests
ClickOnce 不支持请求执行级别“requireAdministrator”
[the most complete in the whole network] |mysql explain full interpretation
【全网最全】 |MySQL EXPLAIN 完全解读
Une image! Pourquoi l'école t'a - t - elle appris à coder, mais pourquoi pas...
Unity | 实现面部驱动的两种方式