2016-06-11 4 views
1

Also im Grunde habe ich eine "/ add" Route, wo es verwendet wird, um Benutzerdaten zu mongodb manuell zu säen und ich möchte in der Lage sein, die ID dieses Benutzers an die URL für zu übergeben die Route "/ agreement". Wenn sich der Benutzer auf der Vereinbarungsseite befindet, wird seine "_id" diesem URI zugeordnet und die Informationen, die sie auf der Vereinbarungsseite eingeben, aktualisieren ihre Daten, die wir in der Route "/ add" angegeben haben.Weitergabe von Benutzerdaten mit Python-Flask und MongoDB

@app.route('/add') 
def add(): 
    users = mongo.db.users 
    users.insert({ 
     "_id" : "autogenID", 
     "_comment" : " File structure for files in client collection", 
     "client_name" : "Name_of_firm", 
     "contact_name" : "Name_of_contact", 
     "contact_email" : "Email_ID_of_contact", 
     "contact_password" : "passowrd_encryped_bcrypt", 
     "client_industry" : "client_industry", 
     "monthly_checks_processed": "monthly_checks_processed", 
     "parent_id" : "client_id", 
     "child_id" : [{ 
      "child_id": "client_id", 
      "child_id": "client_id" 
     }], 
     "agreement_authorised" : "boolean_yes_no", 
     "agreement" : "agreement_text", 
     "client_card" : [{ 
      "name_on_card": "client_name", 
      "credit_card_number": "credit_card_number_bycrypt", 
      "expiration_date" : "expiration_date_bycrypt", 
      "credit_card_cvc" : "credit_card_cvc_bycrypt", 
      "active" : "boolean_yes_no" 
     }] 
    }) 
    all_users = users.find() 
    for user in all_users: 
     print user 


@app.route('/agreement', methods=['GET', 'POST']) 
def agreenment(id): 
    user = mongo.db.users.find("_id") 
    print user 
    return render_template('agreement.html', user=user) 

ich glaube, das Problem liegt in der Vereinbarung Ressource, wo vielleicht sollte ich /agreement/<id> schreiben, aber ich glaube, ich bin fehlt ein grundlegendes Verständnis davon, wo die <id> instanziiert wird. Ich verstehe auch nicht vollständig, was die Funktion des Vereinbarungsparameters ist, aber ich setze (id), weil das scheint, als würde ich etwas tun müssen, um die Information des Benutzers zu erhalten, die an eine andere Ressource weitergegeben wird.

Ich denke auch, user = mongo.db.users.find("_id") könnte nicht korrekt sein sowie return render_template('agreement.html', user=user). Ein Teil von mir denkt, dass ich vielleicht Redirect statt Rendering machen sollte, aber wenn jemand eine Hand leihen könnte, würde ich es sehr schätzen.

+0

Sie sollten vermeiden, ID als Bezeichner zu verwenden, da Sie die integrierte Funktion überschreiben (https://docs.python.org/3/library/functions.html#id). – dirn

Antwort

0

Versuchen Sie folgendes:

@app.route('/agreement/<user_id>', methods=['GET', 'POST']) 
def agreement(user_id): 
    user = mongo.db.users.find_one({"_id": user_id}) 
    print user 
    return render_template('agreement.html', user=user) 

URL Parameternamen in Flask im route Parameter angegeben werden, und sie haben die Funktion eingerichtet Unterschrift übereinstimmen.

Die Abfrage in Mongo erfolgt durch Übergabe eines Diktats, das die Einschränkungen angibt, sodass db.users.find_one({"_id": user_id}) ein einzelnes Ergebnis mit _id zurückgibt, das mit der Variablen user_id übereinstimmt.

Bearbeiten: Eigentlich, wie per the documentation, können Sie einfach tun: db.users.find_one(user_id).

Verwandte Themen