-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
121 lines (95 loc) · 3.84 KB
/
app.py
File metadata and controls
121 lines (95 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from flask import Flask, jsonify, request
from models.user import User
from database import db
from flask_login import LoginManager, login_user, current_user, logout_user, login_required
# Configura a conexão com o banco de dados
app = Flask(__name__)
app.config['SECRET_KEY'] = "your_secret_key"
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:admin123@127.0.0.1:3306/flask-crud'
login_manager = LoginManager()
#Iniciando Banco de Dados e o Login Manager
db.init_app(app)
login_manager.init_app(app)
#view login
login_manager.login_view = 'login'
#Session <- conexao ativa
#MFunção usada para recuperar user <SELECT>
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
#Rota utilizada para efetuar login
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username and password:
#Login, recuperando um registro do banco
user = User.query.filter_by(username=username).first()
if user and user.password == password:
# Autenticado
login_user(user)
print(current_user.is_authenticated)
return jsonify({"message": "Autenticação realizada com sucesso!"})
return jsonify({"message": "Autenticação realizada com sucesso!"})
#Falha no login
return jsonify({'message': 'Credenciais inválidas!'}),400
#Rota utilizada para fazer Logout
@app.route('/logout',methods=['GET'])
#Decorated do Flask para verificar se existe um user logado
@login_required
def logout():
logout_user()
return jsonify({"message": "Logout realizado com sucesso!"})
#Rota utilizada para Cadastrar um novo user
@app.route('/user', methods=['POST'])
def create_user():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username and password:
# Cria um novo registro no banco
new_user = User(username=username, password=password, role='user')
db.session.add(new_user)
db.session.commit()
return jsonify({"message": "Usuário criado com sucesso!"}), 400
# Falha na criação do usuário
return jsonify({"message": "Dados inválidos!"})
#Rota utilizada para recuperar um user pelo id
@app.route('/user/<int:user_id>', methods=['GET'])
@login_required
def read_user(user_id):
user = User.query.get(user_id)
if user:
return jsonify({"username": user.username})
return jsonify({"message": "Usuário não encontrado!"}), 404
#Rota utilizada para atualizar um user
@app.route('/user/<int:user_id>', methods=['PUT'])
@login_required
def update_user(user_id):
data = request.get_json()
user = User.query.get(user_id)
if user_id != current_user.id and current_user.role =='user':
return jsonify({"message": "Operação não permitida"}), 403
if user and data.get('password'):
user.password = data.get('password')
db.session.commit()
return jsonify({"message": f"Senha do usuário {user_id} atualizada com sucesso!"})
return jsonify({"message": "Usuário não encontrado!"}), 404
#Rota utilizada para deletar um user
@app.route('/user/<int:user_id>',methods=['DELETE'])
@login_required
def delete_user(user_id):
user = User.query.get(user_id)
if current_user.role != 'admin':
return jsonify({"message": "Deleção não permitida"}), 403
if user_id == current_user.id:
return jsonify({"message": "Deleção não permitida"}), 403
if user:
db.session.delete(user)
db.session.commit()
return jsonify({"message": f"Usuário {user_id} deletado com sucesso!"})
return jsonify({"message": "Usuário não encontrado!"}), 404
if __name__ == '__main__':
# Inicia o servidor, com debug ativado para depuração
app.run(debug=True)