Система учета заявок - это эффективное средство автоматизации процесса обработки заявок, что позволит снизить нагрузку сотрудников предприятия и автоматизировать их труд, а также вести контроль за выполнением процесса от момента подачи заявления, до получения заявителем документов. В информационную систему встроены модули администрирования и шифрования данных.
В нашей школе в прошлом году начался проект «Комфортная школа».
Одним из её идей была создание и автоматизация возможности оставлять свои идеи и предложения родителям, детям и сотрудникам школы, дабы улучшить что- либо в школе. И для этого решено было создать сайт, на котором эта идея и будет реализована.
Вложение | Размер |
---|---|
kelehsae_i_sistema_idets_i_predlozheniy.docx | 831.42 КБ |
prezintatsiya_sistema_idey_i_predlozheniy._sayt_1.pptx | 572 КБ |
КОНКУРС НАУЧНО-ТЕХНИЧЕСКОГО ТВОРЧЕСТВА
«ДОРОГА В БУДУЩЕЕ» 2023-2024
секция информатика
на тему: «Система идей и предложений».
Выполнил:
Келехсаев Илья Константинович,
10 кл МБОУ СОШ №22, с/п Ц. «Интеллект»
Научный руководитель:
Подова Анна Николаевна,
учитель информатики МБОУ СОШ №22,
ПДО с/п Ц. «Интеллект»
Владикавказ, 2023-2024
СОДЕРЖАНИЕ
Система идей и предложений
Работу выполнил Келехсаев Илья Константинович
Ученик 10 класс МБОУ СОШ №22, с/п Ц. «Интеллект»
Организовать работу с базой данных, спроектировать класс пользователя который в зависимости от того, является ли пользователь новым, создаёт новую строчку в базе данных иначе открывает строчку с пользователем, что в дальнейшем позволяет программе взаимодействовать с этим пользователем.
Реализовано добавление новых идей в базу данных, а так же вывод всех идей на отдельной страничке.
Загрузить сайт на хостинг, и распространить ссылку по всей школе, чтоб каждый перейдя по ссылке мог в любой момент, и подать свою идею.
Усовершенствовать структуру сайта, сделать его более удобным в использовании.
Система учета заявок - это эффективное средство автоматизации процесса обработки заявок, что позволит снизить нагрузку сотрудников предприятия и автоматизировать их труд, а также вести контроль за выполнением процесса от момента подачи заявления, до получения заявителем документов. В информационную систему встроены модули администрирования и шифрования данных.
В нашей школе в прошлом году начался проект «Комфортная школа».
Одним из её идей была создание и автоматизация возможности оставлять свои идеи и предложения родителям, детям и сотрудникам школы, дабы улучшить что- либо в школе. И для этого решено было создать сайт, на котором эта идея и будет реализована.
Содержимое main.py
import sqlite3
import smtplib
from test import my_email, my_password, filtering
from flask import Flask, render_template, request, redirect, url_for
from email.message import EmailMessage
app = Flask(__name__)
class User:
def __init__(self, username, password, new_user=False):
self.con = sqlite3.connect("all_tables.sqlite")
self.error = ""
self.adm = False
if not new_user:
up = self.con.cursor().execute(
f"""SELECT user_id, password FROM users WHERE username='{username}'""").fetchone()
if up:
if password == up[1]:
self.user_id = up[0]
self.username = username
self.password = up[1]
if self.con.cursor().execute(f"""SELECT user_id FROM admins WHERE user_id='{up[0]}'""").fetchone():
self.adm = True
else:
self.error = "Неверный пароль"
else:
self.error = f"Нет пользователя '{username}'"
else:
up = self.con.cursor().execute(
f"""SELECT user_id, password FROM users WHERE username='{username}'""").fetchone()
if not up:
self.con.cursor().execute(
f"""INSERT INTO users(username, password) VALUES ('{username}', '{password}')""")
self.con.commit()
v = self.con.cursor().execute(f"""SELECT user_id FROM users WHERE username='{username}'""").fetchone()
self.user_id = v[0]
self.username = username
self.password = password
else:
self.error = f"Пользователь '{username}' уже существует"
class Idea:
def __init__(self, idea_, user, name, email):
self.con = sqlite3.connect("all_tables.sqlite")
cur = self.con.cursor()
cur.execute(
f"""INSERT OR REPLACE INTO ideas(idea_text, username, name, email) VALUES ('{idea_}', '{user}', '{name}', '{email}')""")
self.con.commit()
@app.route('/', methods=["POST", "GET"])
def login():
error = ""
if request.method == "POST":
user_login = request.form["user_login"]
password = request.form["password"]
if user_login and password:
if request.form["btn-log-reg"] == "Вход":
us = User(user_login, password)
if us.error == "":
return redirect(f"/idea/{us.user_id}/")
else:
return render_template("login_form.html", error=us.error)
else:
us = User(user_login, password, new_user=True)
if us.error == "":
return redirect(f"/idea/{us.user_id}/")
else:
return render_template("login_form.html", error=us.error)
else:
return render_template("login_form.html", error="Логин и пароль не могут быть пустыми")
else:
return render_template("login_form.html", error="")
@app.route('/idea/
def idea(user_id):
s = sqlite3.connect("all_tables.sqlite").cursor().execute(
f"""SELECT username, password FROM users WHERE user_id = {user_id}""").fetchone()
us = User(s[0], s[1])
if request.method == "POST":
name = request.form["name"]
email_address = request.form["email_address"]
idea_text = request.form["idea_text"]
print(filtering(idea_text))
if name and email_address and idea_text and filtering(idea_text):
Idea(idea_text, us.username, name, email_address)
smtpObj = smtplib.SMTP(host='smtp.gmail.com', port=587)
smtpObj.starttls()
smtpObj.login(my_email, my_password)
mess = f"""
{idea_text} Добавлена новая идея!
Пользователь: {name}
С почтой: {email_address}
Оставил новую идею:
"""
msg = EmailMessage()
msg["From"] = my_email
msg["To"] = [my_email, "apodova@mail.ru"]
msg["Subject"] = "Добавили новую идею!"
msg.set_content(mess, subtype="html")
smtpObj.send_message(msg)
smtpObj.quit()
return redirect(f"/all_ideas/{us.user_id}/")
else:
return render_template("change.html", us=us)
else:
return render_template("change.html", us=us)
@app.route("/all_ideas/
def all_ideas(user_id):
s = sqlite3.connect("all_tables.sqlite").cursor().execute(
f"""SELECT username, password FROM users WHERE user_id = {user_id}""").fetchone()
us = User(s[0], s[1])
ideas = sqlite3.connect("all_tables.sqlite").cursor().execute(
f"""SELECT idea_id, idea_text, username, name FROM ideas""").fetchall()[::-1]
if request.method == "POST":
if request.form["answer"][:3] == "del":
id = int(request.form["answer"][3:])
con = sqlite3.connect("all_tables.sqlite")
con.cursor().execute(f"""DELETE FROM ideas WHERE idea_id = {id}""")
con.commit()
else:
id = int(request.form["answer"])
info = sqlite3.connect("all_tables.sqlite").cursor().execute(
f"""SELECT idea_text, name, email FROM ideas WHERE idea_id = {id}""").fetchone()
smtpObj = smtplib.SMTP(host='smtp.gmail.com', port=587)
smtpObj.starttls()
smtpObj.login(my_email, my_password)
mess = f"""
Пришёл ответ. {request.form[f"ans{id}"]} Если данный ответ как либо задел вас, то прошу напишите и об этом, нас интересует удовлетворённость нашим обслуживанием Ваша идея не осталась без внимания!
Уважаемый(-ая) {info[1]}
На вашу идею:
{info[0]}
Ответ:
"""
msg = EmailMessage()
msg["From"] = my_email
msg["To"] = info[2]
msg["Subject"] = "Ваша идея не осталась без внимания!"
msg.set_content(mess, subtype="html")
smtpObj.send_message(msg)
smtpObj.quit()
return render_template("all_ideas.html", ideas=ideas, us=us)
else:
return render_template("all_ideas.html", ideas=ideas, us=us)
@app.route("/user_ideas/
def user_ideas(user_id):
s = sqlite3.connect("all_tables.sqlite").cursor().execute(
f"""SELECT username, password FROM users WHERE user_id = {user_id}""").fetchone()
us = User(s[0], s[1])
ideas = sqlite3.connect("all_tables.sqlite").cursor().execute(
f"""SELECT idea_id, idea_text, username, name FROM ideas WHERE username = (SELECT username FROM users WHERE user_id = {user_id})""").fetchall()[
::-1]
return render_template("user_ideas.html", ideas=ideas, us=us)
if __name__ == '__main__':
app.run(host="localhost", port=11111, debug=True)
Содержимое all_ideas.html
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous">
src="{{ url_for('static', filename='logo.png') }}" href="https://s22.amsvlad.ru/" height="40px" width="45px"> МБОУ СОШ №22
function inp(id) {
var a = document.getElementById(id);
a.parentNode.removeChild(a);
var par = document.getElementById("par" + id);
var input = document.createElement("input");
input.type = "text";
input.className = "form-control";
input.autofocus = true;
input.required = true;
input.name = "ans" + id;
input.id = "inp" + id;
input.placeholder = "Введите ваш ответ!"
par.appendChild(input);
var btn = document.createElement("button");
btn.className = "btn btn-warning";
btn.textContent = "Отправить";
btn.value = id;
btn.name = "answer";
var ot = document.getElementById("ot" + id)
ot.appendChild(btn);
}
Все идеи и предложения
{% for idea in ideas%}
{% if us.adm %} {% endif %} {{ idea[3] }}
{{ idea[1] }}
{% endfor %}
Содержимое change.html
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous">
autofocus="" required=""> placeholder="Введите адрес" required=""> placeholder="Введите идею" required="">
Содержимое login_form.html
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
.password {
position: relative;
}
.password-control {
position: absolute;
top: 10px;
right: 10px;
display: inline-block;
width: 20px;
height: 20px;
background: url(https://snipp.ru/demo/495/view.svg) 0 0 no-repeat;
}
.password-control.view {
background: url(https://snipp.ru/demo/495/no-view.svg) 0 0 no-repeat;
}
function show_hide_password(target){
var input = document.getElementById('password-input');
if (input.getAttribute('type') == 'password') {
target.classList.add('view');
input.setAttribute('type', 'text');
} else {
target.classList.remove('view');
input.setAttribute('type', 'password');
}
return false;
}
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous">
Содержимое user_ideas.html
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous">
src="{{ url_for('static', filename='logo.png') }}" href="https://s22.amsvlad.ru/" height="40px" width="45px"> МБОУ СОШ №22
Ваши идеи и предложения
{% for idea in ideas%}
{{ idea[3] }}
{{ idea[1] }}
{% endfor %}
СПИСОК ЛИТЕРАТУРЫ
Слайд 1
Система Идей И Предложений Автор: Келехсаев Илья Ученик 10класса МБОУ СОШ №22, ДЦО “Интеллек” Преподаватель: Подова Анна НиколаевнаСлайд 2
Цели Создать онлайн сервис по подаче идей и заявок Изучить Python Изучить библиотеку Flask Изучить работу с базами данных через библиотеку SQLite Создать сайт через Flask Создать базу данных и использовать её на сайте Задачи
Слайд 3
Демонстрация mbousosh22.pythonanywhere.com
Слайд 4
Схема Базы Данных
Слайд 5
Выводы: Я сам скажу^^! не позволю бездушной машине говорить за меня….
Слайд 6
Спасибо за внимание!
Большое - маленькое
Госпожа Метелица
Колумбово яйцо
Можно от Солнца уйти...
Убунту: я существую, потому что мы существуем