Browse Source

Move page to own modules inside backend

JoostSijm 6 years ago
parent
commit
e91e014518

+ 3 - 5
app/flaskr.py

@@ -3,15 +3,13 @@
 Simple flask thing
 """
 
-from flask_login import login_required, login_user, logout_user
-from flask_menu import register_menu
-from flask import render_template, request, redirect, url_for, flash
-from app import app, login_manager, db
-from app.models import User
+from app import app
 from app.modules.static import Static
 from app.modules.backend import Backend
 from app.modules.auth import Auth
+from app.modules.backend.modules.page import Backend_Page
 
 app.register_blueprint(Auth)
 app.register_blueprint(Static)
 app.register_blueprint(Backend, url_prefix='/backend')
+app.register_blueprint(Backend_Page, url_prefix='/backend/page')

+ 4 - 73
app/modules/backend/app.py

@@ -5,12 +5,10 @@ Backend
 
 import os
 
-from flask_login import login_required, login_user, logout_user, current_user
-from flask_menu import Menu, register_menu
-from flask import render_template, request, redirect, url_for, flash, Blueprint, abort, jsonify
-from jinja2 import TemplateNotFound
-from app import app, login_manager, db
-from app.models import User, Page
+from flask_login import login_required
+from flask_menu import register_menu
+from flask import render_template, redirect, url_for, flash, Blueprint
+from app.models import Page
 
 
 BLUEPRINT = Blueprint(
@@ -29,73 +27,6 @@ def index():
     return render_template('site/index.j2', pages=pages)
 
 
-@BLUEPRINT.route('/page/create', methods=["GET", "POST"])
-@register_menu(BLUEPRINT, 'page_create', 'Create page')
-@login_required
-def create_page():
-    """Page creating"""
-    pages = Page.query.all()
-    if request.method == 'POST':
-        page = Page()
-        page.title = request.form['title']
-        page.source = request.form['source']
-        page.user_id = current_user.id
-        page.parent_id = request.form['parent_id'] if request.form['parent_id'] else None
-
-        db.session.add(page)
-        db.session.commit()
-
-        flash('Page "%s" successfully created' % page.title, 'success')
-
-    return render_template('page/create.j2', pages=pages)
-
-
-@BLUEPRINT.route('/page/edit/<int:page_id>', methods=["GET", "POST"])
-@login_required
-def edit_page(page_id):
-    """Page editing"""
-    page = Page.query.get(page_id)
-    pages = Page.query.filter(Page.id != page.id).all()
-
-    if request.method == 'POST':
-        page.title = request.form['title']
-        page.source = request.form['source']
-        page.parent_id = request.form['parent_id'] if request.form['parent_id'] else None
-        page.user_id = current_user.id
-
-        db.session.add(page)
-        db.session.commit()
-
-        flash('Page "%s" successfully edit' % page.title, 'success')
-
-    return render_template(
-        'page/edit.j2',
-        page=page,
-        pages=pages
-    )
-
-
-@BLUEPRINT.route('/page/remove/<int:page_id>')
-@login_required
-def remove_page(page_id):
-    """Page removing"""
-    page = Page.query.get(page_id)
-
-    db.session.delete(page)
-    db.session.commit()
-
-    flash('Page "%s" successfully remove' % page.title, 'success')
-    return redirect(url_for('backend.index'))
-
-
-@BLUEPRINT.route('/page/view/<int:page_id>')
-@login_required
-def view_page(page_id):
-    """Display page"""
-    page = Page.query.get(page_id)
-    return render_template('page/view.j2', page=page)
-
-
 @BLUEPRINT.route('/render')
 @register_menu(BLUEPRINT, 'render', 'Render')
 @login_required

+ 6 - 0
app/modules/backend/modules/page/__init__.py

@@ -0,0 +1,6 @@
+
+"""
+Server static pages
+"""
+
+from .app import BLUEPRINT as Backend_Page

+ 84 - 0
app/modules/backend/modules/page/app.py

@@ -0,0 +1,84 @@
+
+"""
+Backend
+"""
+
+from flask_login import login_required, current_user
+from flask_menu import register_menu
+from flask import render_template, request, redirect, url_for, flash, Blueprint
+from app import db
+from app.models import Page
+
+
+BLUEPRINT = Blueprint(
+    'backend_page',
+    __name__,
+    template_folder='templates'
+)
+
+
+@BLUEPRINT.route('/create', methods=["GET", "POST"])
+@register_menu(BLUEPRINT, 'page_create', 'Create page')
+@login_required
+def create_page():
+    """Page creating"""
+    pages = Page.query.all()
+    if request.method == 'POST':
+        page = Page()
+        page.title = request.form['title']
+        page.source = request.form['source']
+        page.user_id = current_user.id
+        page.parent_id = request.form['parent_id'] if request.form['parent_id'] else None
+
+        db.session.add(page)
+        db.session.commit()
+
+        flash('Page "%s" successfully created' % page.title, 'success')
+
+    return render_template('page/create.j2', pages=pages)
+
+
+@BLUEPRINT.route('/edit/<int:page_id>', methods=["GET", "POST"])
+@login_required
+def edit_page(page_id):
+    """Page editing"""
+    page = Page.query.get(page_id)
+    pages = Page.query.filter(Page.id != page.id).all()
+
+    if request.method == 'POST':
+        page.title = request.form['title']
+        page.source = request.form['source']
+        page.parent_id = request.form['parent_id'] if request.form['parent_id'] else None
+        page.user_id = current_user.id
+
+        db.session.add(page)
+        db.session.commit()
+
+        flash('Page "%s" successfully edit' % page.title, 'success')
+
+    return render_template(
+        'page/edit.j2',
+        page=page,
+        pages=pages
+    )
+
+
+@BLUEPRINT.route('/remove/<int:page_id>')
+@login_required
+def remove_page(page_id):
+    """Page removing"""
+    page = Page.query.get(page_id)
+
+    db.session.delete(page)
+    db.session.commit()
+
+    flash('Page "%s" successfully remove' % page.title, 'success')
+    return redirect(url_for('backend.index'))
+
+
+@BLUEPRINT.route('/view/<int:page_id>')
+@login_required
+def view_page(page_id):
+    """Display page"""
+    page = Page.query.get(page_id)
+    return render_template('page/view.j2', page=page)

+ 26 - 0
app/modules/backend/modules/page/templates/create.j2

@@ -0,0 +1,26 @@
+{% extends "layout/backend.j2" %}
+{% block content %}
+<h1>Page create</h1>
+<form method="post">
+    <div class="form-group">
+        <label class="text-normal text-dark">title</label>
+        <input type="text" class="form-control" name="title" placeholder="title">
+    </div>
+    <div class="form-group">
+        <label class="text-normal text-dark">Source</label>
+        <textarea class="form-control" name="source"></textarea>
+    </div>
+    <div class="form-group">
+        <label class="text-normal text-dark">Parent</label>
+        <select class="form-control" name="parent_id">
+            <option></option>
+            {% for page in pages %}
+            <option value="{{ page.id }}">{{ page.title }}</option>
+            {% endfor %}
+        </select>
+    </div>
+    <div class="form-group pull-right">
+        <button class="btn btn-primary">Create</button>
+    </div>
+</form>
+{% endblock %}

+ 31 - 0
app/modules/backend/modules/page/templates/edit.j2

@@ -0,0 +1,31 @@
+{% extends "layout/backend.j2" %}
+{% block content %}
+<h1>Edit: {{ page.title }}</h1>
+<form method="post">
+    <div class="form-group">
+        <label class="text-normal text-dark">title</label>
+        <input type="text" class="form-control" name="title" placeholder="title" value="{{ page.title }}">
+    </div>
+    <div class="form-group">
+        <label class="text-normal text-dark">Source</label>
+        <textarea class="form-control" name="source">{{ page.source }}</textarea>
+    </div>
+    <div class="form-group">
+        <label class="text-normal text-dark">Parent</label>
+        <select class="form-control" name="parent_id">
+            <option></option>
+            {% for parent_page in pages %}
+            {% if parent_page.id == page.parent_id %}
+            <option value="{{ parent_page.id }}" selected>{{ parent_page.title }}</option>
+            {% else %}
+            <option value="{{ parent_page.id }}">{{ parent_page.title }}</option>
+            {% endif %}
+            {% endfor %}
+        </select>
+    </div>
+    <div class="form-group pull-right">
+        <button class="btn btn-primary">Save</button>
+    </div>
+</form>
+<p>{{ page.content() }}</p>
+{% endblock %}

+ 6 - 0
app/modules/backend/modules/page/templates/view.j2

@@ -0,0 +1,6 @@
+{% extends "layout/backend.j2" %}
+{% block content %}
+<h1>Title: {{ page.title }}</h1>
+<a href="{{ url_for('backend.edit_page', page_id=page.id) }}">Edit</a><br>
+<p>{{ page.content() }}</p>
+{% endblock %}

+ 4 - 4
app/modules/backend/templates/site/index.j2

@@ -21,14 +21,14 @@
                             Action
                         </button>
                         <div class="dropdown-menu">
-                            <a class="dropdown-item" href="{{ url_for('backend.view_page', page_id=page.id) }}">View</a>
-                            <a class="dropdown-item" href="{{ url_for('backend.edit_page', page_id=page.id) }}">Edit</a>
-                            <a class="dropdown-item" href="{{ url_for('backend.remove_page', page_id=page.id) }}">Remove</a>
+                            <a class="dropdown-item" href="{{ url_for('backend_page.view_page', page_id=page.id) }}">View</a>
+                            <a class="dropdown-item" href="{{ url_for('backend_page.edit_page', page_id=page.id) }}">Edit</a>
+                            <a class="dropdown-item" href="{{ url_for('backend_page.remove_page', page_id=page.id) }}">Remove</a>
                         </div>
                     </div>
                 </td>
                 <td>
-                    {{ '> ' * (loop.depth - 1) }}<a href="{{ url_for('backend.view_page', page_id=page.id) }}">
+                    {{ '> ' * (loop.depth - 1) }}<a href="{{ url_for('backend_page.view_page', page_id=page.id) }}">
                         {{ page.title if page.title else 'page %s' % page.id }}
                     </a>
                 </td>

+ 2 - 5
app/modules/static/app.py

@@ -3,17 +3,14 @@
 Serve static content
 """
 
-from flask_login import login_required, login_user, logout_user
-from flask_menu import Menu, register_menu
-from flask import render_template, request, redirect, url_for, flash, Blueprint, abort
+from flask import render_template, Blueprint, abort
 from jinja2 import TemplateNotFound
-from app import app, login_manager, db
-from app.models import User
 
 
 BLUEPRINT = Blueprint(
     "static",
     __name__,
+    template_folder='pages'
 )
 
 @BLUEPRINT.route("/", defaults={"page": "index"})