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>