103 lines
2.3 KiB
Python
103 lines
2.3 KiB
Python
from flask import Flask, url_for
|
|
from markupsafe import escape
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
# using plain routes
|
|
# https://flask.palletsprojects.com/en/2.0.x/quickstart/#variable-rules
|
|
# -------------------------------------------------------------------------------
|
|
@app.route("/")
|
|
def index():
|
|
return "Index Page"
|
|
|
|
|
|
@app.route("/hello")
|
|
def hello():
|
|
return "Hello, World"
|
|
|
|
|
|
# returning JSON (dictionary and objects)
|
|
# -------------------------------------------------------------------------------
|
|
# can be done with a python dictionary object
|
|
@app.route("/me")
|
|
def me_api():
|
|
return {
|
|
"username": "bob",
|
|
"theme": "black",
|
|
"image": "user_image.png",
|
|
}
|
|
|
|
|
|
# or with `jsonify` function
|
|
from flask import jsonify
|
|
|
|
|
|
@app.route("/users")
|
|
def users_api():
|
|
users = get_all_users()
|
|
return jsonify([user.to_json() for user in users])
|
|
|
|
|
|
# using routes with variables
|
|
# https://flask.palletsprojects.com/en/2.0.x/quickstart/#variable-rules
|
|
# -------------------------------------------------------------------------------
|
|
@app.route("/user/<username>")
|
|
def show_user_profile(username):
|
|
# show the user profile for that user
|
|
return f"User {escape(username)}"
|
|
|
|
|
|
@app.route("/post/<int:post_id>")
|
|
def show_post(post_id):
|
|
# show the post with the given id, the id is an integer
|
|
return f"Post {post_id}"
|
|
|
|
|
|
@app.route("/path/<path:subpath>")
|
|
def show_subpath(subpath):
|
|
# show the subpath after /path/
|
|
return f"Subpath {escape(subpath)}"
|
|
|
|
|
|
def using_url_for():
|
|
print(url_for("index"))
|
|
|
|
|
|
# processing HTTP methods
|
|
# https://flask.palletsprojects.com/en/2.0.x/quickstart/#http-methods
|
|
# -------------------------------------------------------------------------------
|
|
from flask import request
|
|
|
|
|
|
def do_the_login():
|
|
pass
|
|
|
|
|
|
def show_the_login_form():
|
|
pass
|
|
|
|
|
|
@app.route("/login", methods=["GET", "POST"])
|
|
def login():
|
|
if request.method == "POST":
|
|
return do_the_login()
|
|
else:
|
|
return show_the_login_form()
|
|
|
|
|
|
# basic file uploads
|
|
# https://flask.palletsprojects.com/en/2.0.x/quickstart/#file-uploads
|
|
# -------------------------------------------------------------------------------
|
|
from flask import request
|
|
|
|
|
|
@app.route("/upload", methods=["GET", "POST"])
|
|
def upload_file():
|
|
if request.method == "POST":
|
|
f = request.files["the_file"]
|
|
f.save("/var/www/uploads/uploaded_file.txt")
|
|
|
|
|
|
# vim:ft=python
|