{"action":"created","issue":{"url":"https://api.github.com/repos/wtforms/wtforms/issues/154","labels_url":"https://api.github.com/repos/wtforms/wtforms/issues/154/labels{/name}","comments_url":"https://api.github.com/repos/wtforms/wtforms/issues/154/comments","events_url":"https://api.github.com/repos/wtforms/wtforms/issues/154/events","html_url":"https://github.com/wtforms/wtforms/issues/154","id":54712995,"number":154,"title":"WTForms 3.0","user":{"login":"crast","id":1609368,"avatar_url":"https://avatars.githubusercontent.com/u/1609368?v=3","gravatar_id":"","url":"https://api.github.com/users/crast","html_url":"https://github.com/crast","followers_url":"https://api.github.com/users/crast/followers","following_url":"https://api.github.com/users/crast/following{/other_user}","gists_url":"https://api.github.com/users/crast/gists{/gist_id}","starred_url":"https://api.github.com/users/crast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crast/subscriptions","organizations_url":"https://api.github.com/users/crast/orgs","repos_url":"https://api.github.com/users/crast/repos","events_url":"https://api.github.com/users/crast/events{/privacy}","received_events_url":"https://api.github.com/users/crast/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/wtforms/wtforms/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/wtforms/wtforms/labels/epic","name":"epic","color":"5319e7"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/wtforms/wtforms/milestones/2","html_url":"https://github.com/wtforms/wtforms/milestones/3.0","labels_url":"https://api.github.com/repos/wtforms/wtforms/milestones/2/labels","id":940791,"number":2,"title":"3.0","description":"See meta-ticket https://github.com/wtforms/wtforms/issues/154","creator":{"login":"crast","id":1609368,"avatar_url":"https://avatars.githubusercontent.com/u/1609368?v=3","gravatar_id":"","url":"https://api.github.com/users/crast","html_url":"https://github.com/crast","followers_url":"https://api.github.com/users/crast/followers","following_url":"https://api.github.com/users/crast/following{/other_user}","gists_url":"https://api.github.com/users/crast/gists{/gist_id}","starred_url":"https://api.github.com/users/crast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crast/subscriptions","organizations_url":"https://api.github.com/users/crast/orgs","repos_url":"https://api.github.com/users/crast/repos","events_url":"https://api.github.com/users/crast/events{/privacy}","received_events_url":"https://api.github.com/users/crast/received_events","type":"User","site_admin":false},"open_issues":12,"closed_issues":0,"state":"open","created_at":"2015-01-18T20:59:43Z","updated_at":"2015-12-15T08:34:09Z","due_on":"2016-01-28T07:00:00Z","closed_at":null},"comments":3,"created_at":"2015-01-18T22:36:23Z","updated_at":"2015-12-16T15:50:03Z","closed_at":null,"body":"https://github.com/wtforms/wtforms/milestones/3.0\r\n\r\nWTForms 3.0\r\n===========\r\n\r\nWTForms for a while has required a redesign to reflect the way things are going in how people actually use forms. WTforms 2.0 was a bridge version, a way to make a major version that hints at the upcoming changes but have it be compatible with the majority of people's existing code and form classes,while also letting people be aware of pending deprecation.\r\n\r\n\r\nOverview\r\n---------\r\n\r\n* Proper support for input data in other forms than just form input. (ahem, JSON) #198 \r\n* Make it clearer the distinction between fields, data type coercion, and widgets in a way that doesn't give users headaches, and enables easy use.\r\n  * Distinguish fields that only use one value, use zero or one value, or use multiple values, and allow compatibility to be had based on some of these facets.\r\n  * Simplify the general use case for the vast majority of field implementations\r\n  * Decouple the way fields access form values from the way that coercion happens, to allow easy implementation for third-party libraries\r\n  * Decouple widgets (describing the nature of a widget) from rendering (HTML, XHTML, HTML5, etc) #234 (#180 ... others)\r\n* Better and easier to use form composition tools, and multi-value fields.\r\n\r\n\r\nMajor Features\r\n--------------\r\n\r\n* Input instead of coming as a disparate collection of parameters, is now put into a specialty data class `FormInput`\r\n  * FormInput holds and gates access to multiple input data types, including \"models\", defaults, JSON/dictionary input, and form data.\r\n  * An API of clearly defined methods allows fields to get input data without caring as much about how this data comes and implementation details behind it\r\n  * Having this clear API contract allows this object to be replaced with anything else satisfying the contract (better support for many other frameworks) and also behaviors such as defining the priority of what to do with missing data on a global level.\r\n  * For maximum compatibilty, the old `formdata, obj, **kwargs` type data can still be supplied, but a FormInput will be created with these.\r\n* Kill off SelectField, or make it less sucky #185 \r\n  * In wtforms 1&2, the biggest problem encountered was that, for example, handling multiple Decimal values with `coerce=Decimal` was not symmetric to all the capabilities provided by DecimalField\r\n  * (Potential) If we could allow multiple choices for any field type, then it more strongly reinforces the idea of a field-per-datatype e.g. `DecimalField(choices=[...])` and so on.\r\n* Make field enclosures less of a headache to use\r\n  * FormField and FieldList are very capable, but there has to be a better way, especially in the fringe cases.\r\n* De-couple attribute names from field names #205 \r\n  * Allow users to have fields with names containing \"special\" characters while still allowing the field to function, just like SQLAlchemy with attribute vs column names.\r\n  * Default case (when attribute name unspecified) is still using attribute name munging for maximum compatibility"},"comment":{"url":"https://api.github.com/repos/wtforms/wtforms/issues/comments/165152094","html_url":"https://github.com/wtforms/wtforms/issues/154#issuecomment-165152094","issue_url":"https://api.github.com/repos/wtforms/wtforms/issues/154","id":165152094,"user":{"login":"lepture","id":290496,"avatar_url":"https://avatars.githubusercontent.com/u/290496?v=3","gravatar_id":"","url":"https://api.github.com/users/lepture","html_url":"https://github.com/lepture","followers_url":"https://api.github.com/users/lepture/followers","following_url":"https://api.github.com/users/lepture/following{/other_user}","gists_url":"https://api.github.com/users/lepture/gists{/gist_id}","starred_url":"https://api.github.com/users/lepture/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lepture/subscriptions","organizations_url":"https://api.github.com/users/lepture/orgs","repos_url":"https://api.github.com/users/lepture/repos","events_url":"https://api.github.com/users/lepture/events{/privacy}","received_events_url":"https://api.github.com/users/lepture/received_events","type":"User","site_admin":false},"created_at":"2015-12-16T15:50:03Z","updated_at":"2015-12-16T15:50:03Z","body":"It would be great if validators are less related with fields. In this case, validators can be reused in many other places out of form validators.\r\n\r\nIt would be good to add some validator features with HTML5 attributes like required, pattern."}}