Python 每日一练 | Flask 实现半成品留言板
留言板Flask实现
引言
- 看了几天网上的代码,终于写出来一个半成品的
Flask的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题
或者渲染写的存在问题吧\(|(*′口`)\) - 最近找到了一本能系统学习
Flask的书,看在后续学习的过程中能不能解决这个问题吧,哎,好菜啊\(_〆(´Д` )\) - 不过这次练习还是学习到了不少新知识,对
Flask有了新的认识,所以还是在这里继续记录一下
Flask连接Mysql
- 我最早看到的实验楼做的
Flask的一个示例还是比较简单的那种,因为它是只用到了一个表,所以直接使用的自带的sqlite3的库实现的数据库连接,他这种连接方式我个人感觉就是利用了一个文件存储数据的那种方式实现的,实际并不能说是使用了数据库的方式 - 首先来大致说一下它的思路,就是先预写好创建数据表的
sql脚本,然后使用\tmp目录(类似一个回收站一样的,由于存储临时数据的目录)下自己设置的flaskr.db文件存储数据,这个文件一开始是不存在的,所以所以就要涉及到我们要先去初始化一下数据库,当这一切都操作完成后,就完成了一个数据库的处理,详细的代码及流程大家可以自己去看一下,我这里就不多说了 - 到了我这次实现连接的方式了,我是使用的
Flask_SQLALchemy库实现的和mysql的数据库连接,这个Flask-SQLAlchemy数据库实例提供了一个基类以及一组辅助类和函数用于定义它的结构。 - 大致的流程,首先还是数据库的连接,示例代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SECRET_KEY'] = "Konmu" #就是一个密钥,对于flask以及相关的扩展的加密,为了安全所设置
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:123456@127.0.0.1:3306/web_talk" # 数据库链接格式用户:密码@主机名/数据库名
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #设置请求结束后自动提交数据库中的变动
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app) #实例化数据库对象
- 应用程序数据库
URL必须在Flask配置对象中的SQLALCHEMY_DATABASE_URI键中进行配置。另一个有用的选项是SQLALCHEMY_COMMIT_ON_TEARDOWN,可以设置为True来启用自动提交数据库更改在每个请求中。 - 定义数据库模型
'''定义数据库结构'''
class User(db.Model):
#定义表名,存储用户信息
__tablename__ = 'user'
#定义各字段
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64),unique=True)# 用户名
password = db.Column(db.String(64),unique=True)# 密码
email = db.Column(db.String(64),unique=True)# 邮箱
def __repr__(self):
return '<User {}>'.format(self.name) # repr()方法显示一个可读字符串,用于测试使用
# 留言
class MessageText(db.Model):
#定义存储留言的表
__tablename__ = 'messagetext'
#定义各字段
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(64))#用户名
content = db.Column(db.String(100))# 留言内容
def __repr__(self):
return('<MessageText %r Title %r>'%(self.id,self.title))
__tablename__类变量定义数据库中表的名称。如果tablename缺省Flask-SQLAlchemy会指定默认的表名,但是这些缺省名称不遵守使用复数命名的约定,所以最好是显式命名表名。其余的变量是模型的属性,被定义为db.Column类的实例。- 对于这个数据库的实例化和数据写入,使用了这个库之后我感觉就像是直接操作一个类的对象一样方便了,从而不需要再去使用
sql语句了 - 初始化数据库,是使用的
create_all()方法 - 下面是我留言板(姑且这么叫吧)完成后数据库存储的数据截图

后端编写
- 对于我们存储的问题解决后,剩下就是编写我们的留言板的代码了,由于前端的三剑客我已经忘得差不多了,所以就只写了一个非常简易的表单
- 针对留言信息,我们肯定就要使用
POST方法来传递了,所以method要有POST,其余就是对于数据库的数据的操作,即要把留言数据写入 - 我的示例代码如下
@app.route('/index')
def index():
return('hello,welcome!')
@app.route('/message', methods=['GET', 'POST'])
def message():
if request.method == 'GET':
result = MessageText.query.all()
return(render_template('message.html',messagetext=result))
else:
try:
result = MessageText.query.all()
msg = MessageText()
msg.id = MessageText.query.count() + 1
msg.title = request.form["title"]
msg.content = request.form["content"]
now = datetime.datetime.now()
msg.date = now.date()
msg.time = datetime.time(now.hour,now.minute,now.second)
db.session.add(msg)
db.session.commit()
flash('New entry was successfully posted')
return redirect(url_for("message.html",messagetext=result))
except:
return(render_template('message.html', msg="留言失败!"))
- 至此,大致的留言板的框架和基本功能已经完成,剩余的一些问题,后续学习到了解决方案会对此进行完善
*大致的效果如下:

参考文章的链接:
- 有关
python如何操作mysql大家可以看一下这篇文章 https://www.jianshu.com/p/7e32074e4fad
小结
- 这次的练习是针对的
python每日一练的第23题,到此这个专题的练习也还剩下两个练习了,总的来说经过这些练习,Python的掌握加深了不少,虽然之前练习的一些现在又遗忘了一些,但是后续还会继续去重新复习一遍,现在趁着备考的闲余来多加一些练习,争取能有更深一步的掌握。由于前端写的太low及这次的效果还存在问题所以这里就暂时不粘出来了\(ε=ε=ε=┏(゜ロ゜;)┛\)
Python 每日一练 | Flask 实现半成品留言板的更多相关文章
- python每日一练:0007题
第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...
- [python每日一练]--0012:敏感词过滤 type2
题目链接:https://github.com/Show-Me-the-Code/show-me-the-code代码github链接:https://github.com/wjsaya/python ...
- Python 每日一练(5)
引言 Python每日一练又开始啦,今天的专题和Excel有关,主要是实现将txt文本中数据写入到Excel中,说来也巧,今天刚好学校要更新各团支部的人员信息,就借此直接把事情做了 主要对于三种数据类 ...
- Python 每日一练(4)
引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...
- Python每日一练(1)
这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...
- Python 每日一练(3)
引言 今天的每日一练,学习了一下用Python生成四位的图像验证码,就是我们常常在登录时见到的那种(#`O′) 思路分析 正如常见的那种图像验证码,它是由数字和字母的随机组合产生的,所以我们首先的第一 ...
- Python 每日一练(2)
引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
#coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...
- Python 每日一练(7)
引言 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把xls中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...
随机推荐
- git的下载与安装
Git的下载地址:https://git-scm.com/download/win 第一步:根据自己电脑的位数下载Git 第二步:下载安装包,放到指定的文件夹 第三步:更换路径安装Git(也可以放在C ...
- vue后台管理系统介绍
项目GitHub地址:https://github.com/Little-Orange7/cmms-vue 一.简介 很多公司稍微复杂一点的业务,基本上都需要后台管理系统,来对业务进行各个维度的统计. ...
- Redis超详细总结
NoSQL概述 一.数据存储的演化史 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多. 上述 ...
- B. Modulo Sum dp
https://codeforces.com/contest/577/problem/B 先读懂题意,substring 这个是子串说明不可以跳 subsequence这个是子序列可以跳 这个题目是一 ...
- python学习之 %s %d 以及%变量名的含义
%age是对前面age变量的引用,%d是将这个变量名为age的值加到其中,但是如果变量值为字符串类型,则这里应该写成%s 也就是说当变量值为数值类型,而且必须是整型类型 应该使用%d 当变量值为字符串 ...
- 【Spark】这一篇或许能让你大概了解如何通过JavaAPI实现DataFrame的相关操作
文章目录 需求概述 步骤 一.创建Maven工程并导包 二.选用第一种方法:利用反射机制配合样例类构建DataFrame 开发代码 选用第二种方法:通过StrucType配合Row构建DataFram ...
- redis文章汇总
方便集群管理时的查看操作 http://www.cnblogs.com/mushroom/p/4738170.html http://www.cnblogs.com/hjwublog/p/568170 ...
- [hdu5534]DP
题目原意:给一棵n个点的树添加边,给定度函数f(d)为一个点的度的函数,求所有点的度函数的和 思路: 函数只与点的度有关,而与点无关,n个点的树有n-1条边,共产生2(n-1)个度,每个点至少有1个度 ...
- 黑马程序员_毕向东_Java基础视频教程——switch语句练习(随笔)
switch(练习) /* if和 switch 语句很像. 具体什么场景下使用什么语句呢? 如果判断的具体数值不多且符合byte.short.int.char.String类型,虽然两个语句都可以使 ...
- 【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉
机器视觉 machine vision机器视觉是人工智能正在快速发展的一个分支.机器视觉作为生产过程中关键技术之一,在机器或者生产线上,机器视觉可以检测产品质量以便将不合格的产品剔除,或者指导机器人完 ...