folgender Flask-Aufbau:
blog/
-blog.py
-sql.py
-comments.db
templates/
-welcome.html
-show_entry.html
-login.html
static/
-bootstrap css bzw js datein
blog.py
Code: Alles auswählen
import sqlite3
from flask import Flask, render_template, g, request, url_for, redirect
app = Flask(__name__)
app.database = 'comments.db'
@app.before_request
def before_request():
g.db = sqlite3.connect("comments.db")
@app.teardown_request
def teardown_request(exception):
if hasattr(g, 'db'):
g.db.close()
@app.route('/')
def home():
return 'Hello World!'
@app.route('/welcome')
def welcome():
return render_template("welcome.html")
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] != 'admin' or request.form['password'] != 'admin':
error = 'Invalid credentials. Please try again.'
else:
return redirect(url_for('home'))
return render_template('login.html', error=error)
@app.route('/show_entry')
def show_entry():
posts = g.db.execute("SELECT title, text FROM posts").fetchall()
return render_template("show_entry.html", posts=posts)
if __name__ == '__main__':
app.run(debug=True)
sql.py
Code: Alles auswählen
import sqlite3
conn = sqlite3.connect('comments.db')
conn.execute('''CREATE TABLE posts
(ID INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
text TEXT NOT NULL);''')
login.html, welcome.html und
show_entry.html
Code: Alles auswählen
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Flask Blog</title>
<meta name="viewport" content="width=device-width, initial-scale1.0">
<link href="static/bootstrap.min.css" rel="stylesheet" media="screen">
</head>
<body>
<div class="container">
<h3>Posts:</h3>
{% for post in posts %}
<strong>Title:</strong> {{ post.title }}
<strong>Post:</strong> {{ post.text }}
<br>
{% endfor %}
</div>
</body>
</html>
wenn ich den projekt ausführe und teste bekomme ich folgende Fehlermeldung raus.
sqlite3.OperationalError
OperationalError: no such table: posts
Code: Alles auswählen
posts = g.db.execute("SELECT title, text FROM posts").fetchall()
Wo liegt der Fehler hier ? Ich bin schon am verzweifeln warum das nicht funktioniert.
ps.:ich benutze python 2.7 und neuste flask version