Flask - store object directly in a session

14,752

A simple way to make your object serialize and achieve what you want is to use __dict__ like so:

def main():
    session['my_object'] = Test(1, 2, 3).__dict__
    return redirect('retrieve')
Share:
14,752
fweidemann14
Author by

fweidemann14

Programmer.. :)

Updated on June 04, 2022

Comments

  • fweidemann14
    fweidemann14 almost 2 years

    I was wondering if it is possible to store an object directly in a Flask session, without the need to rewrite the serializer. Are there any functions I need to implement in my class in order to get this working? Sample code that is below. This is what I want it to look like. However, when you try to execute that it throws an error à la TypeError: Object of type 'Test' is not JSON serializable

    Any help is greatly appreciated! Thanks in advance! :)

    import flask
    from flask import Flask, session, redirect
    
    class Test:
        def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    
    app = Flask(__name__)
    app.secret_key = 'xyz'
    
    @app.route('/')
    def main():
        session['my_object'] = Test(1, 2, 3)
        return redirect('retrieve')
    
    @app.route('/retrieve')
    def return_my_object():
        my_object = session.get('my_object')
        return str(my_object)
    
    if __name__ == '__main__':
        app.run(debug=True)
    
  • Sven Marnach
    Sven Marnach almost 7 years
    I prefer vars(Test(1, 2, 3)), over accessing __dict__ directly, but that's essentially the same. Note that you will also need to deserialize the dictionary to a Test object. I recommend adding methods to_json() and from_json() to the Test class and calling them manually.
  • fweidemann14
    fweidemann14 almost 7 years
    thank you guys, working perfectly! ;)