|
1 | | -import flask |
| 1 | +"""Demo views for example application.""" |
| 2 | +from faker import Faker |
| 3 | +from flask import render_template, request |
2 | 4 | from mongoengine.context_managers import switch_db |
3 | 5 |
|
| 6 | +from example_app import models |
4 | 7 |
|
5 | | -def index(): |
6 | | - from models import Todo |
7 | | - |
8 | | - with switch_db(Todo, "default") as Todo: |
9 | | - # As a list to test debug toolbar |
10 | | - Todo.objects().delete() # Removes |
11 | | - Todo(title="Simple todo A", text="12345678910").save() # Insert |
12 | | - Todo(title="Simple todo B", text="12345678910").save() # Insert |
13 | | - Todo(title="Simple todo C", text="12345678910").save() # Insert |
| 8 | + |
| 9 | +def generate_data(): |
| 10 | + """Generates fake data for all supported models and views.""" |
| 11 | + fake = Faker(locale=["en_US"]) |
| 12 | + |
| 13 | + with switch_db(models.Todo, "default"): |
| 14 | + models.Todo.objects().delete() # Removes |
| 15 | + models.Todo( |
| 16 | + title="Simple todo A", text=fake.sentence(), done=False |
| 17 | + ).save() # Insert |
| 18 | + models.Todo( |
| 19 | + title="Simple todo B", text=fake.sentence(), done=True |
| 20 | + ).save() # Insert |
| 21 | + models.Todo( |
| 22 | + title="Simple todo C", text=fake.sentence(), done=True |
| 23 | + ).save() # Insert |
14 | 24 | # Bulk insert |
15 | | - bulk = (Todo(title="Bulk 1"), Todo(title="Bulk 2")) |
16 | | - Todo.objects().insert(bulk) |
17 | | - Todo.objects(title__contains="B").order_by("-title").update( |
| 25 | + bulk = ( |
| 26 | + models.Todo(title="Bulk 1", text=fake.sentence(), done=False), |
| 27 | + models.Todo(title="Bulk 2", text=fake.sentence(), done=True), |
| 28 | + ) |
| 29 | + models.Todo.objects().insert(bulk) |
| 30 | + models.Todo.objects(title__contains="B").order_by("-title").update( |
18 | 31 | set__text="Hello world" |
19 | 32 | ) # Update |
20 | | - Todo.objects(title__contains="C").order_by("-title").delete() # Removes |
21 | | - todos = list(Todo.objects.order_by("-title", "done")[2:10]) |
22 | | - todos = Todo.objects.all().order_by("-title") |
23 | | - return flask.render_template("index.html", todos=todos) |
| 33 | + models.Todo.objects(title__contains="C").order_by("-title").delete() # Removes |
24 | 34 |
|
| 35 | + with switch_db(models.Todo, "secondary"): |
| 36 | + models.Todo.objects().delete() |
| 37 | + for _ in range(10): |
| 38 | + models.Todo( |
| 39 | + title=fake.text(max_nb_chars=59), |
| 40 | + text=fake.sentence(), |
| 41 | + done=fake.pybool(), |
| 42 | + pub_date=fake.date(), |
| 43 | + ).save() |
25 | 44 |
|
26 | | -def pagination(): |
27 | | - from models import Todo |
28 | 45 |
|
29 | | - with switch_db(Todo, "secondary") as Todo: |
30 | | - Todo.objects().delete() |
31 | | - for i in range(10): |
32 | | - Todo(title=f"Simple todo {i}", text="12345678910").save() |
| 46 | +def delete_data(): |
| 47 | + """Clear database.""" |
| 48 | + with switch_db(models.Todo, "default"): |
| 49 | + models.Todo.objects().delete() |
| 50 | + with switch_db(models.Todo, "secondary"): |
| 51 | + models.Todo.objects().delete() |
| 52 | + |
| 53 | + |
| 54 | +def index(): |
| 55 | + """Return page with welcome words and instructions.""" |
| 56 | + message = None |
| 57 | + if request.method == "POST": |
| 58 | + if request.form["button"] == "Generate data": |
| 59 | + generate_data() |
| 60 | + message = "Fake data generated" |
| 61 | + if request.form["button"] == "Delete data": |
| 62 | + delete_data() |
| 63 | + message = "All data deleted" |
| 64 | + return render_template("index.html", message=message) |
| 65 | + |
| 66 | + |
| 67 | +def pagination(): |
| 68 | + """Return pagination and easy form demonstration.""" |
| 69 | + form = models.TodoForm() |
33 | 70 |
|
34 | | - page_num = int(flask.request.args.get("page") or 1) |
35 | | - todos_page = Todo.objects.paginate(page=page_num, per_page=3) |
| 71 | + with switch_db(models.Todo, "secondary"): |
| 72 | + if request.method == "POST": |
| 73 | + form.validate_on_submit() |
| 74 | + form.save() |
| 75 | + page_num = int(request.args.get("page") or 1) |
| 76 | + todos_page = models.Todo.objects.paginate(page=page_num, per_page=3) |
36 | 77 |
|
37 | | - return flask.render_template("pagination.html", todos_page=todos_page) |
| 78 | + return render_template("pagination.html", todos_page=todos_page, form=form) |
0 commit comments