Advanced Forms Features#
Keywords: select enum, json fields, model forms, custom validators, form input types, decimal step, html5 inputs
Asok's form engine now supports modern HTML5 inputs and deep synchronization with the ORM's advanced fields.
1. Modern HTML5 Fields#
Enjoy native browser widgets for specific data types:
from asok import Form
form = Form({
"q": Form.search("Search"),
"website": Form.url("Website"),
"phone": Form.tel("Phone Number"),
"theme_color": Form.color("Accent Color"),
"volume": Form.range("Volume", min=0, max=100),
})
2. ORM Integration#
Enum Support#
Automatically generate a dropdown from any Python enum.Enum class:
import enum
from asok import Form
class TaskStatus(enum.Enum):
TODO = "todo"
PROGRESS = "progress"
DONE = "done"
form = Form({
"status": Form.enum("Task Status", TaskStatus)
})
JSON Fields#
Asok provides a textarea that automatically includes a json validation rule.
from asok import Form
form = Form({
"metadata": Form.json("Extra Data")
})
3. Automated Model Forms#
The Form.from_model() helper now automatically maps advanced ORM types to their corresponding form widgets.
| ORM Field | Form Widget | Notes |
|---|---|---|
Field.Decimal(precision=2) | number | Auto-calculates step="0.01" |
Field.Enum(MyEnum) | select | Auto-populates choices from MyEnum |
Field.JSON() | textarea | Auto-adds json validation rule |
Field.UUID() | text | Sets to readonly by default |
Example#
from asok import Form
# Generate a professional form from your Model in one line
form = Form.from_model(Product, request)
if form.validate():
Product.create(**form.data)
4. Custom Validation Rules#
You can easily register custom rules that link your Forms to the Validator:
from asok.validation import register_rule
def check_username(value, arg, data):
return value.isalnum()
register_rule("username", check_username, "Username must be alphanumeric.")
# Use it in your form
form = Form({
"username": Form.text("Username", rules="required|username")
})
Was this page helpful?