![Proper Forms](header.png)
Proper Forms is a flexible form library to make far easier to create beautiful, semantically rich, syntactically awesome, readily stylable and wonderfully accessible HTML forms in your Python web application.
**Documentation**: https://proper-forms.scaletti.dev
```bash
pip install proper-forms
```
## How Proper Forms is different
- A field isn't tied to a specific HTML tag, so can be presentend in multiple ways. Even the same form can be used in different contexts and have different widgets and styles on each. A set of options as checkboxes, a select multiple, or a comma-separated input? You got it. A date as a calendar or as three selects? No problem.
- Many commonly used built-in validators, and you can also write simple functions to use as custom ones.
- Any field can accept multiple values; as a list or as a comma-separated text.
- All error messages are customizable. The tone of the messages must be able to change or to be translated.
- Incredible easy to integrate with any ORM (object-relational mapper). Why should you need *another* library to do that?
## Just show me how it looks
```python
from proper_forms import Form, Email, Text
class CommentForm(Form):
email = Email(required=True, check_dns=True)
message = Text(
LongerThan(5, "Please write a longer message"),
required=True
)
def comment():
form = CommentForm(request.POST)
if request.method == "POST" and form.validate():
data = form.save()
...
return render_template("comment.html", form=form)
```
Raw data
{
"_id": null,
"home_page": "https://proper-forms.scaletti.dev/",
"name": "proper-forms",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9,<4.0",
"maintainer_email": "",
"keywords": "",
"author": "Juan-Pablo Scaletti",
"author_email": "juanpablo@jpscaletti.com",
"download_url": "https://files.pythonhosted.org/packages/53/40/35ebe5b38bb598834b8153dd3a06583d6c2ac7fb7650362d19783fb5f9f6/proper_forms-0.7.tar.gz",
"platform": null,
"description": "![Proper Forms](header.png)\n\nProper Forms is a flexible form library to make far easier to create beautiful, semantically rich, syntactically awesome, readily stylable and wonderfully accessible HTML forms in your Python web application.\n\n**Documentation**: https://proper-forms.scaletti.dev\n\n\n```bash\npip install proper-forms\n```\n\n## How Proper Forms is different\n\n- A field isn't tied to a specific HTML tag, so can be presentend in multiple ways. Even the same form can be used in different contexts and have different widgets and styles on each. A set of options as checkboxes, a select multiple, or a comma-separated input? You got it. A date as a calendar or as three selects? No problem.\n\n- Many commonly used built-in validators, and you can also write simple functions to use as custom ones.\n\n- Any field can accept multiple values; as a list or as a comma-separated text.\n\n- All error messages are customizable. The tone of the messages must be able to change or to be translated.\n\n- Incredible easy to integrate with any ORM (object-relational mapper). Why should you need *another* library to do that?\n\n\n## Just show me how it looks\n\n```python\nfrom proper_forms import Form, Email, Text\n\n\nclass CommentForm(Form):\n email = Email(required=True, check_dns=True)\n message = Text(\n \tLongerThan(5, \"Please write a longer message\"),\n \trequired=True\n )\n\n\ndef comment():\n form = CommentForm(request.POST)\n if request.method == \"POST\" and form.validate():\n \tdata = form.save()\n ...\n return render_template(\"comment.html\", form=form)\n\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A proper flexible Python form library",
"version": "0.7",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "53020cad1f21b4e69ff0a76f57770080089ff2ee8e70e65d2aa8044f0f084afb",
"md5": "b335ccbf1d482117d1f53e44c2c6be79",
"sha256": "b98d94dd1e5ed2e2bac41ae329f104b20e477862341dded0752e4585fc8afb7a"
},
"downloads": -1,
"filename": "proper_forms-0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b335ccbf1d482117d1f53e44c2c6be79",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9,<4.0",
"size": 25907,
"upload_time": "2023-01-25T03:28:07",
"upload_time_iso_8601": "2023-01-25T03:28:07.015004Z",
"url": "https://files.pythonhosted.org/packages/53/02/0cad1f21b4e69ff0a76f57770080089ff2ee8e70e65d2aa8044f0f084afb/proper_forms-0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "534035ebe5b38bb598834b8153dd3a06583d6c2ac7fb7650362d19783fb5f9f6",
"md5": "b039110792081460ae4d78a712ea855e",
"sha256": "1b79c9d90341a216ea584a5ad7bd5ddfcace8496de584f62b25dc27c951bc1ad"
},
"downloads": -1,
"filename": "proper_forms-0.7.tar.gz",
"has_sig": false,
"md5_digest": "b039110792081460ae4d78a712ea855e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9,<4.0",
"size": 18501,
"upload_time": "2023-01-25T03:28:08",
"upload_time_iso_8601": "2023-01-25T03:28:08.754588Z",
"url": "https://files.pythonhosted.org/packages/53/40/35ebe5b38bb598834b8153dd3a06583d6c2ac7fb7650362d19783fb5f9f6/proper_forms-0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-25 03:28:08",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "proper-forms"
}