Skip to content

Commit 8133b00

Browse files
committed
Add dates demo to example app
1 parent c915fd0 commit 8133b00

File tree

8 files changed

+75
-54
lines changed

8 files changed

+75
-54
lines changed

example_app/app.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymongo import monitoring
44

55
from example_app import views
6+
from example_app.dates_demo import dates_demo_view
67
from example_app.models import db
78
from example_app.numbers_demo import numbers_demo_view
89
from example_app.strings_demo import strings_demo_view
@@ -42,14 +43,12 @@
4243

4344
app.add_url_rule("/", view_func=views.index, methods=["GET", "POST"])
4445
app.add_url_rule("/pagination", view_func=views.pagination, methods=["GET", "POST"])
45-
app.add_url_rule("/strings_demo", view_func=strings_demo_view, methods=["GET", "POST"])
46-
app.add_url_rule(
47-
"/strings_demo/<pk>/", view_func=strings_demo_view, methods=["GET", "POST"]
48-
)
49-
app.add_url_rule("/numbers_demo", view_func=numbers_demo_view, methods=["GET", "POST"])
50-
app.add_url_rule(
51-
"/numbers_demo/<pk>/", view_func=numbers_demo_view, methods=["GET", "POST"]
52-
)
46+
app.add_url_rule("/strings", view_func=strings_demo_view, methods=["GET", "POST"])
47+
app.add_url_rule("/strings/<pk>/", view_func=strings_demo_view, methods=["GET", "POST"])
48+
app.add_url_rule("/numbers", view_func=numbers_demo_view, methods=["GET", "POST"])
49+
app.add_url_rule("/numbers/<pk>/", view_func=numbers_demo_view, methods=["GET", "POST"])
50+
app.add_url_rule("/dates", view_func=dates_demo_view, methods=["GET", "POST"])
51+
app.add_url_rule("/dates/<pk>/", view_func=dates_demo_view, methods=["GET", "POST"])
5352

5453
if __name__ == "__main__":
5554
app.run(host="0.0.0.0", port=8000)

example_app/dates_demo.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""Date and DateTime fields demo model."""
2+
3+
from flask import render_template, request
4+
from wtforms.fields import DateTimeField
5+
6+
from example_app.models import db
7+
8+
9+
class DateTimeModel(db.Document):
10+
"""Documentation example model."""
11+
12+
any_string = db.StringField()
13+
date = db.DateField()
14+
datetime = db.DateTimeField()
15+
datetime_no_sec = db.DateTimeField(wtf_options={"render_kw": {"step": "60"}})
16+
datetime_ms = db.DateTimeField(wtf_options={"render_kw": {"step": "0.001"}})
17+
complex_datetime = db.ComplexDateTimeField()
18+
complex_datetime_sec = db.ComplexDateTimeField(
19+
wtf_options={"render_kw": {"step": "1"}}
20+
)
21+
complex_datetime_microseconds = db.ComplexDateTimeField(
22+
wtf_field_class=DateTimeField, wtf_options={"format": "%Y-%m-%d %H:%M:%S.%f"}
23+
)
24+
25+
26+
DateTimeDemoForm = DateTimeModel.to_wtf_form()
27+
28+
29+
def dates_demo_view(pk=None):
30+
"""Return all fields demonstration."""
31+
form = DateTimeDemoForm()
32+
obj = None
33+
if pk:
34+
obj = DateTimeModel.objects.get(pk=pk)
35+
form = DateTimeDemoForm(obj=obj)
36+
37+
if request.method == "POST" and form.validate_on_submit():
38+
if pk:
39+
form.populate_obj(obj)
40+
obj.save()
41+
else:
42+
form.save()
43+
page_num = int(request.args.get("page") or 1)
44+
page = DateTimeModel.objects.paginate(page=page_num, per_page=100)
45+
46+
return render_template(
47+
"form_demo.html",
48+
view=dates_demo_view.__name__,
49+
page=page,
50+
form=form,
51+
model=DateTimeModel,
52+
)

example_app/numbers_demo.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,9 @@ def numbers_demo_view(pk=None):
4242
page = NumbersDemoModel.objects.paginate(page=page_num, per_page=100)
4343

4444
return render_template(
45-
"numbers_demo.html", page=page, form=form, model=NumbersDemoModel
45+
"form_demo.html",
46+
view=numbers_demo_view.__name__,
47+
page=page,
48+
form=form,
49+
model=NumbersDemoModel,
4650
)

example_app/strings_demo.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,9 @@ def strings_demo_view(pk=None):
4848
page = StringsDemoModel.objects.paginate(page=page_num, per_page=100)
4949

5050
return render_template(
51-
"strings_demo.html", page=page, form=form, model=StringsDemoModel
51+
"form_demo.html",
52+
view=strings_demo_view.__name__,
53+
page=page,
54+
form=form,
55+
model=StringsDemoModel,
5256
)

example_app/templates/numbers_demo.html renamed to example_app/templates/form_demo.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<thead>
1010
<tr>
1111
{% for field in model._fields_ordered %}
12-
<th>{{ model[field].name }}</th>
12+
<th>{{ model[field].verbose_name or model[field].name}}</th>
1313
{% endfor %}
1414
<th>Edit</th>
1515
</tr>
@@ -20,14 +20,14 @@
2020
{% for field in page_object._fields_ordered %}
2121
<td>{{ page_object[field] }}</td>
2222
{% endfor %}
23-
<td><a href="{{ url_for('numbers_demo_view', pk=page_object.pk) }}">edit</a></td>
23+
<td><a href="{{ url_for(view, pk=page_object.pk) }}">edit</a></td>
2424
</tr>
2525
{% endfor %}
2626
</tbody>
2727
</table>
2828
</div>
2929
<div>
30-
{{ render_navigation(page, "numbers_demo_view") }}
30+
{{ render_navigation(page, view) }}
3131
</div>
3232
<div>
3333
<form method="POST">

example_app/templates/layout.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<li><a href="{{ url_for("pagination") }}">Pagination</a></li>
2121
<li><a href="{{ url_for("strings_demo_view") }}">Strings demo</a></li>
2222
<li><a href="{{ url_for("numbers_demo_view") }}">Numbers demo</a></li>
23+
<li><a href="{{ url_for("dates_demo_view") }}">DateTime demo</a></li>
2324
</ul>
2425
</nav>
2526
<div>

example_app/templates/strings_demo.html

Lines changed: 0 additions & 41 deletions
This file was deleted.

example_app/views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from mongoengine.context_managers import switch_db
55

66
from example_app import models
7+
from example_app.dates_demo import DateTimeModel
78
from example_app.numbers_demo import NumbersDemoModel
89
from example_app.strings_demo import StringsDemoModel
910

@@ -49,6 +50,7 @@ def delete_data():
4950
"""Clear database."""
5051
with switch_db(models.Todo, "default"):
5152
models.Todo.objects().delete()
53+
DateTimeModel.objects().delete()
5254
StringsDemoModel.objects().delete()
5355
NumbersDemoModel.objects().delete()
5456
with switch_db(models.Todo, "secondary"):

0 commit comments

Comments
 (0)