当前位置:网站首页>[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()
.
边栏推荐
- [detailed] several ways to quickly realize object mapping
- 关于softmax函数的见解
- module ‘tensorflow. contrib. data‘ has no attribute ‘dataset
- [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
- Pbootcms plug-in automatically collects fake original free plug-ins
- Vulhub vulnerability recurrence 75_ XStream
- Folio.ink 免费、快速、易用的图片分享工具
- Internship: unfamiliar annotations involved in the project code and their functions
- 朝招金安全吗 会不会亏损本金
- [Arduino syntax - structure]
猜你喜欢
Mathematical modeling learning from scratch (2): Tools
A picture to understand! Why did the school teach you coding but still not
【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
基於DVWA的文件上傳漏洞測試
Alibaba-Canal使用详解(排坑版)_MySQL与ES数据同步
[技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
Introduction to robotics I. spatial transformation (1) posture, transformation
Mongodb problem set
SSH login is stuck and disconnected
General operation method of spot Silver
随机推荐
什么是弱引用?es6中有哪些弱引用数据类型?js中的弱引用是什么?
Development trend of Ali Taobao fine sorting model
SPIR-V初窺
ClickOnce 不支持请求执行级别“requireAdministrator”
3D model format summary
Some features of ECMAScript
Leetcode 剑指 Offer 59 - II. 队列的最大值
MATLB|实时机会约束决策及其在电力系统中的应用
A Cooperative Approach to Particle Swarm Optimization
Cglib dynamic agent -- example / principle
Pbootcms plug-in automatically collects fake original free plug-ins
[Arduino syntax - structure]
Mongodb problem set
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
module ‘tensorflow. contrib. data‘ has no attribute ‘dataset
How to extract MP3 audio from MP4 video files?
Force buckle 9 palindromes
Use of crawler manual 02 requests
Leetcode1961. 检查字符串是否为数组前缀
Remember that a version of @nestjs/typeorm^8.1.4 cannot be obtained Env option problem