flask+pymongo的留言板

最近嗜睡又不想睡,然后下午翘了课,睡了一大觉,终于可以来完结这个又简单也算实用的小留言板了。

1.首先是数据库吧(原谅一下我糟糕的命名方式)

 1 class Leave:
 2     db = MongoClient().Doo.Leave
 3 
 4     def __init__(self, name, words):
 5         self.name = name
 6         self.words = words
 7 
 8     def new_word(self):
 9         collection = {
10             'name': self.name,
11             'words': self.words,
12             'words_since': datetime.utcnow()
13         }
14         self.db.insert_one(collection)

Mongodb是一个用的时候才建的数据,这一点我之前说过了。突然想起之前想处理的flask-migrate,可能要等我学mysql的时候才能用的上了,或者postgresql的时候。flask-sqlalchemy是一个很棒的东西,配合flask用很合适,可以找到的资料会相对多一点。

2.Form

1 class LeaveForm(Form):
2     name = StringField('留言人')
3     words = TextAreaField('留言', validators=[DataRequired()])
4     submit = SubmitField('确定')

3.Views(我的文件结构处理得很不好,以后可能会改一下)

1 @main.route('/leave', methods=['GET', 'POST'])
2 def leave():
3     leave_word = MongoClient().Doo.Leave.find().sort('words_since', DESCENDING)
4     form = LeaveForm()
5     if form.validate_on_submit():
6         Leave(name=form.name.data,
7               words=form.words.data).new_word()
8         return redirect(url_for('.leave'))
9     return render_template('leave.html', leave=leave_word, form=form)

这里的url_for之前我忘了用redirect,然后跳转页面就变成/leave,整个页面只有'/leave'。sort的DESCENDING是要从pymongo中引入的,简单一点可以直接用-1就好,因为我是想让留言按时间逆序显示,注意这里的leave是之后模板用到的数据。

4.html

 1 {% extends "base.html" %}
 2 {% block head %}
 3     <link rel="stylesheet" href="{{ url_for('static', filename='css/leave.css') }}" type="text/css">
 4 {% endblock %}
 5 {% block body %}
 6 <div class="col-lg-12 lala">
 7 <h3>新留言</h3>
 8 <form method="POST">
 9     {{ form.hidden_tag() }}
10     <div class="form-group">
11         {{ form.name.label }}
12         {{ form.name(class_='form-control') }}
13     </div>
14     <div class="form-group">
15         {{ form.words.label }}
16         {{ form.words(class_='form-control') }}
17     </div>
18     {{ form.submit(class="btn btn-primary") }}
19 </form>
20 {% for lea in leave %}
21 <div class="content">
22     <div class="info">
23         <h4 class="user">By {{ lea.get('name') }}</h4>
24         <h4 class="time">{{ lea.get('words_since').strftime('%Y-%m-%d %H:%M:%S') }}</h4>
25     </div>
26 
27     <div class="con">{{ lea.get('words') }}</div>
28 </div>
29 {% endfor %}
30 </div>
31 
32 {% endblock %}

还是这样糟糕的命名,for循环中的leave就是之前view中的leave,通过get来获取数据,另一点就是strftime,不格式化时间的话后面就还会有一串数据,这样看比较好一点。

之后应该会分页吧,login的页面写好了,或者只能说可以用了,我遇到了我好的问题啊,相比之下这个小小的留言板好像没啥东西。

今天师姐们拍毕业照了,毕业快乐喔,希望明年的ast也会来。

猜你喜欢

转载自www.cnblogs.com/neebla/p/9069198.html