Framefox provides a powerful form system for handling user input, validation, and data binding. Forms are built using the FormFactory and can be easily integrated into your controllers.
from framefox.core.controller.abstract_controller import AbstractControllerfrom framefox.core.routing.decorator.route import Routefrom fastapi import Requestfrom app.forms.user_form import UserRegistrationFormfrom app.models.user import Userclass UserController(AbstractController): @Route(path="/register", name="user_register", methods=["GET", "POST"]) async def register(self, request: Request): # Create form with empty user entity user = User() form = self.create_form(UserRegistrationForm, user) # Handle form submission if await form.handle_request(request): # Form is valid and data is bound to user entity user.save() self.flash("success", "Registration successful!") return self.redirect("/login") # Render form (with errors if submission failed) return self.render("user/register.html", { "form": form.create_view() })
from framefox.core.form.type.checkbox_type import CheckboxTypebuilder.add("agree_terms", CheckboxType, { "label": "I agree to the terms and conditions", "required": True})
class PostController(AbstractController): @Route(path="/posts/create", name="post_create", methods=["GET", "POST"]) async def create_post(self, request: Request): from app.forms.post_form import PostForm from app.models.post import Post post = Post() post.author = self.get_user() # Set default values form = self.create_form(PostForm, post) if await form.handle_request(request): # Form is valid, data is bound to post entity post.save() self.flash("success", f"Post '{post.title}' created successfully!") return self.redirect(self.generate_url("post_detail", post_id=post.id)) # Show form (GET request or validation failed) return self.render("posts/create.html", { "form": form.create_view(), "page_title": "Create New Post" }) @Route(path="/posts/{post_id}/edit", name="post_edit", methods=["GET", "POST"]) async def edit_post(self, post_id: int, request: Request): from app.forms.post_form import PostForm from app.models.post import Post post = Post.find(post_id) if not post: return self.json({"error": "Post not found"}, status=404) form = self.create_form(PostForm, post) if await form.handle_request(request): post.save() self.flash("success", "Post updated successfully!") return self.redirect(self.generate_url("post_detail", post_id=post.id)) return self.render("posts/edit.html", { "form": form.create_view(), "post": post, "page_title": f"Edit Post: {post.title}" })