Skip to content

Commit 0f2c6ce

Browse files
committed
v1.1.1
1 parent 34183a1 commit 0f2c6ce

13 files changed

Lines changed: 198 additions & 142 deletions

Python/web/DataCAndP/db_scripts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def add_links():
106106
close()
107107

108108

109-
def get_question_after(last_id=0, vict_id=1):
109+
def get_question_after(question_id, quiz_id):
110110
''' возвращает следующий вопрос после вопроса с переданным id
111111
для первого вопроса передаётся значение по умолчанию '''
112112
open()
@@ -116,7 +116,7 @@ def get_question_after(last_id=0, vict_id=1):
116116
WHERE quiz_content.question_id == question.id
117117
AND quiz_content.id > ? AND quiz_content.quiz_id == ?
118118
ORDER BY quiz_content.id '''
119-
cursor.execute(query, [last_id, vict_id] )
119+
cursor.execute(query, [question_id, quiz_id] )
120120

121121
result = cursor.fetchone()
122122
close()

Python/web/DataCAndP/quiz.py

Lines changed: 34 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,60 @@
11
from flask import Flask, session, request, redirect, url_for
22
from db_scripts import get_question_after, get_quises
3-
3+
44
def start_quis(quiz_id):
5-
'''создаёт нужные значения в словаре session'''
5+
"""создаёт нужные значения в словаре session"""
66
session['quiz'] = quiz_id
77
session['last_question'] = 0
8-
8+
99
def end_quiz():
1010
session.clear()
11-
12-
def quiz_form():
13-
''' функция получает список викторин из базы и формирует форму с выпадающим списком'''
14-
html_beg = '''<html><body><h2>Выберите викторину:</h2><form method="post" action="index"><select name="quiz">'''
15-
frm_submit = '''<p><input type="submit" value="Выбрать"> </p>'''
1611

17-
18-
html_end = '''</select>''' + frm_submit + '''</form></body></html>'''
19-
options = ''' '''
12+
def quiz_form():
13+
"""функция получает список викторин из базы и формирует форму с выпадающим списком"""
14+
html_beg = (
15+
'<html><body><h2>Выберите викторину:</h2>'
16+
'<form method="post" action="index"><select name="quiz">'
17+
)
18+
frm_submit = '<p><input type="submit" value="Выбрать"> </p>'
19+
html_end = '</select>' + frm_submit + '</form></body></html>'
20+
options = ''
2021
q_list = get_quises()
2122
for id, name in q_list:
22-
option_line = ('''<option value="''' +
23-
str(id) + '''">''' +
24-
str(name) + '''</option>
25-
''')
26-
options = options + option_line
23+
option_line = f'<option value="{id}">{name}</option>\n'
24+
options += option_line
2725
return html_beg + options + html_end
28-
26+
2927
def index():
30-
''' Первая страница: если пришли запросом GET, то выбрать викторину,
31-
если POST - то запомнить id викторины и отправлять на вопросы'''
28+
"""Первая страница: если пришли запросом GET, то выбрать викторину,
29+
если POST - то запомнить id викторины и отправлять на вопросы"""
3230
if request.method == 'GET':
33-
# викторина не выбрана, сбрасываем id викторины и показываем форму выбора
3431
start_quis(-1)
3532
return quiz_form()
3633
else:
37-
# получили дополнительные данные в запросе! Используем их:
38-
quest_id = request.form.get('quiz') # выбранный номер викторины
34+
quest_id = request.form.get('quiz') # выбранный номер викторины
3935
start_quis(quest_id)
4036
return redirect(url_for('test'))
41-
37+
4238
def test():
43-
'''возвращает страницу вопроса'''
44-
# что если пользователь без выбора викторины пошел сразу на адрес '/test'?
45-
if not ('quiz' in session) or int(session['quiz']) < 0:
39+
"""возвращает страницу вопроса"""
40+
if 'quiz' not in session or int(session['quiz']) < 0:
4641
return redirect(url_for('index'))
47-
else:
48-
# тут пока старая версия функции:
49-
result = get_question_after(session['last_question'], session['quiz'])
50-
if result is None or len(result) == 0:
51-
return redirect(url_for('result'))
52-
else:
53-
session['last_question'] = result[0]
54-
# если мы научили базу возвращать Row или dict, то надо писать не result[0], а result['id']
55-
return '<h1>' + str(session['quiz']) + '<br>' + str(result) + '</h1>'
56-
42+
result = get_question_after(session['last_question'], session['quiz'])
43+
if result is None or len(result) == 0:
44+
return redirect(url_for('result'))
45+
session['last_question'] = result[0]
46+
return f'<h1>{session["quiz"]}<br>{result}</h1>'
47+
5748
def result():
5849
end_quiz()
5950
return "that's all folks!"
60-
61-
# Создаём объект веб-приложения:
62-
app = Flask(__name__)
63-
app.add_url_rule('/', 'index', index) # создаёт правило для URL '/'
64-
app.add_url_rule('/index', 'index', index, methods=['post', 'get']) # правило для '/index'
65-
app.add_url_rule('/test', 'test', test) # создаёт правило для URL '/test'
66-
app.add_url_rule('/result', 'result', result) # создаёт правило для URL '/test'
67-
# Устанавливаем ключ шифрования:
51+
52+
app = Flask(__name__)
53+
app.add_url_rule('/', 'index', index)
54+
app.add_url_rule('/index', 'index', index, methods=['POST', 'GET'])
55+
app.add_url_rule('/test', 'test', test)
56+
app.add_url_rule('/result', 'result', result)
6857
app.config['SECRET_KEY'] = 'ThisIsSecretSecretSecretLife'
69-
58+
7059
if __name__ == "__main__":
71-
# Запускаем веб-сервер:
7260
app.run()

Python/web/SDB/A1.py

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,38 @@ def create():
55
cursor = conn.cursor()
66
cursor.execute('PRAGMA foreign_keys=on')
77

8-
cursor.execute('''
8+
cursor.execute(
9+
'''
910
CREATE TABLE IF NOT EXISTS quiz (
10-
id INTEGER PRIMARY KEY,
11-
name VARCHAR)
12-
''')
11+
id INTEGER PRIMARY KEY,
12+
name VARCHAR
13+
)
14+
'''
15+
)
1316

14-
cursor.execute('''
17+
cursor.execute(
18+
'''
1519
CREATE TABLE IF NOT EXISTS question (
16-
id INTEGER PRIMARY KEY,
17-
question VARCHAR,
18-
answer VARCHAR,
19-
wrong1 VARCHAR,
20-
wrong2 VARCHAR,
21-
wrong3 VARCHAR)
22-
''')
20+
id INTEGER PRIMARY KEY,
21+
question VARCHAR,
22+
answer VARCHAR,
23+
wrong1 VARCHAR,
24+
wrong2 VARCHAR,
25+
wrong3 VARCHAR
26+
)
27+
'''
28+
)
2329

24-
cursor.execute('''
30+
cursor.execute(
31+
'''
2532
CREATE TABLE IF NOT EXISTS quiz_content (
26-
id INTEGER PRIMARY KEY,
27-
quiz_id INTEGER,
28-
question_id INTEGER,
29-
FOREIGN KEY (quiz_id) REFERENCES quiz (id),
30-
FOREIGN KEY (question_id) REFERENCES question (id) )
31-
''')
33+
id INTEGER PRIMARY KEY,
34+
quiz_id INTEGER,
35+
question_id INTEGER,
36+
FOREIGN KEY (quiz_id) REFERENCES quiz (id),
37+
FOREIGN KEY (question_id) REFERENCES question (id)
38+
)
39+
'''
40+
)
3241

3342
conn.close()

Python/web/SDB/A2.py

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,43 @@
22

33
def add_questions():
44
questions = [
5-
('Сколько месяцев в году имеют 28 дней?', 'Все', 'Один', 'Ни одного', 'Два'),
6-
('Каким станет зелёный утёс, если упадёт в Красное море?', 'Мокрым', 'Красным', 'Не изменится', 'Фиолетовым'),
7-
('Какой рукой лучше размешивать чай?', 'Ложкой', 'Правой', 'Левой', 'Любой'),
8-
('Что не имеет длины, глубины, ширины, высоты, а можно измерить?', 'Время', 'Глупость', 'Море', 'Воздух'),
9-
('Когда сетью можно вытянуть воду?', 'Когда вода замёрзла', 'Когда нет рыбы', 'Когда уплыла золотая рыбка', 'Когда пусто'),
10-
('Что больше слона и ничего не весит?', 'Тень слона', 'Воздушный шар', 'Парашют', 'Облако')
5+
(
6+
'Сколько месяцев в году имеют 28 дней?', 'Все', 'Один',
7+
'Ни одного', 'Два'
8+
),
9+
(
10+
'Каким станет зелёный утёс, если упадёт в Красное море?', 'Мокрым',
11+
'Красным', 'Не изменится', 'Фиолетовым'
12+
),
13+
(
14+
'Какой рукой лучше размешивать чай?', 'Ложкой', 'Правой',
15+
'Левой', 'Любой'
16+
),
17+
(
18+
'Что не имеет длины, глубины, ширины, высоты, а можно измерить?',
19+
'Время', 'Глупость', 'Море', 'Воздух'
20+
),
21+
(
22+
'Когда сетью можно вытянуть воду?', 'Когда вода замёрзла',
23+
'Когда нет рыбы', 'Когда уплыла золотая рыбка', 'Когда пусто'
24+
),
25+
(
26+
'Что больше слона и ничего не весит?', 'Тень слона',
27+
'Воздушный шар', 'Парашют', 'Облако'
28+
)
1129
]
1230
conn = sqlite3.connect('quiz.db')
1331
cursor = conn.cursor()
14-
cursor.executemany('''INSERT INTO question (question, answer, wrong1, wrong2, wrong3) VALUES (?,?,?,?,?)''', questions)
32+
cursor.executemany(
33+
'''
34+
INSERT INTO question (question, answer, wrong1, wrong2, wrong3)
35+
VALUES (?, ?, ?, ?, ?)
36+
''',
37+
questions
38+
)
1539
conn.commit()
1640
conn.close()
1741

18-
1942
def add_quiz():
2043
quizes = [
2144
('Своя игра', ),
@@ -24,21 +47,25 @@ def add_quiz():
2447
]
2548
conn = sqlite3.connect('quiz.db')
2649
cursor = conn.cursor()
27-
cursor.executemany('''INSERT INTO quiz (name) VALUES (?)''', quizes)
50+
cursor.executemany(
51+
'''
52+
INSERT INTO quiz (name) VALUES (?)
53+
''',
54+
quizes
55+
)
2856
conn.commit()
2957
conn.close()
3058

31-
3259
def add_links():
3360
conn = sqlite3.connect('quiz.db')
3461
cursor = conn.cursor()
3562
cursor.execute('PRAGMA foreign_keys=on')
36-
query = "INSERT INTO quiz_content (quiz_id, question_id) VALUES (?,?)"
37-
answer = input("Добавить связь (y / n)?")
63+
query = "INSERT INTO quiz_content (quiz_id, question_id) VALUES (?, ?)"
64+
answer = input("Добавить связь (y / n)? ")
3865
while answer != 'n':
3966
quiz_id = int(input("id викторины: "))
4067
question_id = int(input("id вопроса: "))
4168
cursor.execute(query, [quiz_id, question_id])
4269
conn.commit()
43-
answer = input("Добавить связь (y / n)?")
70+
answer = input("Добавить связь (y / n)? ")
4471
conn.close()

Python/web/SDB/A3.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import sqlite3
22

33
def get_question_after(question_id=0, quiz_id=1):
4-
'''
5-
возвращает следующий вопрос после вопроса с переданным id
6-
для первого вопроса передаётся значение по умолчанию
7-
'''
84
conn = sqlite3.connect('quiz.db')
95
cursor = conn.cursor()
10-
query = '''
11-
SELECT quiz_content.id, question.question, question.answer, question.wrong1, question.wrong2, question.wrong3
12-
FROM question, quiz_content
13-
WHERE quiz_content.question_id == question.id
14-
AND quiz_content.id > ? AND quiz_content.quiz_id == ?
15-
ORDER BY quiz_content.id
16-
'''
6+
query = (
7+
'''
8+
SELECT quiz_content.id, question.question, question.answer,
9+
question.wrong1, question.wrong2, question.wrong3
10+
FROM question, quiz_content
11+
WHERE quiz_content.question_id == question.id
12+
AND quiz_content.id > ?
13+
AND quiz_content.quiz_id == ?
14+
ORDER BY quiz_content.id
15+
'''
16+
)
1717
cursor.execute(query, [question_id, quiz_id])
1818
result = cursor.fetchone()
1919
conn.close()

Python/web/Sessions/Counter.py

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
from flask import Flask, session
2-
def index():
3-
""" При заходе на сайт обнуляем счётчик и даём ссылку на страницу с изменением счётчика """
4-
session['counter'] = 0
5-
return '<a href="/counter">Дальше</a>'
6-
72

8-
def counter():
9-
""" Увеличиваем счётчик и даём ссылку на страницу с изменением счётчика """
10-
session['counter'] += 1
11-
return '<h1>' + str(session['counter']) + '</h1>'
12-
# Создаём объект веб-приложения:
13-
app = Flask(__name__)
14-
app.config['SECRET_KEY'] = 'VeryStrongKey'
15-
app.add_url_rule('/', 'index', index) # создаёт правило для URL '/':
16-
# запускать функцию index и возвращать её значение.
17-
app.add_url_rule('/counter', 'counter', counter) # создаёт правило для URL 'counter/'
3+
app = Flask(__name__)
4+
app.config['SECRET_KEY'] = 'secret'
185

19-
20-
if __name__ == '__main__':
21-
# Запускаем веб-сервер:
22-
app.run()
6+
@app.route('/')
7+
def index():
8+
if 'counter' not in session:
9+
session['counter'] = 0
10+
session['counter'] += 1
11+
return f"Счётчик: {session['counter']}"

Python/web/Sessions/quiz.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,27 @@
22
from flask import Flask, session, redirect, url_for
33
from db_scripts import get_question_after
44

5+
app = Flask(__name__)
6+
app.config['SECRET_KEY'] = 'ThisIsSecretSecretSecretLife'
7+
8+
@app.route('/')
59
def index():
610
max_quiz = 3
7-
# или если ученик написал get_quiz_count(), то можно её импортировать и указать:
8-
# max_quiz = get_quiz_count[0]
911
session['quiz'] = randint(1, max_quiz)
10-
# или если ученик написал get_random_quiz_id(), то можно её импортировать и указать:
11-
# session['quiz'] = get_random_quiz_id()
1212
session['last_question'] = 0
1313
return '<a href="/test">Тест</a>'
1414

15+
@app.route('/test')
1516
def test():
1617
result = get_question_after(session['last_question'], session['quiz'])
1718
if result is None or len(result) == 0:
1819
return redirect(url_for('result'))
19-
else:
20-
session['last_question'] = result[0]
21-
# если мы научили базу возвращать Row или dict, то надо писать не result[0], а result['id']
22-
return '<h1>' + str(session['quiz']) + '<br>' + str(result) + '</h1>'
20+
session['last_question'] = result[0]
21+
return f"<h1>{session['quiz']}<br>{result}</h1>"
2322

23+
@app.route('/result')
2424
def result():
2525
return "that's all folks!"
2626

27-
# Создаём объект веб-приложения:
28-
app = Flask(__name__)
29-
app.add_url_rule('/', 'index', index) # создаёт правило для URL '/'
30-
app.add_url_rule('/test', 'test', test) # создаёт правило для URL '/test'
31-
app.add_url_rule('/result', 'result', result) # создаёт правило для URL '/result'
32-
# Устанавливаем ключ шифрования:
33-
app.config['SECRET_KEY'] = 'ThisIsSecretSecretSecretLife'
34-
3527
if __name__ == '__main__':
36-
# Запускаем веб-сервер:
3728
app.run()

0 commit comments

Comments
 (0)