Compare commits

...
This repository has been archived on 2024-05-21. You can view files and clone it, but cannot push or open issues or pull requests.

1 Commits

Author SHA1 Message Date
vodyana 17c2cad47a Lab_6 2024-05-26 18:53:58 +03:00
19 changed files with 185 additions and 27 deletions

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

0
.idea/edu-dis-labs.iml Normal file
View File

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/edu-dis-labs.iml" filepath="$PROJECT_DIR$/.idea/edu-dis-labs.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -67,10 +67,6 @@ module.exports = {
path:"/conclusion/"
},
{
title: 'API',
path:"/api/"
}
],
sidebarDepth: 2,

View File

@ -6,24 +6,12 @@ actionLink: /intro/
footer: "ECL 2.0 Licensed | Copyright © 2024 [Your Name]"
---
**Виконали:**
**Виконала:**
*студенти 2-го курсу, групи ІО-23:*
*Олег ШМУЛЯР [shmuliar1@ukr.net, [@dmytrofiot23](https://t.me/dmytrofiot23)]*
*Андрій БОДНАР [bodnarandrew123@gmail.com, [@andrux4](https://t.me/andrux4)]*
*Андрій ШВЕД [andreyfrog26@gmail.com, [@Rhinemann](https://t.me/Rhinemann)]*
*Євгеній ГОЛОВАТЕНКО [ievgeniigol@gmail.com, [@yevholova](https://t.me/yevholova)]*
*студентка 2-го курсу, групи ІО-23:*
*Вікторія ВОДЯНА [vodyanayaviktoria@gmail.com, [@victoriavodyana](https://t.me/victoriavodyana)]*
*Михайло КОРБУТ [korbutmykhailo@gmail.com, [@misha1tigr](https://t.me/misha1tigr)]*
*Олександр ГУРАНЕЦЬ [bacant150@gmail.com, [@Bacant150](https://t.me/Bacant150)]*
**Керівник**

View File

@ -1,12 +1,9 @@
# Висновки
У висновках наводять оцінку отриманих результатів, можливі галузі його використання. Висновки повинні містити в собі коротку узагальнену оцінку результатів розробки, у
тому числі і з погляду на їх технічно-економічну ефективність. Необхідно порівняти
отримані результати усіх характеристик об’єкта проєктування із завданням і з основними показниками сучасних аналогічних об’єктів.
У цьому проєкті була використана локальна база даних для зберігання інформації. Розроблена серверна частина надає RESTful-інтерфейс для доступу до цієї бази даних. Цей інтерфейс може використовуватися для взаємодії з таблицею питань (survey), що дозволяє здійснювати операції читання, запису, оновлення та видалення даних через HTTP-запити. Такий підхід забезпечує зручний та ефективний спосіб взаємодії з базою даних і відкриває широкі можливості для розвитку та розширення функціональності системи.
Необхідно вказати яке нове технічне рішення покладене в основу проєкту і у чому її
переваги, що нового було запропоновано самим студентом.
На базі отриманих висновків можуть надаватися рекомендації по використанню розробки. Вони повинні
мати конкретний характер і бути цілком підтверджені проєктом.
Технічне рішення, що покладене в основу проєкту, полягає у використанні мови програмування Python та веб-фреймворку Flask для створення RESTful сервісу. Це дозволило забезпечити швидку реалізацію системи та забезпечити її продуктивність та масштабованість.
Отримана система дозволяє автоматизувати процес збору та аналізу відповідей, що значно знижує час та ресурси, необхідні для проведення таких опитувань. Завдяки використанню сучасних технологій, таких як Flask, система має високу продуктивність та може легко масштабуватися відповідно до потреб користувачів.

View File

@ -111,3 +111,66 @@ SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
```
## RESTfull-сервіс для керування опитуваннями
Код серверу (Python, Flask) для таблиці "survey":
```from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234@localhost/odb'
db = SQLAlchemy(app)
class Survey(db.Model):
id = db.Column(db.Integer, primary_key=True)
isPaused = db.Column(db.Boolean)
isNamed = db.Column(db.Boolean)
name = db.Column(db.String(255))
duration = db.Column(db.Integer)
account_id = db.Column(db.Integer)
def __repr__(self):
return f"<Survey {self.name}>"
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
@app.route("/api/survey", methods=["GET", "POST"])
def api_survey():
if request.method == "GET":
surveys = Survey.query.all()
return jsonify([survey.as_dict() for survey in surveys])
elif request.method == "POST":
data = request.json
new_survey = Survey(isPaused=data['isPaused'], isNamed=data['isNamed'], name=data['name'],
duration=data['duration'], account_id=data['account_id'])
db.session.add(new_survey)
db.session.commit()
return jsonify({'success': True}), 201
@app.route("/api/survey/<int:survey_id>", methods=["GET", "PUT", "DELETE"])
def api_survey_numbered(survey_id):
survey = Survey.query.get_or_404(survey_id)
if request.method == "GET":
return jsonify(survey.as_dict())
elif request.method == "PUT":
data = request.json
survey.isPaused = data['isPaused']
survey.isNamed = data['isNamed']
survey.name = data['name']
survey.duration = data['duration']
survey.account_id = data['account_id']
db.session.commit()
return jsonify({'success': True})
elif request.method == "DELETE":
db.session.delete(survey)
db.session.commit()
return jsonify({'success': True})
if __name__ == '__main__':
app.run(debug=True)
'''

View File

@ -1,4 +1,34 @@
# Тестування працездатності системи
*В цьому розділі необхідно вказати засоби тестування, навести вихідні коди тестів та результати тестування.*
Тестування працездатності системи
Для тестування системи використовувся додаток Postman
Запуск сервера:
![alt text](image.png)
Метод POST
POST Survey
Запит та відповідь:
![alt text](image-1.png)
Перевірка за допомогою GET:
![![alt text](image-2.png)](image-2.png)
Метод PUT
PUT Survey
Запит та відповідь:
![alt text](image-3.png)
Перевірка за допомогою GET:
![alt text](image-4.png)
Метод DELETE
DELETE Survey
Запит та відповідь:
![alt text](image-5.png)
Перевірка за допомогою GET:
![alt text](image-6.png)

BIN
docs/test/image-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
docs/test/image-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
docs/test/image-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
docs/test/image-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
docs/test/image-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
docs/test/image-6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
docs/test/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

0
src/restful-server/flask Normal file
View File

View File

@ -0,0 +1,62 @@
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234@localhost/odb'
db = SQLAlchemy(app)
class Survey(db.Model):
id = db.Column(db.Integer, primary_key=True)
isPaused = db.Column(db.Boolean)
isNamed = db.Column(db.Boolean)
name = db.Column(db.String(255))
duration = db.Column(db.Integer)
account_id = db.Column(db.Integer)
def __repr__(self):
return f"<Survey {self.name}>"
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
@app.route("/api/survey", methods=["GET", "POST"])
def api_survey():
if request.method == "GET":
surveys = Survey.query.all()
return jsonify([survey.as_dict() for survey in surveys])
elif request.method == "POST":
data = request.json
new_survey = Survey(isPaused=data['isPaused'], isNamed=data['isNamed'], name=data['name'],
duration=data['duration'], account_id=data['account_id'])
db.session.add(new_survey)
db.session.commit()
return jsonify({'success': True}), 201
@app.route("/api/survey/<int:survey_id>", methods=["GET", "PUT", "DELETE"])
def api_survey_numbered(survey_id):
survey = Survey.query.get_or_404(survey_id)
if request.method == "GET":
return jsonify(survey.as_dict())
elif request.method == "PUT":
data = request.json
survey.isPaused = data['isPaused']
survey.isNamed = data['isNamed']
survey.name = data['name']
survey.duration = data['duration']
survey.account_id = data['account_id']
db.session.commit()
return jsonify({'success': True})
elif request.method == "DELETE":
db.session.delete(survey)
db.session.commit()
return jsonify({'success': True})
if __name__ == '__main__':
app.run(debug=True)