Facebook
From vanessa, 9 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 79
  1. from flask import Flask, jsonify, request, make_response
  2. from estrutura_banco_de_dados import Autor, Postagem, app, db
  3. import json
  4. import jwt
  5. from datetime import datetime, timedelta
  6. from functools import wraps
  7. # Rota padrão - GET https://localhost:5000
  8.  
  9.  
  10. def token_obrigatorio(f):
  11.     @wraps(f)
  12.     def decorated(*args, **kwargs):
  13.         token = None
  14.         # Verificar se um token foi enviado
  15.         if 'x-access-token' in request.headers:
  16.             token = request.headers['x-access-token']
  17.         if not token:
  18.             return jsonify({'mensagem': 'Token não foi incluído!'}, 401)
  19.         # Se temos um token, validar acesso consultando o BD
  20.         try:
  21.             resultado = jwt.decode(token, app.config['SECRET_KEY'])
  22.             autor = Autor.query.filter_by(
  23.                 id_autor=resultado['id_autor']).first()
  24.         except:
  25.             return jsonify({'mensagem': 'Token é inválido'}, 401)
  26.         return f(autor, *args, **kwargs)
  27.     return decorated
  28.  
  29.  
  30. @app.route('/login')
  31. def login():
  32.     auth = request.authorization
  33.     if not auth or not auth.username or not auth.password:
  34.         return make_response('Login inválido', 401, {'WWW-Authenticate': 'Basic realm="Login obrigatório"'})
  35.     usuario = Autor.query.filter_by(nome=auth.username).first()
  36.     if not usuario:
  37.         return make_response('Login inválido', 401, {'WWW-Authenticate': 'Basic realm="Login obrigatório"'})
  38.     if auth.password == usuario.senha:
  39.         token = jwt.encode({'id_autor': usuario.id_autor, 'exp': datetime.utcnow() + timedelta(minutes=30)}, app.config['SECRET_KEY'])
  40.         return jsonify({'token': token})
  41.     return make_response('Login inválido', 401, {'WWW-Authenticate': 'Basic realm="Login obrigatório"'})
  42.  
  43. @app.route('/')
  44. @token_obrigatorio
  45. def obter_postagens(autor):
  46.     postagens = Postagem.query.all()
  47.  
  48.     list_postagens = []
  49.     for postagem in postagens:
  50.         postagem_atual = {}
  51.         postagem_atual['titulo'] = postagem.titulo
  52.         postagem_atual['id_autor'] = postagem.id_autor
  53.         list_postagens.append(postagem_atual)
  54.     return jsonify({'postagens': list_postagens})
  55.  
  56. # Obter postagem por id - GET https://localhost:5000/postagem/1
  57.  
  58.  
  59. @app.route('/postagem/<int:id_postagem>', methods=['GET'])
  60. @token_obrigatorio
  61. def obter_postagem_por_indice(autor, id_postagem):
  62.     postagem = Postagem.query.filter_by(id_postagem=id_postagem).first()
  63.     postagem_atual = {}
  64.     try:
  65.         postagem_atual['titulo'] = postagem.titulo
  66.     except:
  67.         pass
  68.     postagem_atual['id_autor'] = postagem.id_autor
  69.  
  70.     return jsonify({'postagens': postagem_atual})
  71.  
  72. # Criar uma nova postagem - POST https://localhost:5000/postagem
  73.  
  74.  
  75. @app.route('/postagem', methods=['POST'])
  76. @token_obrigatorio
  77. def nova_postagem(autor):
  78.     nova_postagem = request.get_json()
  79.     postagem = Postagem(
  80.         titulo=nova_postagem['titulo'], id_autor=nova_postagem['id_autor'])
  81.  
  82.     db.session.add(postagem)
  83.     db.session.commit()
  84.  
  85.     return jsonify({'mensagem': 'Postagem criada com sucesso'})
  86.  
  87. # Alterar uma postagem existente - PUT https://localhost:5000/postagem/1
  88.  
  89.  
  90. @app.route('/postagem/<int:id_postagem>', methods=['PUT'])
  91. @token_obrigatorio
  92. def alterar_postagem(autor, id_postagem):
  93.     postagem_alterada = request.get_json()
  94.     postagem = Postagem.query.filter_by(id_postagem=id_postagem).first()
  95.     try:
  96.         postagem.titulo = postagem_alterada['titulo']
  97.     except:
  98.         pass
  99.     try:
  100.         postagem.id_autor = postagem_alterada['id_autor']
  101.     except:
  102.         pass
  103.  
  104.     db.session.commit()
  105.     return jsonify({'mensagem': 'Postagem alterada com sucessso'})
  106.  
  107. # Excluir uma postagem - DELETE - https://localhost:5000/postagem/1
  108.  
  109.  
  110. @app.route('/postagem/<int:id_postagem>', methods=['DELETE'])
  111. @token_obrigatorio
  112. def excluir_postagem(autor, id_postagem):
  113.     postagem_a_ser_excluida = Postagem.query.filter_by(
  114.         id_postagem=id_postagem).first()
  115.     if not postagem_a_ser_excluida:
  116.         return jsonify({'mensagem': 'Não foi encontrado uma postagem com este id'})
  117.     db.session.delete(postagem_a_ser_excluida)
  118.     db.session.commit()
  119.  
  120.     return jsonify({'mensagem': 'Postagem excluída com sucesso!'})
  121.  
  122.  
  123. @app.route('/autores')
  124. @token_obrigatorio
  125. def obter_autores(autor):
  126.     autores = Autor.query.all()
  127.     lista_de_autores = []
  128.     for autor in autores:
  129.         autor_atual = {}
  130.         autor_atual['id_autor'] = autor.id_autor
  131.         autor_atual['nome'] = autor.nome
  132.         autor_atual['email'] = autor.email
  133.         lista_de_autores.append(autor_atual)
  134.  
  135.     return jsonify({'autores': lista_de_autores})
  136.  
  137.  
  138. @app.route('/autores/<int:id_autor>', methods=['GET'])
  139. @token_obrigatorio
  140. def obter_autor_por_id(autor, id_autor):
  141.     autor = Autor.query.filter_by(id_autor=id_autor).first()
  142.     if not autor:
  143.         return jsonify(f'Autor não encontrado!')
  144.     autor_atual = {}
  145.     autor_atual['id_autor'] = autor.id_autor
  146.     autor_atual['nome'] = autor.nome
  147.     autor_atual['email'] = autor.email
  148.  
  149.     return jsonify({'autor': autor_atual})
  150.  
  151. # Criar novo autor
  152.  
  153.  
  154. @app.route('/autores', methods=['POST'])
  155. @token_obrigatorio
  156. def novo_autor(autor):
  157.     print('deu merda')
  158.     novo_autor = request.get_json()
  159.     autor = Autor(
  160.         nome=novo_autor['nome'], senha=novo_autor['senha'], email=novo_autor['email'])
  161.  
  162.     db.session.add(autor)
  163.     db.session.commit()
  164.  
  165.     return jsonify({'mensagem': 'Usuário criado com sucesso'}, 200)
  166.  
  167.  
  168. @ app.route('/autores/<int:id_autor>', methods=['PUT'])
  169. @token_obrigatorio
  170. def alterar_autor(autor, id_autor):
  171.     usuario_a_alterar = request.get_json()
  172.     autor = Autor.query.filter_by(id_autor=id_autor).first()
  173.     if not autor:
  174.         return jsonify({'Mensagem': 'Este usuário não foi encontrado'})
  175.     try:
  176.         autor.nome = usuario_a_alterar['nome']
  177.     except:
  178.         pass
  179.     try:
  180.         autor.email = usuario_a_alterar['email']
  181.     except:
  182.         pass
  183.     try:
  184.         autor.senha = usuario_a_alterar['senha']
  185.     except:
  186.         pass
  187.  
  188.     db.session.commit()
  189.     return jsonify({'mensagem': 'Usuário alterado com sucesso!'})
  190.  
  191.  
  192. @ app.route('/autores/<int:id_autor>', methods=['DELETE'])
  193. @token_obrigatorio
  194. def excluir_autor(autor, id_autor):
  195.     autor_existente = Autor.query.filter_by(id_autor=id_autor).first()
  196.     if not autor_existente:
  197.         return jsonify({'mensagem': 'Este autor não foi encontrado'})
  198.     db.session.delete(autor_existente)
  199.     db.session.commit()
  200.  
  201.     return jsonify({'mensagem': 'Autor excluído com sucesso!'})
  202.  
  203.  
  204. app.run(port=5000, host='localhost', debug=True)
  205.