| @@ -32,4 +32,8 @@ def create_app(): | |||
| from .main import main as main_blueprint | |||
| app.register_blueprint(main_blueprint) | |||
| # blueprint for tools parts of app | |||
| from .tool import tool as tool_blueprint | |||
| app.register_blueprint(tool_blueprint) | |||
| return app | |||
| @@ -8,7 +8,7 @@ class User(UserMixin, db.Model): | |||
| password = db.Column(db.String(100)) | |||
| name = db.Column(db.String(1000)) | |||
| class Tools(db.Model): | |||
| class Tool(db.Model): | |||
| id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy | |||
| created = db.Column(db.DateTime, default=datetime.utcnow) | |||
| name = db.Column(db.Text) | |||
| @@ -5,7 +5,7 @@ | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||
| <title>Flask Auth Example</title> | |||
| <title>COPIM online toolkit</title> | |||
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css" /> | |||
| </head> | |||
| @@ -22,6 +22,11 @@ | |||
| Home | |||
| </a> | |||
| {% if current_user.is_authenticated %} | |||
| <a href="{{ url_for('tool.create') }}" class="navbar-item"> | |||
| Add tool | |||
| </a> | |||
| {% endif %} | |||
| {% if current_user.is_authenticated %} | |||
| <a href="{{ url_for('main.profile') }}" class="navbar-item"> | |||
| Profile | |||
| </a> | |||
| @@ -0,0 +1,31 @@ | |||
| {% extends "base.html" %} | |||
| {% block content %} | |||
| <div class="column is-4 is-offset-4"> | |||
| <h3 class="title">Add a new tool</h3> | |||
| <div class="box"> | |||
| {% with messages = get_flashed_messages() %} | |||
| {% if messages %} | |||
| <div class="notification is-danger"> | |||
| {{ messages[0] }} | |||
| </div> | |||
| {% endif %} | |||
| {% endwith %} | |||
| <form method="POST" action="/create"> | |||
| <div class="field"> | |||
| <div class="control"> | |||
| <input class="input is-large" type="text" name="name" placeholder="Tool name" autofocus=""> | |||
| </div> | |||
| </div> | |||
| <div class="field"> | |||
| <div class="control"> | |||
| <textarea class="input is-large" type="text" name="description" placeholder="Tool description" autofocus=""></textarea> | |||
| </div> | |||
| </div> | |||
| <button class="button is-block is-info is-large is-fullwidth">Submit</button> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| {% endblock %} | |||
| @@ -0,0 +1,7 @@ | |||
| {% extends "base.html" %} | |||
| {% block content %} | |||
| <h1 class="title"> | |||
| Welcome, {{ name }}! | |||
| </h1> | |||
| {% endblock %} | |||
| @@ -0,0 +1,31 @@ | |||
| from flask import Blueprint, render_template, request, flash | |||
| from flask_login import login_required, current_user | |||
| from .models import Tool | |||
| from . import db | |||
| tool = Blueprint('tool', __name__) | |||
| @tool.route('/create', methods=('GET', 'POST')) | |||
| @login_required | |||
| def create(): | |||
| if request.method == 'POST': | |||
| name = request.form.get('name') | |||
| description = request.form.get('description') | |||
| if not name: | |||
| flash('Name is required!') | |||
| else: | |||
| tool = Tool.query.filter_by(name=name).first() # if this returns a tool, then the name already exists in database | |||
| if tool: # if a tool is found, we want to redirect back to create page | |||
| flash('Tool with same name already exists') | |||
| return redirect(url_for('tool.create')) | |||
| # create a new tool with the form data | |||
| new_tool = Tool(name=name, description=description) | |||
| # add the new user to the database | |||
| db.session.add(new_tool) | |||
| db.session.commit() | |||
| return render_template('create.html') | |||