Browse Source

Start to do the routing

Getty Ritter 4 years ago
parent
commit
609c81433e
4 changed files with 33 additions and 7 deletions
  1. 2 0
      lc/main.py
  2. 12 1
      lc/model.py
  3. 15 6
      lc/routes.py
  4. 4 0
      templates/main.mustache

+ 2 - 0
lc/main.py

@@ -1,7 +1,9 @@
 import os
 
 import lc.config
+import lc.model
 import lc.routes
 
 lc.config.DB.init(os.getenv("DB_LOC", "test.db"))
+lc.model.create_tables()
 app = lc.routes.app

+ 12 - 1
lc/model.py

@@ -2,7 +2,7 @@ import datetime
 import peewee
 
 import lc.config
-import lc.requests as r
+import lc.request as r
 
 
 class Model(peewee.Model):
@@ -18,6 +18,17 @@ class User(Model):
 
     name = peewee.TextField()
 
+    @staticmethod
+    def from_request(user: r.User) -> "User":
+        return User.create(name=user.name)
+
+    @staticmethod
+    def by_slug(slug: str) -> "User":
+        return User.get(name=slug)
+
+    def base_url(self) -> str:
+        return f'/u/{self.name}'
+
 
 class Link(Model):
     """

+ 15 - 6
lc/routes.py

@@ -3,25 +3,34 @@ import flask
 import pystache
 
 import lc.model as m
-
-LOADER = pystache.loader.Loader(extension="mustache", search_dirs=["templates"],)
+import lc.request as r
 
 app = flask.Flask(__name__)
+loader = pystache.loader.Loader(extension="mustache", search_dirs=["templates"],)
+
+def render(name, **kwargs):
+    '''Load and use a Mustache template from the project root'''
+    template = loader.load_name(name)
+    return pystache.Renderer().render(template, kwargs)
+
 
 
 @app.route("/")
 def index():
-    pass
+    return render('main', title='main', content='whoo')
 
 
 @app.route("/u", methods=["POST"])
-def create_user(user):
-    pass
+def create_user():
+    print(flask.request.data)
+    u = m.User.from_request(r.User.from_json(flask.request.data))
+    return flask.redirect(u.base_url())
 
 
 @app.route("/u/<string:user>", methods=["GET", "POST"])
 def get_user(user):
-    pass
+    u = m.User.by_slug(user)
+    return render('main', title=f'user {u.name}', content='stuff')
 
 
 @app.route("/u/<string:user>/l", methods=["POST"])

+ 4 - 0
templates/main.mustache

@@ -6,5 +6,9 @@
     <link rel="stylesheet" type="text/css" href="/static/main.css" />
   </head>
   <body>
+    <h1>{{title}}</h1>
+    <div class="content">
+      {{{ content }}}
+    </div>
   </body>
 </html>