from pprint import pprint from dataclasses import dataclass from flask import Flask, redirect, url_for, request, render_template app = Flask(__name__, static_url_path='/templates') COUNTER = 0 # /posts # GET /posts -> dame todos los posts # GET /posts/1 -> dame el post con identificador 1 # POST /posts -> creame un post nuevo # DELETE /posts/post_id -> borrame el post con id post_id # Posts # - id, title, text # /posts # - GET # - POST # - DELETE POSTS = {} @dataclass class Post: id: int title: str text: str def __repr__(self): return f"{str(self.id)} {self.title} {self.text}" @app.route('/posts', methods=['POST','GET','DELETE']) def posts(): global POSTS if request.method == 'GET': beginning = """ <html> <body> <form action = "http://127.0.0.1:8000/posts" method = "post"> <p>Enter post to create:</p> <p><input type = "text" name = "title" /></p> <p><input type = "text" name = "text" /></p> <p><input type = "submit" value = "submit" /></p> </form> <ul> """ middle = "" for post in POSTS.values(): middle += "<li>" + str(post) + "</li>" print(post) end = """ </ul> </body> </html> """ pprint(POSTS) return beginning + middle + end elif request.method == 'POST': # procesamiento del request, extraccion de parametros, validacion title = request.form['title'] text = request.form['text'] # datos y almacenamiento post_id = len(POSTS.keys()) # creacion del posteo post = Post(post_id, title, text) # guardado del posteo POSTS[post_id] = post print(POSTS) # generacion de la respuesta return redirect(url_for('posts')) elif request.method == 'DELETE': post_id = int(request.args['id']) POSTS.pop(post_id) return redirect(url_for('posts')) else: return "Unknown method" @app.route('/counter') def counter(): global COUNTER if request.method == 'GET': COUNTER += 1 return "OK" + str(COUNTER) @app.route('/success/<name>') def success(name): return f'welcome {name}' @app.route('/login', methods = ['POST', 'GET']) def login(): if request.method == 'GET': return render_template('login.html') if request.method == 'POST': user = request.form['nm'] location = url_for('success',name = user) print(f"REDIRECT: {location}") return redirect(location) else: user = request.args.get('nm') return redirect(url_for('success',name = user)) @app.route('/') def index(): html = """ <ul> <li><a href='http://127.0.0.1:8000/login'>login</a></li> <li><a href='http://127.0.0.1:8000/counter'>counter</a></li> <li><a href='http://127.0.0.1:8000/posts'>posts</a></li> </ul> """ return html if __name__ == '__main__': app.run(host="127.0.0.1", port=8000, debug = True)