使用 Flask 和 MySQL 创建事件管理器
Posted
技术标签:
【中文标题】使用 Flask 和 MySQL 创建事件管理器【英文标题】:Creating an events manager using Flask and MySQL 【发布时间】:2018-05-15 22:15:57 【问题描述】:我是一名 Python 和 javascript 程序员新手,目前正在使用 Flask 和 mysql 创建一个事件管理器应用程序。
单页网站应允许用户:
-
添加和查看事件。
按日期或类别对事件进行排序
我似乎无法将数据插入本地 MySQL 数据库。每次我打开 MySQL 工作台检查时,表都是空的。
我的问题是:
-
如何使用 Flask 将输入标签中的数据插入 MySQL?
如果插入成功,检查 MySQL 的最佳方法是什么?
如何在应用启动时使用 Flask 从 MySQL 获取数据到 html 表中?
HTML:
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<link rel = 'stylesheet' href = 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'>
<title>Events and Opportunities</title>
</head>
<body>
<div class = 'container'>
<h1>Events and Opportunities</h1>
<table class="table">
<thead>
<tr id = 'tableHeader'>
<th>Date</th>
<th>Category</th>
<th>Title</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<form action = '/' method = 'post'>
<tr id = 'tableInput'>
<td><input type = 'date' name = 'inputDate' id = 'inputDate'></td>
<td><input type = 'text' name = 'inputCategory' id = 'inputCategory' maxlength = '20'></td>
<td><input type = 'text' name = 'inputTitle' id = 'inputTitle' maxlength = '100'></td>
<td><input type = 'text' name = 'inputDescription' id = 'inputDescription' maxlength = '500'></td>
</tr>
</form>
</tbody>
</table>
<button type = 'button' id = 'addButton' class="btn btn-default">Add</button>
</div>
<script src = 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'></script>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous">
</script>
<script src = 'static/app.js'></script>
</body>
</html>
Javascript:
$('#addButton').on('click', () =>
if ($('#inputDate').val() === '' || $('#inputCategory') === '' || $('#inputTitle') === '' || $('#inputDescription') === '')
alert('Please fill in the form.');
else
const valDate = $('<th></th>').text($('#inputDate').val());
const valCategory = $('<th></th>').text($('#inputCategory').val());
const valTitle = $('<th></th>').text($('#inputTitle').val());
const valDescription = $('<th></th>').text($('#inputDescription').val());
const newRow = $('<tr></tr>').append(valDate, valCategory, valTitle, valDescription);
$('#tableInput').before(newRow);
$('#inputDate').val('');
$('#inputCategory').val('');
$('#inputTitle').val('');
$('#inputDescription').val('');
)
Flask 代码:
from flask import Flask, render_template, request
import mysql.connector
app = Flask(__name__)
cnx = mysql.connector.connect(user='root', password='yunani', host='127.0.0.1', database='test')
cursor = cnx.cursor()
@app.route('/', methods = ['GET', 'POST'])
def index():
return render_template('index.html')
if request.method == 'POST':
date = request.form['inputDate']
category = request.form['inputCategory']
title = request.form['inputTitle']
description = request.form['inputDescription']
cursor.execute('INSERT INTO data (Date, Category, Title, Description) VALUES (, , , )'.format(date, category, title, description))
cnx.commit()
if __name__ == '__main__':
app.run(debug = True)
MySQL 架构:link to image
【问题讨论】:
你好像没有办法提交表单,所以它实际上调用了Flask代码。 【参考方案1】:尝试将您的处理程序更改为
def index():
if request.method == 'POST':
date = request.form['inputDate']
category = request.form['inputCategory']
title = request.form['inputTitle']
description = request.form['inputDescription']
cursor.execute('INSERT INTO data (Date, Category, Title, Description) VALUES (, , , )'.format(date, category, title, description))
cnx.commit()
return render_template('index.html') # don't do this at the top
您目前在检查呼叫类型或与数据库通话之前返回。
【讨论】:
不要认为else
子句是必要的:post
请求仍然需要返回一些 IIRC,因此将 if
然后 return
放在 if
之外应该呈现两种情况下的模板。不过我可能错了
@Mangohero1 你说得对。我在想post
是一个ajax 请求,所以不希望渲染模板,但事实并非如此。谢谢:)以上是关于使用 Flask 和 MySQL 创建事件管理器的主要内容,如果未能解决你的问题,请参考以下文章