1. 程式人生 > >mongoDB + flask 儲存前端 post 請求的資料

mongoDB + flask 儲存前端 post 請求的資料

python file: 

from flask import Flask,render_template,url_for, request, redirect

from logging import DEBUG

from datetime import datetime

import json

from flask_pymongo import PyMongo

#連結 pymongo

# 保證 系統的MongoDB service 是啟動狀態

app = Flask(__name__)

app.config.update(

MONGO_URI='mongodb://localhost:27017/flask',

MONGO_PORT=27017

)

# new 一個新物件 

ProjMongo = PyMongo(app)

 

def addPersonToMongo(name,age, jt):

p = {

'name': name,

'age': age,

'jobTitle':jt,

'RegiterDate': datetime.utcnow()

}

# add the records to mongo

ProjMongo.db.projCollection.insert_one(p)

 

# ALL the variables should be defined above the app

@app.route('/index')

@app.route('/')

def index():

return render_template('mytest.html')

 

@app.route('/thankyou')

def thankyou():

return render_template("Thanks.html")


 

# test the request with post or get mode

@app.route('/getbookmark', methods=['GET','POST']) # which need the method assigned in form tag in html

def getbookmark():

print(request.args)

if request.method == "POST":

# POST方式 獲取到資料後, 分別取值,之前試過直接轉換為Json 但總是提示decode 的問題,不能一次將所有的資料拿到

#  所以,分別將單次的值傳入addPersonToMongo函式 , 重新組合一個 dict add到mongo裡 

# 這裡應該還有更好的 簡便方式, 

name = request.form.get('name')

age = request.form.get('age')

jt = request.form.get('jobTitle')

addPersonToMongo(name,age,jt)

return redirect(url_for('thankyou'))

return render_template('addbookMark.html')

 

@app.route('/showDataBase')

def showDataBase():

showDataFromMongo = ProjMongo.db.projCollection.find({})

return render_template('showDataBase.html', result = showDataFromMongo)

 

@app.errorhandler(404)

def page_not_found(e):

return render_template('404.html'), 404

 

@app.errorhandler(500)

def server_error(e):

return render_template('500.html'), 500

if __name__ =="__main__":

app.run(debug=True)

 

對應template 如下: 

1) addbookMark.html

<div>

<form action="http://127.0.0.1:5000/getbookmark" method='post'>

<p>

enter name:

<input type="text" name = "name" ><br>

<p></p>

enter age:

<input type="text" name = "age" ><br>

<p></p>

enter job title:

<input type="text" name = "jobTitle" ><br>

</p>

 

<p>

<button type = "submit"> submit </button>

</p>

</form>

</div>

2) showDataBase.html

<div>

<table border =1 >

<tr>

{% for item in result[0].keys() %}

<th> {{item}}</th>

{% endfor%}

</tr>

{% for itemPer in result %}

<tr>

{% for item in itemPer.values() %}

<td> {{item}}</td>

{% endfor %}

</tr>

{% endfor %}

</table>

</div>

<a href="{{url_for('index')}}">back to main page </a>