Kaynağa Gözat

update session example

Falko Schindler 2 yıl önce
ebeveyn
işleme
05fe4e9d98
1 değiştirilmiş dosya ile 16 ekleme ve 15 silme
  1. 16 15
      website/reference.py

+ 16 - 15
website/reference.py

@@ -669,29 +669,30 @@ See <https://quasar.dev/layout/page-sticky> for more information.
 
     @example('''#### Sessions
 
-`ui.page` provides an optional `on_connect` argument to register a callback.
-It is invoked for each new connection to the page.
-
-The optional `request` argument provides insights about the clients URL parameters etc. (see [the JustPy docs](https://justpy.io/tutorial/request_object/) for more details).
-It also enables you to identify sessions over [longer time spans by configuring cookies](https://justpy.io/tutorial/sessions/).
-''', skip=True)
+The optional `request` argument provides insights about the client's URL parameters etc.
+It also enables you to identify sessions using a [session middleware](https://www.starlette.io/middleware/#sessionmiddleware).
+''')
     def sessions_example():
+        import uuid
         from collections import Counter
         from datetime import datetime
 
+        from starlette.middleware.sessions import SessionMiddleware
         from starlette.requests import Request
 
-        id_counter = Counter()
-        creation = datetime.now().strftime('%H:%M, %d %B %Y')
+        from nicegui import app
+
+        app.add_middleware(SessionMiddleware, secret_key='some_random_string')
 
-        def handle_connection(request: Request):
-            id_counter[request.session_id] += 1
-            visits.set_text(f'{len(id_counter)} unique views ({sum(id_counter.values())} overall) since {creation}')
+        counter = Counter()
+        start = datetime.now().strftime('%H:%M, %d %B %Y')
 
-        @ui.page('/session_demo', on_connect=handle_connection)
-        def session_demo():
-            global visits
-            visits = ui.label()
+        @ui.page('/session_demo')
+        def session_demo(request: Request):
+            if 'id' not in request.session:
+                request.session['id'] = str(uuid.uuid4())
+            counter[request.session['id']] += 1
+            ui.label(f'{len(counter)} unique views ({sum(counter.values())} overall) since {start}')
 
         ui.link('Visit session demo', session_demo)