Mercurial > kraina_muminkow
annotate 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 |
rev | line source |
---|---|
1 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 import sqlite3 | |
5 from flask import g | |
6 import ConfigParser | |
6
27d63cac76ac
Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
5
diff
changeset
|
7 from mfrontend import utils, exceptions |
5
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
8 from contextlib import closing |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
9 import os.path |
1 | 10 |
11 config = ConfigParser.SafeConfigParser() | |
12 config.read('config.ini') | |
13 | |
14 def connect_db(): | |
15 """Funkcja łącząca się z bazą danych.""" | |
16 g.db = sqlite3.connect(config.get('Basic','Database')) | |
17 | |
18 def disconnect_db(): | |
19 """Funkcja zamykająca połączenie z bazą danych""" | |
20 g.db.close() | |
21 | |
5
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
22 def init_db(): |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
23 """Funkcja przeprowadzająca inicjalizację bazy danych zgodnie |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
24 z plikiem schema.sql. Na podstawie kodu ze strony |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
25 http://flask.pocoo.org/docs/patterns/sqlite3/#initial-schemas |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
26 Instalacja powiedzie się tylko wtedy, gdy w obecnym katalogu |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
27 nie istnieje plik '.installed'. Plik taki jest tworzony |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
28 po każdej instalacji, aby zapobiec operacjom na |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
29 istniejących bazach. |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
30 @return True, jeśli instalacja została wykonana, |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
31 False, jeśli plik '.installed' istnieje. |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
32 """ |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
33 if not os.path.isfile('.installed'): |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
34 with open('schema.sql', 'r') as f: |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
35 g.db.cursor().executescript(f.read()) |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
36 g.db.commit() |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
37 open('.installed', 'w').close() |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
38 return True |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
39 else: |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
40 return False |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
41 |
1 | 42 def query_db(query, args=(), one=False): |
43 """Funkcja ułatwiająca odpytywanie bazy danych, źródło: | |
44 http://flask.pocoo.org/docs/patterns/sqlite3/ | |
45 """ | |
46 cur = g.db.execute(query, args) | |
47 rv = [dict((cur.description[idx][0], value) | |
48 for idx, value in enumerate(row)) for row in cur.fetchall()] | |
49 return (rv[0] if rv else None) if one else rv | |
4 | 50 |
51 def user_can_login(username, password): | |
52 """Funkcja sprawdzająca, czy podany użytkownik może sie zalogować | |
53 po podaniu danego w argumencie hasła. | |
54 @param username Nazwa użytkownika | |
55 @param password Hasło | |
56 @return Prawda, jeśli podane dane są akceptowalne, w przeciwnym | |
57 razie fałsz. | |
58 """ | |
59 user = query_db('select * from users where username = ?', | |
60 [username], one=True) | |
61 if user is None: # Brak użytkownika o takiej nazwie | |
62 return False | |
63 if user['password'] == utils.hashPassword(password): | |
6
27d63cac76ac
Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
5
diff
changeset
|
64 if not user['activated']: |
27d63cac76ac
Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
5
diff
changeset
|
65 raise exceptions.UserNotActivated() |
27d63cac76ac
Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
5
diff
changeset
|
66 return True # Jeśli aktywny i hasło dobre, to wpuszczamy |
4 | 67 # Najwyraźniej jest taki użytkownik, ale hasło się nie zgadza |
68 return False | |
5
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
69 |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
70 def register_user(username, password): |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
71 """Funkcja rejestrująca nowego użytkownika w systemie. |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
72 @param username Nazwa nowego użytkownika |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
73 @param password Hasło w czystym tekście, funkcja sama |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
74 zajmie się hashowaniem |
3ba60dfc1d64
Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
4
diff
changeset
|
75 """ |
7
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
76 user = query_db('select * from users where username = ?;', |
6
27d63cac76ac
Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
5
diff
changeset
|
77 [username], one=True) |
27d63cac76ac
Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
5
diff
changeset
|
78 if user is not None: |
7
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
79 raise exceptions.UserExists |
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
80 hashedPassword = utils.hashPassword(password) |
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
81 # teraz właściwe dodawanie danych do bazy |
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
82 query_db('INSERT INTO users (username, password, activated) VALUES (?,?,0);', |
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
83 [username, hashedPassword]) |
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
84 g.db.commit() |
d86794939fe4
Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents:
6
diff
changeset
|
85 |