summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Arnold2025-04-06 21:06:53 -0400
committerMatt Arnold2025-04-06 21:06:53 -0400
commitc26d3c09abea8aac5cdad752e23f19e5c8e98cd9 (patch)
tree2d4a2ad21ab4f5dfb33420a77f0b28b2b3b23c47
have gpt start us off
-rw-r--r--.gitignore117
-rw-r--r--app.py39
-rw-r--r--config.py12
-rw-r--r--forms.py7
-rw-r--r--models.py14
-rw-r--r--static/style.css34
-rw-r--r--templates/base.html17
-rw-r--r--templates/index.html11
-rw-r--r--templates/post.html8
9 files changed, 259 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..df09c56
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,117 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+*.egg-info/
+.dist/
+build/
+develop-eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg
+.installed.cfg
+*.egg-info/
+.eggs/
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Flask stuff
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+celerybeat-schedule.*
+
+# SageMath parsed files
+*.sage.py
+
+# Environment variables
+.env
+.env.*
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# Local configuration files
+config.py
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..7a1b07f
--- /dev/null
+++ b/app.py
@@ -0,0 +1,39 @@
+from flask import Flask, render_template, request, redirect, url_for
+from peewee import SqliteDatabase
+from models import Post
+from forms import PostForm
+
+app = Flask(__name__)
+app.config.from_object('config')
+
+db = SqliteDatabase('blog.db')
+
+@app.before_request
+def before_request():
+ db.connect()
+
+@app.after_request
+def after_request(response):
+ db.close()
+ return response
+
+@app.route('/')
+def index():
+ posts = Post.select().order_by(Post.created_at.desc())
+ return render_template('index.html', posts=posts)
+
+@app.route('/post/<int:post_id>')
+def post(post_id):
+ post = Post.get(Post.id == post_id)
+ return render_template('post.html', post=post)
+
+@app.route('/create', methods=['GET', 'POST'])
+def create():
+ form = PostForm()
+ if form.validate_on_submit():
+ Post.create(title=form.title.data, content=form.content.data)
+ return redirect(url_for('index'))
+ return render_template('create.html', form=form)
+
+if __name__ == '__main__':
+ app.run(debug=True) \ No newline at end of file
diff --git a/config.py b/config.py
new file mode 100644
index 0000000..9416e9c
--- /dev/null
+++ b/config.py
@@ -0,0 +1,12 @@
+import os
+
+class Config:
+ SECRET_KEY = os.urandom(24)
+
+ @staticmethod
+ def init_app(app):
+ pass
+
+config = {
+ 'default': Config
+} \ No newline at end of file
diff --git a/forms.py b/forms.py
new file mode 100644
index 0000000..c66954c
--- /dev/null
+++ b/forms.py
@@ -0,0 +1,7 @@
+from flask_wtf import FlaskForm
+from wtforms import StringField, TextAreaField
+from wtforms.validators import DataRequired
+
+class PostForm(FlaskForm):
+ title = StringField('Title', validators=[DataRequired()])
+ content = TextAreaField('Content', validators=[DataRequired()]) \ No newline at end of file
diff --git a/models.py b/models.py
new file mode 100644
index 0000000..955a70a
--- /dev/null
+++ b/models.py
@@ -0,0 +1,14 @@
+from peewee import Model, CharField, TextField, DateTimeField
+from datetime import datetime
+from app import db
+
+class BaseModel(Model):
+ class Meta:
+ database = db
+
+class Post(BaseModel):
+ title = CharField()
+ content = TextField()
+ created_at = DateTimeField(default=datetime.now)
+
+db.create_tables([Post]) \ No newline at end of file
diff --git a/static/style.css b/static/style.css
new file mode 100644
index 0000000..8e258e5
--- /dev/null
+++ b/static/style.css
@@ -0,0 +1,34 @@
+body {
+ font-family: Arial, sans-serif;
+ margin: 0;
+ padding: 0;
+ background-color: #f4f4f4;
+}
+
+header {
+ background-color: #333;
+ color: #fff;
+ padding: 1rem;
+}
+
+header h1 {
+ margin: 0;
+}
+
+header a {
+ color: #fff;
+ text-decoration: none;
+}
+
+main {
+ padding: 1rem;
+}
+
+a {
+ color: #333;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+} \ No newline at end of file
diff --git a/templates/base.html b/templates/base.html
new file mode 100644
index 0000000..48b4d9c
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Blog</title>
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
+</head>
+<body>
+ <header>
+ <h1><a href="{{ url_for('index') }}">My Blog</a></h1>
+ </header>
+ <main>
+ {% block content %}{% endblock %}
+ </main>
+</body>
+</html> \ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
new file mode 100644
index 0000000..9a05e7a
--- /dev/null
+++ b/templates/index.html
@@ -0,0 +1,11 @@
+{% extends 'base.html' %}
+
+{% block content %}
+ <h2>Posts</h2>
+ <ul>
+ {% for post in posts %}
+ <li><a href="{{ url_for('post', post_id=post.id) }}">{{ post.title }}</a> - {{ post.created_at.strftime('%Y-%m-%d') }}</li>
+ {% endfor %}
+ </ul>
+ <a href="{{ url_for('create') }}">Create a new post</a>
+{% endblock %} \ No newline at end of file
diff --git a/templates/post.html b/templates/post.html
new file mode 100644
index 0000000..5a28b2b
--- /dev/null
+++ b/templates/post.html
@@ -0,0 +1,8 @@
+{% extends 'base.html' %}
+
+{% block content %}
+ <h2>{{ post.title }}</h2>
+ <p>{{ post.created_at.strftime('%Y-%m-%d %H:%M') }}</p>
+ <div>{{ post.content }}</div>
+ <a href="{{ url_for('index') }}">Back to posts</a>
+{% endblock %} \ No newline at end of file