123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- from flask import Flask, jsonify, request, json
- from types import SimpleNamespace
- from xmpp import cli
- from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, create_access_token
- from datetime import date, timedelta, datetime
- import sqlalchemy as db
- from sqlalchemy import create_engine, Integer, Date, DateTime, Column, String, Boolean, or_
- from sqlalchemy.orm import sessionmaker, scoped_session, declarative_base
- from BackendApi.connect import connect
- from api_config import Config
- app = Flask(__name__)
- #Добавление секртного слова для шифрования JWT
- app.config.from_object(Config)
- engine = create_engine(connect())
- session = scoped_session(sessionmaker(
- autocommit=False,
- autoflush=False,
- bind=engine
- ))
- Base = declarative_base()
- class UserModel(Base):
- __tablename__ = 'rest_user'
- id = Column(Integer, primary_key=True, autoincrement=True, )
- name = Column(String, unique=True, nullable=False)
- birthday = Column(Date)
- insys = Column(Boolean)
- idrole = Column(Integer)
- lastlogintime = Column(DateTime)
- email = Column(String, unique=True, nullable=False)
- password = Column(String)
- def as_dict(self):
- return {c.name: getattr(self, c.name) for c in self.__table__.columns}
- #Инициализация класса шифрования
- jwt = JWTManager(app)
- #Переменные чтобы не ошибиться
- data = 'data'
- code = 'httpcode'
- #Генерация токена (id - данные которые шифруются, min - время действия токена)
- #Используются при авторизации или регистрации (возможно выдавать и при других обстоятельствах)
- def gen_token(id, min):
- token = {"access_token" : create_access_token(identity=id, expires_delta=timedelta(minutes=min))}
- return jsonify(token)
- #Ошибка сервера (возвращает ошибку и код ошибки)
- def err_mes(ex):
- return jsonify({"msg":str(ex)}), 500
- def data_for_model(data):
- return json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
- #Авторизация пользователя
- # @app.route('/auth', methods=['POST'])
- # def post_auth():
- # try:
- # result = db_query.auth_query(request.get_json())
- # return gen_token(result[data]['id'], 5), result[code]
- # except Exception as ex:
- # return err_mes(ex)
- #Добавление пользователя и проверка на сходства
- @app.route('/adduser', methods=['POST'])
- def add_user():
- try:
- user = UserModel(**request.get_json())
- chek = session.query(UserModel).filter(or_(UserModel.email==user.email, UserModel.name==user.name)).first()
- if chek is None:
- session.add(user)
- session.flush()
- session.commit()
- return str(user.id), 200
- else:
- return "User exist", 400
- except Exception as ex:
- return err_mes(ex)
- #Запрос на получение данных об одном пользователе
- # @app.route('/user/<int:id>', methods=['GET'])
- # def get_user(id):
- # try:
- # result = db_query.get_user_query(id)
- # return jsonify(result[data]), result[code]
- # except Exception as ex:
- # return err_mes(ex)
- #Запрос на получение данных всех пользователей
- @app.route('/users', methods=['GET'])
- def get_show_user():
- try:
- data = []
- for user in session.query(UserModel).all():
- data.append(user.as_dict())
- #result = db_query.get_all_user_query()
- return jsonify(data), 200
- except Exception as ex:
- return err_mes(ex)
- #Удаление пользователя
- @app.route('/deleteuser', methods=['POST'])
- def delete_user():
- try:
- user = UserModel(**request.get_json())
- session.query(UserModel).filter_by(id=user.id).delete()
- session.commit()
- return "Success delete"
- #result = db_query.delete_user_query(request.get_json())
- #return jsonify(result[data]), result[code]
- except Exception as ex:
- return err_mes(ex)
- #Обновление данных пользователя
- # @app.route('/updateuser', methods=['POST'])
- # @jwt_required()
- # def test_api():
- # try:
- # result = db_query.update_user_query(request.get_json(), get_jwt_identity())
- # return jsonify(result[data]), result[code]
- # except Exception as ex:
- # return err_mes(ex)
- #Отправка сообщения через XMPP
- @app.route('/testmessage', methods=['POST'])
- def send_mess():
- try:
- request_data = request.get_json()
- for to in request_data['to']:
- cli.send_message(request_data['from'], request_data['password'], to, request_data['message'])
- return jsonify({"msg":"Succes send!"}), 200
- except Exception as ex:
- return err_mes(ex)
- # @app.route('/testaddcarlog', methods=['POST'])
- # def test_add_car_log():
- # try:
- # result = db_query.add_car_log(request.get_json())
- # return gen_token(result[data], 5), result[code]
- # except Exception as ex:
- # return err_mes(ex)
- if __name__ == '__main__':
- #from waitress import serve
- #serve(app, host='127.0.0.2', port='8080')
- app.run(host='0.0.0.0', debug=True, load_dotenv=True )
|