Mercurial > kraina_muminkow
view frontend/mfrontend/db.py @ 7:d86794939fe4
Rejestracja użytkowników
author | Michał Rudowicz <michal.rudowicz@fl9.eu> |
---|---|
date | Mon, 28 Feb 2011 11:34:20 +0100 |
parents | 27d63cac76ac |
children | 9a0a9fa7f91d |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 from flask import g import ConfigParser from mfrontend import utils, exceptions from contextlib import closing import os.path config = ConfigParser.SafeConfigParser() config.read('config.ini') def connect_db(): """Funkcja łącząca się z bazą danych.""" g.db = sqlite3.connect(config.get('Basic','Database')) def disconnect_db(): """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/ """ cur = g.db.execute(query, args) rv = [dict((cur.description[idx][0], value) for idx, value in enumerate(row)) for row in cur.fetchall()] return (rv[0] if rv else None) if one else rv def user_can_login(username, password): """Funkcja sprawdzająca, czy podany użytkownik może sie zalogować po podaniu danego w argumencie hasła. @param username Nazwa użytkownika @param password Hasło @return Prawda, jeśli podane dane są akceptowalne, w przeciwnym razie fałsz. """ user = query_db('select * from users where username = ?', [username], one=True) if user is None: # Brak użytkownika o takiej nazwie return False if user['password'] == utils.hashPassword(password): if not user['activated']: raise exceptions.UserNotActivated() return True # Jeśli aktywny i hasło dobre, to wpuszczamy # 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 """ user = query_db('select * from users where username = ?;', [username], one=True) if user is not None: raise exceptions.UserExists hashedPassword = utils.hashPassword(password) # teraz właściwe dodawanie danych do bazy query_db('INSERT INTO users (username, password, activated) VALUES (?,?,0);', [username, hashedPassword]) g.db.commit()