作者:董福强 | 来源:互联网 | 2023-05-17 23:23
最近嗜睡又不想睡,然后下午翘了课,睡了一大觉,终于可以来完结这个又简单也算实用的小留言板了。1.首先是数据库吧(原谅一下我糟糕的命名方式)1classLeave:2d
最近嗜睡又不想睡,然后下午翘了课,睡了一大觉,终于可以来完结这个又简单也算实用的小留言板了。
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也会来。