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