pythonflask留言板_Flask学习之旅--简易留言板

本文是作者学习Flask框架的实践过程,通过动手制作一个包含注册、登录和留言功能的简易留言板,介绍了如何使用Flask连接MySQL数据库,创建数据表,以及实现用户注册、登录和发表留言的逻辑。文章还分享了数据库操作和异常处理的基本方法。
摘要由CSDN通过智能技术生成

一、写在前面

正所谓“纸上得来终觉浅,方知此事要躬行”,在看文档和视频之余,我觉得还是要动手做点什么东西才能更好地学习吧,毕竟有些东西光看文档真的难以理解,于是就试着使用Flask框架做了一个简易留言板,实现了注册、登录和留言的功能。

二、开发环境

系统:Windows10

Python版本:Python3.7

Flask版本:Flask 1.0.2

MySQL版本:MySQL8.0

三、具体步骤

1.连接数据库

在做连接MySQL数据库的时候碰到了一堆问题,在上两篇博客中都有提到,这里就不多说了。完成数据库设置之后,我创建了两张表,一张用于储存用户信息的users表,一张用于储存留言信息的messages表。定义两张表的代码如下:

1 from flask_sqlalchemy importSQLAlchemy2 importmysql.connector3

4 app = Flask(__name__)5 app.config['SECRET_KEY'] = '123456'

6 app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://root:qwer1234@localhost/flask?auth_plugin=mysql_native_password"

7 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] =True8 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] =True9

10 #获取SQLAlchemy实例对象

11 db =SQLAlchemy(app)12

13

14 #用户

15 classUser(db.Model):16 __tablename__ = "users"

17 id = db.Column(db.Integer, primary_key=True)18 username = db.Column(db.String(16), unique=True) #用户名

19 password = db.Column(db.String(16)) #密码

20 email = db.Column(db.String(32), unique=True) #邮箱

21

22 def __repr__(self):23 return '' %self.username24

25

26 #留言

27 classMessage(db.Model):28 __tablename__ = "messages"

29 id = db.Column(db.Integer, primary_key=True)30 user = db.Column(db.String(16)) #用户名

31 content = db.Column(db.String(100)) #内容

32 date = db.Column(db.Date) #日期

33 time = db.Column(db.Time) #时间

34 is_anonymous = db.Column(db.Boolean) #是否匿名

35

36 def __repr__(self):37 return '' % (self.id, self.user)

这里先说下SQLAlchemy常用数据类型:

1)Integer,整形,映射到数据库中是int类型。

2)String,可变字符类型,映射到数据库中是varchar类型。

3)Date,存储时间,只能存储年月日。映射到数据库中是date类型。

4)Time,存储时间,可以存储时分秒。映射到数据库中也是time类型。

5)Boolean,布尔类型,映射到数据库中的是tinyint类型。

可以看到两张表中都有一个值为整数的id字段,该字段为主键,然后就是两个类中都有__repr__()方法,该方法和__str__()类似,会返回对这个类的描述。但是这还只是完成了对这两张表的定义,还没有在数据库中完成创建。我是把表的定义写在app.py中的,然后创建了一个model.py用于实现创建数据表,其中的代码如下:

1 from app importdb2

3

4 db.create_all()

2.用户注册

注册的时候需要输入用户名、密码和邮箱,前端完成验证,后台完成注册用户的操作。在进行数据库操作的时候,可能因为某些原因导致用户注册失败,所以还是需要使用异常处理的,若注册失败则返回注册页面并显示提示信息,若注册成功则使用redirect()方法跳转到登录页面,比如跳转到登录页面的的代码就是:

redirect(url_for("login"))

注册需要GET方法和POST方法,因此在编写路由的时候需要写上methods=['GET','POST'],完整代码如下:

1 @app.route('/register', methods=['GET', 'POST'])2 defregister():3 if request.method == 'GET':4 return render_template('register.html')5 else:6 try:7 usr =User()8 usr.id = User.query.count() + 1

9 usr.username = request.form["usr"]10 usr.password = request.form["pwd"]11 usr.email = request.form["email"]12 db.session.add(usr)13 db.session.commit()14 return redirect(url_for("login"))15 except:16 return render_template('register.html', msg="注册失败!请重试!")

3.用户登录

用户登录的时候需要对输入的用户名和密码进行验证,验证用户名是否存在和密码是否正确。在上一篇博客中已经简单介绍过Flask中使用SQLAlchemy的一些基本操作,而在用户登录的时候需要根据用户名来查询,也就是要使用filter()方法,语句如下:

User.query.filter(User.username == usr)

但是这样还不能得到结果,需要在后面加上一个all()才能得到查询结果。如果用户名和密码都正确,则能够登录成功,此时要使用session来记录用户名,然后跳转到留言主页。

1 @app.route('/login', methods=['GET', 'POST'])2 deflogin():3 if request.method == "GET":4 return render_template("login.html")5 else:6 usr = request.form["usr"]7 pwd = request.form["pwd"]8 try:9 the_user = User.query.filter(User.username == usr).all() #查询用户是否存在

10 if len(the_user) == 1:11 if the_user[0].password ==pwd:12 session.clear()13 session["user"] =usr14 return redirect(url_for("index"))15 else:16 msg = "密码错误!"

17 return render_template("login.html", msg=msg)18 else:19 msg = "用户名不存在!"

20 return render_template("login.html", msg=msg)21 except:22 msg = "登录失败,请重试!"

23 return render_template("login.html", msg=msg)

4.发表留言

用户登录后可以发表留言,用户在发表的时候还可以选择是否匿名,下面是留言板块的截图:

在后台接收到前端发送的用户的留言信息后,要通过session来获取用户名,还要用Python中的datetime模块来得到此时的日期时间,除此之外,还要知道用户是否选择了匿名。如果用户选择了匿名留言,则会向后台发送数据,反之则不会,所以要用异常处理来得到该数据,再将该字段的值设置为True或者False。

try:

key = request.form["the_select"]

msg.is_anonymous = True

except:

msg.is_anonymous = False

和前面一样的,留言主页也需要GET方法和POST方法,然后就是需要查询留言数据并显示到页面上,代码如下:

1 @app.route('/index', methods=['GET', 'POST'])2 defindex():3 if request.method == 'GET':4 result =Message.query.all()5 return render_template("index.html", result=result)6 else:7 msg =Message()8 msg.id = len(Message.query.all()) + 1

9 msg.user = session["user"]10 msg.content = request.form["text_input"] #留言内容

11 now = datetime.datetime.now() #获取当前时间

12 msg.date =now.date()13 msg.time =datetime.time(now.hour, now.minute, now.second)14 try:15 key = request.form["the_select"]16 msg.is_anonymous =True17 except:18 msg.is_anonymous =False19 db.session.add(msg)20 db.session.commit()21 result =Message.query.all()22 return render_template("index.html", result=result)

四、运行截图

下面是一个留言主页的截图,其中有几条留言,有匿名的也有不匿名的:

五、个人总结

这个留言板还是很简单的,主要是刚开始学习Flask框架,有很多不了解的地方,因此遇到了很多问题也花了很多时间,后面我会继续学习,并且对这个留言板增加功能和进行改进的,比如回复别人的留言、删除自己的留言等等。

完整代码已上传到GitHub!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值