# HG changeset patch # User Michał Rudowicz # Date 1298795583 -3600 # Node ID 3ba60dfc1d6457419a1141fdcd841ada8bdd7a59 # Parent cf786ee26a2246c393a40187c724837ed93143bb Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu diff -r cf786ee26a22 -r 3ba60dfc1d64 frontend/mfrontend/db.py --- 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 diff -r cf786ee26a22 -r 3ba60dfc1d64 frontend/mfrontend/templates/install_ok.html --- /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 %} +

Instalacja

+

Instalacja przebiegła poprawnie.

+{% endblock %} diff -r cf786ee26a22 -r 3ba60dfc1d64 frontend/mfrontend/views/frontend.py --- 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': diff -r cf786ee26a22 -r 3ba60dfc1d64 frontend/schema.sql --- /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 +);