# 1.- Primeros pasos

Vamos a comenzar con las instalaciones necesarias para configurar nuestro proyecto utilizando MongoDb y Python.

# Instalando Virtualenv

Entorno virtual Proyecto que va estar aislado de los demas, es decir cada proyecto tiene sus propias dependencias, paquetes.

        $ pip install virtualenv

# Creando un entorno virtual dentro de nuestro proyecto

Para eso tienes que crear una carpeta nueva y abrila en cualquier editor de código

     $ virtualenv venv

# Crear una carpeta SRC

Creamos una carpeta llamada "src" y dentro un archivo "app.py"

# Activamos virtualenv

        source ./venv/bin/activate

# Instalando Modulos principales

Instalando Flask y MongoDb, solo se instalara en nuestro proyecto por eso estamos utilizando un entorno virtual. https://flask-pymongo.readthedocs.io/en/latest/ (opens new window)

        $ pip install Flask-PyMongo

# En "app.py" escribimos

      from flask import Flask
      from flask_pymongo import PyMongo
      
      app = Flask(__name__)
      app.config["MONGO_URI"] = "mongodb://localhost:27017/nombre-de-la-base-de-datos"
      mongo = PyMongo(app)

# Abrimos o activamos mongo

        mongod

# Si mongo no quiere activarse puedes solucionarlo con los siguientes comandos

        mongo start
        service mongod restart 
        ______________________________
        
        I face same issue after searching a lot I solve this by following :
        
        sudo service mongodb stop 
        sudo rm /var/lib/mongodb/mongod.lock 
        sudo mongod --repair --dbpath /var/lib/mongodb 
        sudo mongod --fork --logpath /var/lib/mongodb/mongodb.log --dbpath /var/lib/mongodb 
        mongo

# En el archivo "app.py" escribimos lo siguiente

        @app.route("/users", methods=["POST"])
        def create_user():

                return {'menssaje': 'received'}

Para mirar por pantalla los datos que van a ser enviados desde Postman necesitamos importar request "print(request.json)"

        from flask import Flask, request

        @app.route("/users", methods=["POST"])
        def create_user():
                
                print(request.json)

                return {'menssaje': 'received'}

# Abrimos Postman

        postman&

Esribimos la siguiente ruta:

       http://localhost:5000/users

Vamos a Header y dentro escribimos

        Content-Type             -           application/json

Luego vamos a raw y escrimos un usuario en formato JSON y enviamos la petición por consola

    {
    "username": "roma"
     }

# Enviando un POST para que se guarde y cree la base de datos

borramos el print(request.json) y escribimos para guardarlos y encriptar la contraseña





 













        username = request.json["username"]
        email = request.json["email"]
        password = request.json["password"]
        if username and password and email:
            hashed_password = generate_password_hash(password)
            id = mongo.db.users.insert(
                {"username": username, "email": email, "password": hashed_password}
            )
            response = {
                    "id" : str(id),
                    "username" : username,
                    "email" : email,
                    "password" : password,
            }
            return response
        else:
            {'menssage': 'necesito los datos'}

# Encriptamos la contaseña

Para eso debemos de importar

        from werkzeug.security import generate_password_hash, check_password_hash

Despúes creamos una variable "hashed_passwoord" donde dentro estara

        hashed_password = generate_password_hash(password)

# El código terminaria así

        from flask import Flask, request
        from flask_pymongo import PyMongo
        from werkzeug.security import generate_password_hash, check_password_hash
        app = Flask(__name__)
        app.config["MONGO_URI"] = "mongodb://localhost:27017/pythonmongo"
        mongo = PyMongo(app)
        @app.route("/users", methods=["POST"])
        def create_user():
            username = request.json["username"]
            email = request.json["email"]
            password = request.json["password"]

            if username  and email and password:
                hashed_password = generate_password_hash(password)
                id = mongo.db.users.insert(
                    {"username": username, "email": email, "password": hashed_password}
                )
                response = {
                    "id" : str(id),
                    "username" : username,
                    "email" : email,
                    "password" : hashed_password,
                }
                return response
            else:
                return {'mensaje': 'necesito los datos'}

            return {'menssaje': 'received'}

        if __name__ == '__main__':
            app.run(debug=True)