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中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...
随机推荐
- P3306 [SDOI2013]随机数生成器(bzoj3122)
洛谷 bzoj 特判+多测真恶心 . \(0\le a\le P−1,0\le b\le P−1,2\le P\le 10^9\) Sample Input 3 7 1 1 3 3 7 2 2 2 0 ...
- centos安装libconfig
安装很简单,生成的.so文件会被安装到/usr/local/lib目录,记得修改/etc/profile. 安装过程会出现两个错误: What is makeinfo, and how do I ge ...
- P1666前缀单词
题目传送门点我传送 Ⅰ.字典树+树型DP 非常奇妙的一种解法 第一部分:构建树 先对来的单词读入,插入字典树 然后对于一颗字典树,其实是有很多无用边的,所以我们需要删去一些边 删去非单词节点和非单词节 ...
- C. Coffee Break 贪心 思维 有点难 有意思
C. Coffee Break 这个贪心之前好像写过,还是感觉挺难的,有点不会写. 这个题目大意是:给你一个数列n个元素,然后给你一天的时间,给你一个间隔时间d, 问你最少要用多少天可以把这个数列的所 ...
- Re模块练习题
import re s = "1 -2*(60+(-40.35/5)-(-4*3))" # 获取所有数字 ret = re.findall(r"\d+", s) ...
- Linux文件操作命令并举例说明其作用
ls ,常用于查看当前文件下有工作中需要的文件 cd, 常用于进行切换文件的位置 vim,常用于编辑软件系统相关的配置文件 ps –ef|grep jdk,常用语显示跟jdk有关的进程 |:表示 ...
- JavaWeb实战:报价计算系统(layui+tomcat+cookie实现)
JavaWeb实战:报价计算系统(layui+tomcat+cookie实现) 系统概述: 该系统是文物物流公司的一个小功能模块,用于帮助用户计算运费.点击查看实际效果 系统文档: 添加展品: 在表单 ...
- flink入门学习
Flink学习笔记 一.简介 1.定义: 针对流数据和批数据的分布式处理引擎.它主要是由 Java 代码实现.. 2.应用场景: 流数据:把所有任务当成流来处理,处理观察和分析连续事件产生的数 ...
- 一个数组求其最长递增子序列(LIS)
一个数组求其最长递增子序列(LIS) 例如数组{3, 1, 4, 2, 3, 9, 4, 6}的LIS是{1, 2, 3, 4, 6},长度为5,假设数组长度为N,求数组的LIS的长度, 需要一个额外 ...
- 移动端纯css超出盒子出现横向滚动条
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...