diff --git a/app/__init__.py b/app/__init__.py index 29ce935..c4c7f31 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,21 +1,29 @@ from flask import Flask from flask_migrate import Migrate, MigrateCommand from flask_sqlalchemy import SQLAlchemy -from flask_script import Manager, Command, Shell from flask_login import LoginManager import os, config -# создание экземпляра приложения -app = Flask(__name__) -app.config.from_object(os.environ.get('FLASK_ENV') or 'config.DevelopementConfig') +db = SQLAlchemy() +migrate = Migrate() +login_manager = LoginManager() +login_manager.login_view = 'main.login' -# инициализирует расширения -db = SQLAlchemy(app) -migrate = Migrate(app, db) -login_manager = LoginManager(app) -login_manager.login_view = 'login' -# import views -from . import views -# from . import forum_views -# from . import admin_views +# Фабрика приложения +def create_app(cfg) -> Flask: + # создание экземпляра приложения + app = Flask(__name__) + app.config.from_object(cfg) + + db.init_app(app) + migrate.init_app(app, db) + login_manager.init_app(app) + + from .main import main as main_blueprint + app.register_blueprint(main_blueprint) + + # from .admin import main as admin_blueprint + # app.register_blueprint(admin_blueprint) + + return app diff --git a/app/main/__init__.py b/app/main/__init__.py new file mode 100644 index 0000000..26860e8 --- /dev/null +++ b/app/main/__init__.py @@ -0,0 +1,5 @@ +from flask import Blueprint + +main = Blueprint('main', __name__) + +from . import views diff --git a/app/forms.py b/app/main/forms.py similarity index 100% rename from app/forms.py rename to app/main/forms.py diff --git a/app/views.py b/app/main/views.py similarity index 55% rename from app/views.py rename to app/main/views.py index 42a88e5..9eaff0a 100644 --- a/app/views.py +++ b/app/main/views.py @@ -1,46 +1,58 @@ -from app import app -from flask import render_template, request, redirect, url_for, flash -from flask_login import login_required, login_user,current_user, logout_user -from .models import User, Post, Category, Feedback, db +from . import main +from flask import Flask, request, render_template, redirect, url_for, flash, make_response, session +from flask_login import login_required, login_user, current_user, logout_user +from app.models import User, Post, Category, Feedback, db from .forms import ContactForm, LoginForm +from werkzeug.exceptions import abort -@app.route('/admin/') +@main.route('/admin/') @login_required def admin(): return render_template('admin.html') -@app.route('/') +@main.route('/') def index(): - return render_template('index.html') + name = None + if current_user.is_authenticated: + name = current_user.name + return render_template('index.html', name=name) -@app.route('/login/', methods=['post', 'get']) +@main.route('/login/', methods=['post', 'get']) def login(): if current_user.is_authenticated: - return redirect(url_for('admin')) + return redirect(url_for('.admin')) form = LoginForm() if form.validate_on_submit(): user = db.session.query(User).filter(User.username == form.username.data).first() if user and user.check_password(form.password.data): login_user(user, remember=form.remember.data) - nextpage = request.args.get('next', url_for('admin')) + nextpage = request.args.get('next', url_for('.admin')) return redirect(nextpage) else: flash("Invalid username/password", 'error') return render_template('login.html', form=form) -@app.route('/logout/') +@main.route('/user//') +def user_profile(user_id): + user = db.session.query(User).filter(User.id == user_id).first() + if not user: + abort(404) + return "Profile for user: {}".format(user.name) + + +@main.route('/logout/') @login_required def logout(): logout_user() flash("You have been logged out.") - return redirect(url_for('login')) + return redirect(url_for('.login')) -@app.route('/contact/', methods=['get', 'post']) +@main.route('/contact/', methods=['get', 'post']) def contact(): form = ContactForm() if form.validate_on_submit(): @@ -57,6 +69,6 @@ def contact(): print("\nData received. Now redirecting ...") flash("Message Received", "success") - return redirect(url_for('contact')) + return redirect(url_for('.contact')) return render_template('contact.html', form=form) diff --git a/app/templates/admin.html b/app/templates/admin.html index 2493e10..2a65d5f 100644 --- a/app/templates/admin.html +++ b/app/templates/admin.html @@ -15,7 +15,7 @@
  • Updated on: {{ current_user.updated_on }}
  • -

    Logout

    +

    Logout

    \ No newline at end of file diff --git a/app/templates/index.html b/app/templates/index.html index 4a33eb5..58d6ee0 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -5,6 +5,7 @@ Hello -

    Hello{% if name %}, 

    {{ name }}

    {% endif %}

    +

    Hello{% if name %}, {{ name }}{% endif %}


    +

    Admin

    \ No newline at end of file diff --git a/runner.py b/runner.py index aae9f44..f293316 100644 --- a/runner.py +++ b/runner.py @@ -4,11 +4,12 @@ import flask from flask import request, current_app, url_for from jinja2 import Template -from app import app, db +from app import create_app, db from app.models import User, Post, Tag, Category, Feedback from flask_script import Manager, Shell from flask_migrate import MigrateCommand +app = create_app(os.getenv('FLASK_ENV') or 'config.DevelopementConfig') manager = Manager(app)