Pārlūkot izejas kodu

Added much of a working CRUD model. Most.

Breandan Dezendorf 2 gadi atpakaļ
vecāks
revīzija
8ab86be5ab

+ 49 - 7
dezendorf/applications/gopy/gopy.py

@@ -2,21 +2,20 @@
 
 import flask
 
-from flask import request, jsonify
+from flask import make_response, request, redirect, jsonify, render_template, url_for
 from flask_sqlalchemy import SQLAlchemy
 from flask_marshmallow import Marshmallow
 
 db = SQLAlchemy()
 app = flask.Flask(__name__)
-app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root@mysql-0.mysql.svc.cluster.local/gopy'
+app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:m9Eb5OflQb@mysql.mysql.svc.cluster.local/gopy'
 db.init_app(app)
-app.run(host="0.0.0.0")
 
 ma = Marshmallow(app)
 
 class Link(db.Model):
     id = db.Column(db.Integer, primary_key=True)
-    name = db.Column(db.String(255))
+    name = db.Column(db.String(255), unique=True)
     target = db.Column(db.String(255))
 
     def __repr__(self):
@@ -28,16 +27,59 @@ class LinkSchema(ma.Schema):
     class Meta:
         fields = ('id', 'name', 'target')
 
-@app.route('/links', methods=['GET'])
 def get_links():
     links = Link.query.all()
     schema = LinkSchema(many=True)
     link_json = schema.dump(links)
-    return jsonify(link_json)
+    print(link_json)
+    return links
+    #jsonify(link_json)
+
+
+@app.route('/<string:name>', strict_slashes=False, methods=['GET'])
+def redirect_to_link(name):
+    try:
+        link = Link.query.filter_by(name=name).first()
+    except e:
+        return redirect("/", code=302)
+    if link is None:
+        return redirect("/", code=302)
+    return redirect(link.target, code=302)
+
+
+@app.post('/<string:link_name>/add', strict_slashes=False)
+def add_link(link_name):
+    db.create_all()
+    link = Link(name=link_name, target=request.form['target'])
+    db.session.add(link)
+    db.session.commit()
+    return redirect("/", code=302)
+
+
+@app.route('/<string:link_name>/add', strict_slashes=False)
+def add_link_form(link_name):
+    return render_template('add.html', link_name=link_name)
+
+@app.post('/<string:link_name>/delete', strict_slashes=False)
+def delete_link(link_name):
+    link = Link.query.filter_by(name=link_name).first()
+    db.session.delete(link)
+    db.session.commit()
+    return redirect(url_for('hello_world'))
+
+
+@app.route('/<string:link_name>/delete', strict_slashes=False)
+def delete_link_form(link_name):
+    link = Link.query.filter_by(name=link_name).first()
+    print(link)
+    return render_template('delete.html', link=link)
+
 
 @app.route('/')
 def hello_world():
-    return "<p>Hello, World!</p>"
+    links = get_links()
+    print(links)
+    return render_template('list.html', links=links)
 
 #@app.route('/links/<int:id>', methods=['GET'])
 

+ 21 - 0
dezendorf/applications/gopy/templates/add.html

@@ -0,0 +1,21 @@
+{% extends 'base.html' %}
+
+{% block content %}
+    <h1>{% block title %} Add a New Link {% endblock %}</h1>
+    <form method="post">
+        <label for="title">{{ link_name }}</label>
+        <br>
+        {{ request.form['link_name'] }}
+        <input type="hidden" name="link_name"
+               placeholder="Link name"
+               value="{{ request.form['link_name'] }}"></input>
+        <br>
+        <label for="content">Target</label>
+        <br>
+        <input type="text" name="target"
+               placeholder="http://example.com"
+               value="{{ request.form['target'] }}"></input>
+        <br>
+        <button type="submit">Submit</button>
+    </form>
+{% endblock %}

+ 44 - 0
dezendorf/applications/gopy/templates/base.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>{% block title %} {% endblock %} - FlaskApp</title>
+    <style>
+        .link {
+            padding: 10px;
+            margin: 5px;
+            background-color: #f3f3f3;
+            max-width: 800px;
+        }
+        .edit_button {
+            padding-right: 10px;
+            float: right;
+        }
+        .delete_button {
+            padding-right: 10px;
+            float: right;
+        }
+        .add_button {
+            padding-right: 10px;
+            float: right;
+        }
+        nav a {
+            color: #d64161;
+            font-size: 3em;
+            margin-left: 50px;
+            text-decoration: none;
+        }
+
+    </style>
+</head>
+<body>
+    <nav>
+        <a href="{{ url_for('hello_world') }}">FlaskApp</a>
+        <a href="#">About</a>
+    </nav>
+    <hr>
+    <div class="content">
+        {% block content %} {% endblock %}
+    </div>
+</body>
+</html>

+ 18 - 0
dezendorf/applications/gopy/templates/delete.html

@@ -0,0 +1,18 @@
+{% extends 'base.html' %}
+
+{% block content %}
+    <h1>{% block title %} Delete Link{% endblock %}</h1>
+    <form method="post">
+        <div class='link'>
+            <div>
+                <span class="name">{{ link['name'] }}</span>
+                <span class="target">{{ link['target'] }}</span>
+                <span class="delete_button"><b>Delete</b></span>
+                <span class="edit_button">Edit</span>
+            </div>
+        </div>
+        <input type="hidden" name="link_id" value="{{ link['name'] }}">
+        <br>
+        <button type="submit">Submit</button>
+    </form>
+{% endblock %}

+ 24 - 0
dezendorf/applications/gopy/templates/list.html

@@ -0,0 +1,24 @@
+{% extends 'base.html' %}
+
+{% block content %}
+    <h1>{% block title %} Links {% endblock %}</h1>
+    <div class='link'>
+        <div>
+            <span class="name"></a></span>
+            <span class="target"></span>
+            <span class="add_button"><a href="add_link">Add</a></span>
+            <span class="add_button"><a href="add_link">Add</a></span>
+        </div>
+    </div>
+
+    {% for link in links %}
+        <div class='link'>
+            <div>
+                <span class="name"><a href="{{ link['target'] }}">{{ link['name'] }}</a></span>
+                <span class="target">{{ link['target'] }}</span>
+                <span class="edit_button"><a href="edit_link">Edit</a></span>
+                <span class="delete_button"><a href="{{ url_for('delete_link_form', link_name=link['name']) }}">Delete</a></span>
+            </div>
+        </div>
+    {% endfor %}
+{% endblock %}

+ 0 - 0
dezendorf/applications/gopy/templates/search.html