-
Notifications
You must be signed in to change notification settings - Fork 83
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Render form with CSRF token & protect
- Loading branch information
Showing
4 changed files
with
152 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
{# BS3 macros from https://gist.github.com/bearz/7394681 #} | ||
|
||
{# Renders field for bootstrap 3 standards. | ||
|
||
Params: | ||
field - WTForm field | ||
kwargs - pass any arguments you want in order to put them into the html attributes. | ||
|
||
Example usage: | ||
{{ macros.render_field(form.email, placeholder='Input email', type='email') }} | ||
#} | ||
{% macro render_field(field, label_visible=true, class_='form-control') -%} | ||
<div class="form-group {% if field.errors %}has-error{% endif %} {{ kwargs.pop('class_', '') }}"> | ||
{% if (field.type != 'HiddenField' and field.type !='CSRFTokenField') and label_visible %} | ||
<label for="{{ field.id }}" class="control-label">{{ field.label }}</label> | ||
{% endif %} | ||
{% if field.description %} | ||
<p class="help-block">{{ field.description }}</p> | ||
{% endif %} | ||
|
||
{{ field(class_=class_, **kwargs) }} | ||
{% if field.errors %} | ||
{% for e in field.errors %} | ||
<p class="help-block">{{ e }}</p> | ||
{% endfor %} | ||
{% endif %} | ||
</div> | ||
{%- endmacro %} | ||
|
||
{# Renders checkbox fields since they are represented differently in bootstrap | ||
Params: | ||
field - WTForm field (there are no check, but you should put here only BooleanField. | ||
kwargs - pass any arguments you want in order to put them into the html attributes. | ||
There are few exceptions: for - for_, class - class_, class__ - class_ | ||
|
||
Example usage: | ||
{{ macros.render_checkbox_field(form.remember_me) }} | ||
#} | ||
{% macro render_checkbox_field(field) -%} | ||
<div class="form-group {% if field.errors %}has-error{% endif %} {{ kwargs.pop('class_', '') }}"> | ||
<label for="{{ field.id }}" class="control-label">{{ field.label }}: {{ field(type='checkbox', **kwargs) }}</label> | ||
<div class="checkbox"> | ||
</div> | ||
{% if field.description %} | ||
<p class="help-block">{{ field.description }}</p> | ||
{% endif %} | ||
</div> | ||
{%- endmacro %} | ||
|
||
{# Renders radio field | ||
Params: | ||
field - WTForm field (there are no check, but you should put here only BooleanField. | ||
kwargs - pass any arguments you want in order to put them into the html attributes. | ||
There are few exceptions: for - for_, class - class_, class__ - class_ | ||
|
||
Example usage: | ||
{{ macros.render_radio_field(form.answers) }} | ||
#} | ||
{% macro render_radio_field(field) -%} | ||
{% for value, label, _ in field.iter_choices() %} | ||
<div class="radio"> | ||
<label> | ||
<input type="radio" name="{{ field.id }}" id="{{ field.id }}" value="{{ value }}">{{ label }} | ||
</label> | ||
</div> | ||
{% endfor %} | ||
{%- endmacro %} | ||
|
||
|
||
{# Renders WTForm in bootstrap way. There are two ways to call function: | ||
- as macros: it will render all field forms using cycle to iterate over them | ||
- as call: it will insert form fields as you specify: | ||
e.g. {% call macros.render_form(form, action_url=url_for('login_view'), action_text='Login', | ||
class_='login-form') %} | ||
{{ macros.render_field(form.email, placeholder='Input email', type='email') }} | ||
{{ macros.render_field(form.password, placeholder='Input password', type='password') }} | ||
{{ macros.render_checkbox_field(form.remember_me, type='checkbox') }} | ||
{% endcall %} | ||
|
||
Params: | ||
form - WTForm class | ||
action_url - url where to submit this form | ||
action_text - text of submit button | ||
class_ - sets a class for form | ||
#} | ||
{% macro render_form(form, action_url='', action_text='Submit', class_='', btn_class='btn btn-default', enctype="application/x-www-form-urlencoded") -%} | ||
<form method="POST" action="{{ action_url }}" role="form" class="{{ class_ }}" enctype="{{ enctype }}"> | ||
{{ form.hidden_tag() if form.hidden_tag }} | ||
{% if caller %} | ||
{{ caller() }} | ||
{% else %} | ||
{% for f in form %} | ||
{% if f.type == 'BooleanField' %} | ||
{{ render_checkbox_field(f) }} | ||
{% elif f.type == 'RadioField' %} | ||
{{ render_radio_field(f) }} | ||
{% else %} | ||
{{ render_field(f) }} | ||
{% endif %} | ||
{% endfor %} | ||
{% endif %} | ||
<button type="submit" class="{{ btn_class }}">{{ action_text }} </button> | ||
</form> | ||
{%- endmacro %} | ||
|
||
{% macro render_form_partial(form, action_url='', class_='', enctype="application/x-www-form-urlencoded") -%} | ||
<form method="POST" action="{{ action_url }}" role="form" class="{{ class_ }}" enctype="{{ enctype }}"> | ||
{{ form.hidden_tag() if form.hidden_tag }} | ||
{% if caller %} | ||
{{ caller() }} | ||
{% else %} | ||
{% for f in form %} | ||
{% if f.type == 'BooleanField' %} | ||
{{ render_checkbox_field(f) }} | ||
{% elif f.type == 'RadioField' %} | ||
{{ render_radio_field(f) }} | ||
{% else %} | ||
{{ render_field(f) }} | ||
{% endif %} | ||
{% endfor %} | ||
{% endif %} | ||
</form> | ||
{%- endmacro %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters