Browse Source

Working on file modules

JoostSijm 6 years ago
parent
commit
22844806e1

+ 2 - 0
app/flaskr.py

@@ -8,8 +8,10 @@ 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
+from app.modules.backend.modules.file import Backend_File
 
 app.register_blueprint(Auth)
 app.register_blueprint(Static)
 app.register_blueprint(Backend, url_prefix='/backend')
 app.register_blueprint(Backend_Page, url_prefix='/backend/page')
+app.register_blueprint(Backend_File, url_prefix='/backend/file')

+ 2 - 2
app/models.py

@@ -121,11 +121,11 @@ class File(db.Model):
     )
     user = db.relationship(
         "User",
-        backref=db.backref("Pages", lazy="dynamic")
+        backref=db.backref("files", lazy="dynamic")
     )
 
     files = db.relationship(
-        'page',
+        'Page',
         secondary=page_file,
         lazy='subquery',
         backref=db.backref('pages', lazy=True)

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

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

+ 84 - 0
app/modules/backend/modules/file/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_file',
+    __name__,
+    template_folder='templates'
+)
+
+
+@BLUEPRINT.route('/create', methods=["GET", "POST"])
+@register_menu(BLUEPRINT, 'create_file', 'Create file')
+@login_required
+def create():
+    """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_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_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_id):
+    """Display page"""
+    page = Page.query.get(page_id)
+    return render_template('page/view.j2', page=page)

+ 26 - 0
app/modules/backend/modules/file/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/file/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/file/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 %}

+ 5 - 5
app/modules/backend/modules/page/app.py

@@ -18,9 +18,9 @@ BLUEPRINT = Blueprint(
 
 
 @BLUEPRINT.route('/create', methods=["GET", "POST"])
-@register_menu(BLUEPRINT, 'page_create', 'Create page')
+@register_menu(BLUEPRINT, 'create_page', 'Create page')
 @login_required
-def create_page():
+def create():
     """Page creating"""
     pages = Page.query.all()
     if request.method == 'POST':
@@ -40,7 +40,7 @@ def create_page():
 
 @BLUEPRINT.route('/edit/<int:page_id>', methods=["GET", "POST"])
 @login_required
-def edit_page(page_id):
+def edit(page_id):
     """Page editing"""
     page = Page.query.get(page_id)
     pages = Page.query.filter(Page.id != page.id).all()
@@ -65,7 +65,7 @@ def edit_page(page_id):
 
 @BLUEPRINT.route('/remove/<int:page_id>')
 @login_required
-def remove_page(page_id):
+def remove(page_id):
     """Page removing"""
     page = Page.query.get(page_id)
 
@@ -78,7 +78,7 @@ def remove_page(page_id):
 
 @BLUEPRINT.route('/view/<int:page_id>')
 @login_required
-def view_page(page_id):
+def view(page_id):
     """Display page"""
     page = Page.query.get(page_id)
     return render_template('page/view.j2', page=page)

+ 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_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>
+                            <a class="dropdown-item" href="{{ url_for('backend_page.view', page_id=page.id) }}">View</a>
+                            <a class="dropdown-item" href="{{ url_for('backend_page.edit', page_id=page.id) }}">Edit</a>
+                            <a class="dropdown-item" href="{{ url_for('backend_page.remove', page_id=page.id) }}">Remove</a>
                         </div>
                     </div>
                 </td>
                 <td>
-                    {{ '> ' * (loop.depth - 1) }}<a href="{{ url_for('backend_page.view_page', page_id=page.id) }}">
+                    {{ '> ' * (loop.depth - 1) }}<a href="{{ url_for('backend_page.view', page_id=page.id) }}">
                         {{ page.title if page.title else 'page %s' % page.id }}
                     </a>
                 </td>