Merge branch 'Auth'

This commit is contained in:
Anton Kamalov
2024-10-22 21:48:58 +03:00
10 changed files with 99 additions and 63 deletions

30
App/Auth/auth.py Normal file
View File

@@ -0,0 +1,30 @@
from flask import request, Blueprint, render_template, session, redirect, url_for
from os import path
from .auth_route import route
from Database.sql_provider import SQLProvider
import json
sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql'))
auth_bp = Blueprint('auth_bp', __name__, template_folder='templates')
with open(path.join(path.dirname(__file__), 'config.json')) as f:
config = json.load(f)
@auth_bp.route('/', methods=['GET', 'POST'])
def auth():
if request.method == 'GET':
return render_template('auth.html')
else:
data = request.form.to_dict()
print(data)
auth_data = route(config, data, sql_provider, 'auth.sql')
if auth_data.status:
session.update({
'user_id': auth_data.result[0]['user_ID'],
'role': auth_data.result[0]['role'],
'db_config': config,
'permanent': True
})
return redirect(url_for('index'))
else:
return auth_data.error_message

View File

@@ -1,31 +1,15 @@
from flask import request, Blueprint, render_template, session, redirect, url_for
from os import path
from Database.sql_provider import SQLProvider
from dataclasses import dataclass
from Database.select import select_list
import json
@dataclass
class InfoRespronse:
result: tuple
error_message: str
status: bool
sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql'))
auth_bp = Blueprint('auth_bp', __name__, template_folder='templates')
with open(path.join(path.dirname(__file__), 'config.json')) as f:
config = json.load(f)
@auth_bp.route('/', methods=['GET', 'POST'])
def auth():
if request.method == 'GET':
return render_template('auth.html')
else:
data = request.form.to_dict()
print(data)
result = select_list(config, sql_provider.get('auth.sql', data))
if result[1]:
session.update({
'user_id': result[1][0]['user_ID'],
'role': result[1][0]['role'],
'db_config': config,
'permanent': True
})
return redirect(url_for('index'))
return 'Неправильный логин или пароль'
def route(db_config, input_data, sql_provider, name) -> InfoRespronse:
_sql = sql_provider.get(name, input_data)
print("sql = ", _sql)
result = select_list(db_config, _sql)
if result is None:
return InfoRespronse(result, error_message = 'Ошибка на этапе авторизации', status=False)
return InfoRespronse(result, error_message='', status=True)

View File

@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Authorization</title>
<title>Авторизация</title>
</head>
<body>
<form action="" method="post">

View File

@@ -1,6 +1,6 @@
from .DBconnect import DBContextManager
def select_list(db_config, sql):
def select_list(db_config, sql) -> list:
with DBContextManager(db_config) as cursor:
if cursor is None:
raise ValueError("Cursor not created")
@@ -9,4 +9,4 @@ def select_list(db_config, sql):
result = cursor.fetchall()
schema = [item[0] for item in cursor.description]
lst = [dict(zip(schema, row)) for row in result]
return schema, lst
return lst

View File

@@ -1,19 +0,0 @@
from flask import request, Blueprint, render_template, session
from os import path
from Database.sql_provider import SQLProvider
from Database.select import select_list
from checker import check_auth
sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql'))
requests_bp = Blueprint('requests_bp', __name__, template_folder='templates')
@requests_bp.route('/', methods=['GET', 'POST'])
@check_auth
def sklad_zapros():
if request.method == 'GET':
result = select_list(session['db_config'], sql_provider.get('zagotovki.sql', {}))
return render_template('sklad_zapros.html', materials=result[1], status=True)
else:
name = dict(request.form)
result = select_list(session['db_config'], sql_provider.get('zapros1.sql', name))
return render_template('sklad_zapros.html', materials=result[1], result_table=result)

26
App/Queries/requests.py Normal file
View File

@@ -0,0 +1,26 @@
from flask import request, Blueprint, render_template, session
from os import path
from Database.sql_provider import SQLProvider
from checker import check_auth
from .requests_route import route
sql_provider = SQLProvider(path.join(path.dirname(__file__), 'sql'))
requests_bp = Blueprint('requests_bp', __name__, template_folder='templates')
@requests_bp.route('/', methods=['GET', 'POST'])
@check_auth
def sklad_zapros():
if request.method == 'GET':
zagotovki = route(session['db_config'], {}, sql_provider, 'zagotovki.sql')
if zagotovki.status:
return render_template('sklad_zapros.html', materials=zagotovki.result, status=True)
else:
return zagotovki.error_message
else:
material = dict(request.form)
zagotovki = route(session['db_config'], material, sql_provider, 'zapros1.sql')
if zagotovki.status:
print(zagotovki.result)
return render_template('sklad_zapros.html', items=zagotovki.result)
else:
return zagotovki.error_message

View File

@@ -0,0 +1,15 @@
from dataclasses import dataclass
from Database.select import select_list
@dataclass
class InfoRespronse:
result: tuple
error_message: str
status: bool
def route(db_config, input_data, sql_provider, name) -> InfoRespronse:
_sql = sql_provider.get(name, input_data)
print("sql = ", _sql)
result = select_list(db_config, _sql)
if result is None:
return InfoRespronse(result, error_message = 'Ошибка в подключении к базе данных', status=False)
return InfoRespronse(result, error_message='', status=True)

View File

@@ -2,12 +2,12 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<title>Заготовки на складе</title>
</head>
<body>
<!-- Input -->
<h1>Hello World</h1>
{% if status %}
<!-- Input -->
<h1>Выберите материал</h1>
<form action="" method="post">
<select name="material">
{% for item in materials %}
@@ -18,14 +18,15 @@
</form>
{% else %}
<!-- Output -->
{% if result_table %}
<h1>Заготовки на складе</h1>
<table>
<tr>
{% for item in result_table[0] %}
<th>{{ item }}</th>
{% endfor %}
<th>Материал</th>
<th>Вес</th>
<th>Цена</th>
<th>Количество</th>
</tr>
{% for item in result_table[1] %}
{% for item in items %}
<tr>
<td>{{ item['material'] }}</td>
<td>{{ item['weight'] }}</td>
@@ -35,7 +36,6 @@
{% endfor %}
</table>
{% endif %}
{% endif %}
</body>
</html>

View File

@@ -1,6 +1,6 @@
from flask import Flask, render_template, session
from Queries.req import requests_bp
from Auth.auth_route import auth_bp
from Queries.requests import requests_bp
from Auth.auth import auth_bp
from checker import check_auth
app = Flask(__name__)

View File

@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<title>Привет мир!</title>
</head>
<body>
<h1>Hello World</h1>