β

【Python搞搞轻量博客】第三发 开发无数据库留言板

静觅 34 阅读

Hi,大家好,我又回来了。

今天我要写一个无需数据,来实现一个简易的留言板。

准备

前端与后端数据提交

通常Web应用在前端和后端的数据交互少不了Get和Post这两种HTTP方法。

那么,我们如何通过传递参数的方式来获取数据呢?

比如,/get/?name=xeanyu&age=10 其中的数据为name=xeanyu 和 age = 10

from flask import Flask,request
app = Flask(__name__)

@app.route('/get/',methods=['GET'])
def index():
    name = request.args.get('name')
    age = request.args.get('age')
    print("name: %s \nage: %s " % (name,age))
    return 'OK'

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

第一行: 我们导入了 request,利用它来获取前端传递给后端的数据

第六 行: 获取参数,name的值,如果name没有传递参数,不会报错,而是返回None

第七行: 获取参数,age的值,同上

我们看下控制台

成功获取get方法所传递的值。

然后我再来使用Post方法来获取数据。

如果使用Post来获取参数,我们就需要使用html来传递到后端。

from flask import Flask,request,render_template
app = Flask(__name__)

@app.route('/get/',methods=['GET','POST'])
def index():
    if request.method == 'GET':
        return render_template('index.html')

    if request.method == 'POST':
        name = request.form.get('name')
        age = request.form.get('age')

        print("POST 方法 \nname: %s \nage: %s" % (name,age))

        return '已经获取数据'

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

然后我们来看HTML代码

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>POST方法</title>
</head>
<body>

        <center><h1>Post方法</h1></center>

        <center>
            <form action="{{ url_for('index') }}" method="POST">

                姓名: <input type="text" name="name"><br>

                年龄: <input type="text" name="age"><br>

                <button>提交</button>
            </form>
        </center>

</body>
</html>

可以看到,在 第十二行 中, form表单 中的action的值是我们用 url_for()函数获取路由index的URL,然后method所使用的http方法为 POST

然后来看app.py主应用的代码

第4行: 其中methods添加POST方法

第6 – 15行中: 利用if判断所访问的方法,如果是get,就是直接用浏览器访问,则渲染一个模板,如果是POST方法,就使用 request.form.get来获取 模板中表单的两个输入的值。

可以看到,这是GET方法的访问,所给我们渲染的模板。很简陋蛤

然后我们输入年龄和姓名,再来看控制台。

可以看到,成功获取了表单数据。现在,我们学到的知识,已经够我们写一个无需数据库的留言板了。

开始写留言板

from flask import Flask,request,render_template,redirect,url_for
import time
app = Flask(__name__)

users = [] # 这里存放所有的留言

@app.route('/say/',methods=['GET','POST'])
def index():
    if request.method == 'GET':
        return render_template('index.html',says=users)

    else:
        title = request.form.get('say_title')
        text = request.form.get('say')
        user = request.form.get('say_user')
        date = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())

        users.append({"title": title,
                      "text":text,
                      "user":user,
                      "date": date})

        return redirect(url_for('index'))

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

还有模板代码

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>留言板</title>
</head>
<body>
        <center><h1>留言</h1></center>

        <center>
            <form action="{{ url_for('index') }}" method="POST">
                用户名: <input type="text" name="say_user"><br>
                留言标题: <input type="text" name="say_title"><br>
                留言内容: <input type="text" name="say"><br>
                <button>提交留言</button>
            </form>
        </center>

    <center>
        <table border="2">
            <thead>
            <tr>
                <th>标题</th>
                <th>内容</th>
                <th>用户</th>
                <th>留言时间</th>
            </tr>
            </thead>

            <tbody>

            {% for say in says %}
                <tr>
                    <td>{{ say['title'] }}</td>
                    <td>{{ say['text'] }}</td>
                    <td>{{ say['user'] }}</td>
                    <td>{{ say['date'] }}</td>
                </tr>
            {% endfor %}

            </tbody>
        </table>
    </center>
</body>
</html>

主应用app.py中

大致的思路是,创建一个留言列表。然后有Get方法去渲染模板,在模板中输入值,再去用POST提交给路由,路由将数据定义成为一个字典。

字典是这样的:

多说无益,我们来运行测试一下。

每次提交POST表单数据,视图函数添加到 users列表 以后,就会又跳转到 get 方式的页面。

代码可见主应用 app.py中 12 – 23行代码中,第23行代码 使用redirect又跳转到了留言页面。

这个留言板弊端很多,比如一旦重启应用,就会丢失所有的用户留言,你可以使用json,进行序列化储存。或者其他方式写入到文件。

弊端如下:

Ok,如果大家有什么问题请加微信互相交流。

转载请注明: 静觅 » 【Python搞搞轻量博客】第三发 开发无数据库留言板

作者:静觅
静静寻觅生活的美好

发表评论