Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
vodyana | 17c2cad47a |
|
@ -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,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>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -67,10 +67,6 @@ module.exports = {
|
||||||
path:"/conclusion/"
|
path:"/conclusion/"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
title: 'API',
|
|
||||||
path:"/api/"
|
|
||||||
}
|
|
||||||
|
|
||||||
],
|
],
|
||||||
sidebarDepth: 2,
|
sidebarDepth: 2,
|
||||||
|
|
|
@ -6,24 +6,12 @@ actionLink: /intro/
|
||||||
footer: "ECL 2.0 Licensed | Copyright © 2024 [Your Name]"
|
footer: "ECL 2.0 Licensed | Copyright © 2024 [Your Name]"
|
||||||
---
|
---
|
||||||
|
|
||||||
**Виконали:**
|
**Виконала:**
|
||||||
|
|
||||||
*студенти 2-го курсу, групи ІО-23:*
|
*студентка 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)]*
|
|
||||||
|
|
||||||
*Вікторія ВОДЯНА [vodyanayaviktoria@gmail.com, [@victoriavodyana](https://t.me/victoriavodyana)]*
|
*Вікторія ВОДЯНА [vodyanayaviktoria@gmail.com, [@victoriavodyana](https://t.me/victoriavodyana)]*
|
||||||
|
|
||||||
*Михайло КОРБУТ [korbutmykhailo@gmail.com, [@misha1tigr](https://t.me/misha1tigr)]*
|
|
||||||
|
|
||||||
*Олександр ГУРАНЕЦЬ [bacant150@gmail.com, [@Bacant150](https://t.me/Bacant150)]*
|
|
||||||
|
|
||||||
|
|
||||||
**Керівник**
|
**Керівник**
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
# Висновки
|
# Висновки
|
||||||
|
|
||||||
У висновках наводять оцінку отриманих результатів, можливі галузі його використання. Висновки повинні містити в собі коротку узагальнену оцінку результатів розробки, у
|
У цьому проєкті була використана локальна база даних для зберігання інформації. Розроблена серверна частина надає RESTful-інтерфейс для доступу до цієї бази даних. Цей інтерфейс може використовуватися для взаємодії з таблицею питань (survey), що дозволяє здійснювати операції читання, запису, оновлення та видалення даних через HTTP-запити. Такий підхід забезпечує зручний та ефективний спосіб взаємодії з базою даних і відкриває широкі можливості для розвитку та розширення функціональності системи.
|
||||||
тому числі і з погляду на їх технічно-економічну ефективність. Необхідно порівняти
|
|
||||||
отримані результати усіх характеристик об’єкта проєктування із завданням і з основними показниками сучасних аналогічних об’єктів.
|
|
||||||
|
|
||||||
Необхідно вказати яке нове технічне рішення покладене в основу проєкту і у чому її
|
|
||||||
переваги, що нового було запропоновано самим студентом.
|
|
||||||
|
|
||||||
На базі отриманих висновків можуть надаватися рекомендації по використанню розробки. Вони повинні
|
Технічне рішення, що покладене в основу проєкту, полягає у використанні мови програмування Python та веб-фреймворку Flask для створення RESTful сервісу. Це дозволило забезпечити швидку реалізацію системи та забезпечити її продуктивність та масштабованість.
|
||||||
мати конкретний характер і бути цілком підтверджені проєктом.
|
|
||||||
|
Отримана система дозволяє автоматизувати процес збору та аналізу відповідей, що значно знижує час та ресурси, необхідні для проведення таких опитувань. Завдяки використанню сучасних технологій, таких як Flask, система має високу продуктивність та може легко масштабуватися відповідно до потреб користувачів.
|
||||||
|
|
||||||
|
|
|
@ -110,4 +110,67 @@ ENGINE = InnoDB;
|
||||||
SET SQL_MODE=@OLD_SQL_MODE;
|
SET SQL_MODE=@OLD_SQL_MODE;
|
||||||
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
|
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
|
||||||
SET UNIQUE_CHECKS=@OLD_UNIQUE_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)
|
||||||
|
'''
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 33 KiB |
|
@ -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)
|