changeset 5:3ba60dfc1d64

Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
author Michał Rudowicz <michal.rudowicz@fl9.eu>
date Sun, 27 Feb 2011 09:33:03 +0100
parents cf786ee26a22
children 27d63cac76ac
files frontend/mfrontend/db.py frontend/mfrontend/templates/install_ok.html frontend/mfrontend/views/frontend.py frontend/schema.sql
diffstat 4 files changed, 52 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/frontend/mfrontend/db.py	Tue Feb 22 20:38:51 2011 +0000
+++ b/frontend/mfrontend/db.py	Sun Feb 27 09:33:03 2011 +0100
@@ -5,6 +5,8 @@
 from flask import g
 import ConfigParser
 from mfrontend import utils
+from contextlib import closing
+import os.path
 
 config = ConfigParser.SafeConfigParser()
 config.read('config.ini')
@@ -17,6 +19,26 @@
     """Funkcja zamykająca połączenie z bazą danych"""
     g.db.close()
 
+def init_db():
+    """Funkcja przeprowadzająca inicjalizację bazy danych zgodnie
+       z plikiem schema.sql. Na podstawie kodu ze strony
+       http://flask.pocoo.org/docs/patterns/sqlite3/#initial-schemas
+       Instalacja powiedzie się tylko wtedy, gdy w obecnym katalogu
+       nie istnieje plik '.installed'. Plik taki jest tworzony
+       po każdej instalacji, aby zapobiec operacjom na
+       istniejących bazach.
+       @return True, jeśli instalacja została wykonana,
+               False, jeśli plik '.installed' istnieje.
+    """
+    if not os.path.isfile('.installed'):
+        with open('schema.sql', 'r') as f:
+            g.db.cursor().executescript(f.read())
+        g.db.commit()
+        open('.installed', 'w').close()
+        return True
+    else:
+        return False
+
 def query_db(query, args=(), one=False):
     """Funkcja ułatwiająca odpytywanie bazy danych, źródło:
        http://flask.pocoo.org/docs/patterns/sqlite3/
@@ -42,3 +64,11 @@
         return True     # Jeśli mamy takiego użytkownika, i hasło się zgadza
     # Najwyraźniej jest taki użytkownik, ale hasło się nie zgadza
     return False
+
+def register_user(username, password):
+    """Funkcja rejestrująca nowego użytkownika w systemie.
+       @param username Nazwa nowego użytkownika
+       @param password Hasło w czystym tekście, funkcja sama
+                       zajmie się hashowaniem
+    """
+    return
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontend/mfrontend/templates/install_ok.html	Sun Feb 27 09:33:03 2011 +0100
@@ -0,0 +1,5 @@
+{% extends "layout.html" %}
+{% block body %}
+  <h2>Instalacja</h2>
+  <p>Instalacja przebiegła poprawnie.</p>
+{% endblock %} 
--- a/frontend/mfrontend/views/frontend.py	Tue Feb 22 20:38:51 2011 +0000
+++ b/frontend/mfrontend/views/frontend.py	Sun Feb 27 09:33:03 2011 +0100
@@ -1,7 +1,8 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 
-from flask import Module, render_template, request, url_for, escape, session, redirect, flash
+from flask import Module, render_template, request, url_for
+from flask import escape, session, redirect, flash, abort
 from mfrontend import db, utils
 frontend = Module(__name__)
 
@@ -9,6 +10,16 @@
 def index():
     return render_template('hello.html')
 
+@frontend.route('/install')
+def install():
+    """Instaluje aplikację, tworząc pustą bazę danych
+       według schematu.
+    """
+    if db.init_db():
+        return render_template('install_ok.html')
+    else:
+        abort(404)
+
 @frontend.route('/login', methods=['GET', 'POST'])
 def login():
     if request.method == 'POST':
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontend/schema.sql	Sun Feb 27 09:33:03 2011 +0100
@@ -0,0 +1,5 @@
+CREATE TABLE "users" (
+    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
+    "username" TEXT NOT NULL,
+    "password" TEXT NOT NULL
+);