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中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...
随机推荐
- swipe 滑动操作
1.swipe() 滑动用法 swipe(self, start_x, start_y, end_x, end_y, duration=None) :Args: - start_x - 开始滑动的x坐 ...
- spring学习笔记(五)自定义spring-boot-starter(1)
在我们开始定义之前我们应该知道springBoot的大致运行原理,我们从springBoot启动类开始.首先我们看下这个注解,@SpringBootApplication,跟进去可以看到如下代码: @ ...
- 环境篇:Superset
环境篇:Superset Superset 是什么? Apache Superset 是一个开源.现代.轻量的BI分析工具,能够对接多种数据源,拥有丰富的图表展示形式.支持自定义仪表盘,用户界面友好, ...
- 字节码编程,Byte-buddy篇一《基于Byte Buddy语法创建的第一个HelloWorld》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相对于小傅哥之前编写的字节码编程: ASM.Javassist 系列,Byte Bu ...
- Leetcode_45. 跳跃游戏 II
每个位置i有一个最大跳跃距离,求最小步数从0跳到n-1. dp[i]表示从0跳到i的最少步数,显然可以转移的状态就是从i-a[i]到i-1. 因为是最小步数,考虑用优先队列优化,再考虑到状态有范围的, ...
- nginx脚本自动安装
nginx脚本自动安装 脚本功能: 自动安装nginx 自动判别系统是否安装nginx 自定义安装nginx路径 自定义安装nginx版本. #!/bin/bash #2019年10月30日16:00 ...
- 一文带你了解Spring核心接口Ordered的实现及应用
前言 最近在看框架的时候,发现了这个接口,在此进行总结,希望能够给大家帮助,同时提升自己. order接口的大体介绍 Spring框架中有这个一个接口,名字叫Ordered,联想我们在数据库中应用的O ...
- 学习python的第一天,python的简单知识
python 是现如今比较火的一种编程语言.在抱着试试的态度我来进行学习下python.要学习python 要先进行环境的安装. 下面是下载链接:https://pan.baidu.com/s/1PW ...
- CODING 敏捷实战系列课第五讲:敏捷中国史
敏捷软件开发方法自 2001 年传入中国以来,历经十多年的发展变迁,目前已经成为国内 IT 企业主流的研发管理方法.敏捷方法的传播和发展历程,是中国 IT 行业发展的剪影.CODING 特邀敏捷顾问. ...
- 8.4 Go select
8.4 Go select Go语言引入了select关键字,用于处理异步IO问题,语义和switch特别相似.语法由select开始,每个条件由case语句来描述.每个case语句必须是IO操作. ...